summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/track/AudioTrack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/track/AudioTrack.cpp')
-rw-r--r--Source/WebCore/html/track/AudioTrack.cpp157
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