diff options
Diffstat (limited to 'Source/WebCore/html/track/AudioTrack.cpp')
-rw-r--r-- | Source/WebCore/html/track/AudioTrack.cpp | 157 |
1 files changed, 80 insertions, 77 deletions
diff --git a/Source/WebCore/html/track/AudioTrack.cpp b/Source/WebCore/html/track/AudioTrack.cpp index aecdb0af6..eeb05537f 100644 --- a/Source/WebCore/html/track/AudioTrack.cpp +++ b/Source/WebCore/html/track/AudioTrack.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2011 Google Inc. All rights reserved. - * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. + * Copyright (C) 2011-2017 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,158 +30,161 @@ */ #include "config.h" +#include "AudioTrack.h" #if ENABLE(VIDEO_TRACK) -#include "AudioTrack.h" - -#include "AudioTrackList.h" -#include "Event.h" #include "HTMLMediaElement.h" +#include <wtf/NeverDestroyed.h> namespace WebCore { const AtomicString& AudioTrack::alternativeKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, alternative, ("alternative", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> alternative("alternative", AtomicString::ConstructFromLiteral); return alternative; } const AtomicString& AudioTrack::descriptionKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, description, ("description", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> description("description", AtomicString::ConstructFromLiteral); return description; } const AtomicString& AudioTrack::mainKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, main, ("main", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> main("main", AtomicString::ConstructFromLiteral); return main; } const AtomicString& AudioTrack::mainDescKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, mainDesc, ("main-desc", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> mainDesc("main-desc", AtomicString::ConstructFromLiteral); return mainDesc; } const AtomicString& AudioTrack::translationKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, translation, ("translation", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> translation("translation", AtomicString::ConstructFromLiteral); return translation; } const AtomicString& AudioTrack::commentaryKeyword() { - DEFINE_STATIC_LOCAL(const AtomicString, commentary, ("commentary", AtomicString::ConstructFromLiteral)); + static NeverDestroyed<AtomicString> commentary("commentary", AtomicString::ConstructFromLiteral); return commentary; } -AudioTrack::AudioTrack(AudioTrackClient* client, PassRefPtr<AudioTrackPrivate> trackPrivate) - : TrackBase(TrackBase::AudioTrack, trackPrivate->id(), trackPrivate->label(), trackPrivate->language()) - , m_enabled(trackPrivate->enabled()) - , m_client(client) +AudioTrack::AudioTrack(AudioTrackClient& client, AudioTrackPrivate& trackPrivate) + : MediaTrackBase(MediaTrackBase::AudioTrack, trackPrivate.id(), trackPrivate.label(), trackPrivate.language()) + , m_enabled(trackPrivate.enabled()) + , m_client(&client) , m_private(trackPrivate) { m_private->setClient(this); - - switch (m_private->kind()) { - case AudioTrackPrivate::Alternative: - setKind(AudioTrack::alternativeKeyword()); - break; - case AudioTrackPrivate::Description: - setKind(AudioTrack::descriptionKeyword()); - break; - case AudioTrackPrivate::Main: - setKind(AudioTrack::mainKeyword()); - break; - case AudioTrackPrivate::MainDesc: - setKind(AudioTrack::mainDescKeyword()); - break; - case AudioTrackPrivate::Translation: - setKind(AudioTrack::translationKeyword()); - break; - case AudioTrackPrivate::Commentary: - setKind(AudioTrack::commentaryKeyword()); - break; - case AudioTrackPrivate::None: - setKind(emptyString()); - break; - default: - ASSERT_NOT_REACHED(); - break; - } + updateKindFromPrivate(); } AudioTrack::~AudioTrack() { - m_private->setClient(0); + m_private->setClient(nullptr); } -bool AudioTrack::isValidKind(const AtomicString& value) const +void AudioTrack::setPrivate(AudioTrackPrivate& trackPrivate) { - if (value == alternativeKeyword()) - return true; - if (value == descriptionKeyword()) - return true; - if (value == mainKeyword()) - return true; - if (value == mainDescKeyword()) - return true; - if (value == translationKeyword()) - return true; - if (value == commentaryKeyword()) - return true; + if (m_private.ptr() == &trackPrivate) + return; + + m_private->setClient(nullptr); + m_private = trackPrivate; + m_private->setEnabled(m_enabled); + m_private->setClient(this); - return false; + updateKindFromPrivate(); +} + +bool AudioTrack::isValidKind(const AtomicString& value) const +{ + return value == alternativeKeyword() + || value == commentaryKeyword() + || value == descriptionKeyword() + || value == mainKeyword() + || value == mainDescKeyword() + || value == translationKeyword(); } -void AudioTrack::setEnabled(const bool enabled) +void AudioTrack::setEnabled(bool enabled) { if (m_enabled == enabled) return; - m_enabled = enabled; m_private->setEnabled(enabled); - - if (m_client) - m_client->audioTrackEnabledChanged(this); } -size_t AudioTrack::inbandTrackIndex() +size_t AudioTrack::inbandTrackIndex() const { - ASSERT(m_private); return m_private->trackIndex(); } -void AudioTrack::enabledChanged(AudioTrackPrivate* trackPrivate, bool enabled) +void AudioTrack::enabledChanged(bool enabled) { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); - setEnabled(enabled); + if (m_enabled == enabled) + return; + + m_enabled = enabled; + + if (m_client) + m_client->audioTrackEnabledChanged(*this); } -void AudioTrack::idChanged(TrackPrivateBase* trackPrivate, const String& id) +void AudioTrack::idChanged(const AtomicString& id) { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); setId(id); } -void AudioTrack::labelChanged(TrackPrivateBase* trackPrivate, const String& label) +void AudioTrack::labelChanged(const AtomicString& label) { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); setLabel(label); } -void AudioTrack::languageChanged(TrackPrivateBase* trackPrivate, const String& language) +void AudioTrack::languageChanged(const AtomicString& language) { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); setLanguage(language); } -void AudioTrack::willRemove(TrackPrivateBase* trackPrivate) +void AudioTrack::willRemove() { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); - mediaElement()->removeAudioTrack(this); + mediaElement()->removeAudioTrack(*this); +} + +void AudioTrack::updateKindFromPrivate() +{ + switch (m_private->kind()) { + case AudioTrackPrivate::Alternative: + setKind(AudioTrack::alternativeKeyword()); + break; + case AudioTrackPrivate::Description: + setKind(AudioTrack::descriptionKeyword()); + break; + case AudioTrackPrivate::Main: + setKind(AudioTrack::mainKeyword()); + break; + case AudioTrackPrivate::MainDesc: + setKind(AudioTrack::mainDescKeyword()); + break; + case AudioTrackPrivate::Translation: + setKind(AudioTrack::translationKeyword()); + break; + case AudioTrackPrivate::Commentary: + setKind(AudioTrack::commentaryKeyword()); + break; + case AudioTrackPrivate::None: + setKind(emptyString()); + break; + default: + ASSERT_NOT_REACHED(); + break; + } } } // namespace WebCore |