Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(947)

Unified Diff: Source/core/html/HTMLMediaElement.cpp

Issue 416333002: Introduce AudioSourceProviderClientLockScope. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Patch Set 2 + explicit Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/modules/webaudio/MediaElementAudioSourceNode.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLMediaElement.cpp
diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp
index 2e7f9801e54e65cc38afbcd0fde33499f681174c..1fcbdeb2d7a646e6ce582aa9f051204e132a488a 100644
--- a/Source/core/html/HTMLMediaElement.cpp
+++ b/Source/core/html/HTMLMediaElement.cpp
@@ -168,6 +168,30 @@ private:
RawPtrWillBeMember<HTMLMediaElement> m_mediaElement;
};
+class AudioSourceProviderClientLockScope {
+ STACK_ALLOCATED();
+public:
+#if ENABLE(WEB_AUDIO)
+ AudioSourceProviderClientLockScope(HTMLMediaElement& element)
+ : m_client(element.audioSourceNode())
+ {
+ if (m_client)
+ m_client->lock();
+ }
+ ~AudioSourceProviderClientLockScope()
+ {
+ if (m_client)
+ m_client->unlock();
+ }
+
+private:
+ RawPtrWillBeMember<AudioSourceProviderClient> m_client;
+#else
+ explicit AudioSourceProviderClientLockScope(HTMLMediaElement&) { }
+ ~AudioSourceProviderClientLockScope() { }
+#endif
+};
+
static const AtomicString& AudioKindToString(WebMediaPlayerClient::AudioTrackKind kind)
{
switch (kind) {
@@ -3393,17 +3417,10 @@ void HTMLMediaElement::clearMediaPlayer(int flags)
cancelDeferredLoad();
-#if ENABLE(WEB_AUDIO)
- if (m_audioSourceNode)
- m_audioSourceNode->lock();
-#endif
-
- clearMediaPlayerAndAudioSourceProviderClientWithoutLocking();
-
-#if ENABLE(WEB_AUDIO)
- if (m_audioSourceNode)
- m_audioSourceNode->unlock();
-#endif
+ {
+ AudioSourceProviderClientLockScope scope(*this);
+ clearMediaPlayerAndAudioSourceProviderClientWithoutLocking();
+ }
stopPeriodicTimers();
m_loadTimer.stop();
@@ -3688,22 +3705,16 @@ void* HTMLMediaElement::preDispatchEventHandler(Event* event)
void HTMLMediaElement::createMediaPlayer()
{
-#if ENABLE(WEB_AUDIO)
- if (m_audioSourceNode)
- m_audioSourceNode->lock();
-#endif
+ AudioSourceProviderClientLockScope scope(*this);
closeMediaSource();
m_player = MediaPlayer::create(this);
#if ENABLE(WEB_AUDIO)
- if (m_audioSourceNode) {
+ if (m_audioSourceNode && audioSourceProvider()) {
// When creating the player, make sure its AudioSourceProvider knows about the client.
- if (audioSourceProvider())
- audioSourceProvider()->setClient(m_audioSourceNode);
-
- m_audioSourceNode->unlock();
+ audioSourceProvider()->setClient(m_audioSourceNode);
}
#endif
}
@@ -3713,14 +3724,9 @@ void HTMLMediaElement::setAudioSourceNode(AudioSourceProviderClient* sourceNode)
{
m_audioSourceNode = sourceNode;
- if (m_audioSourceNode)
- m_audioSourceNode->lock();
-
+ AudioSourceProviderClientLockScope scope(*this);
if (audioSourceProvider())
audioSourceProvider()->setClient(m_audioSourceNode);
-
- if (m_audioSourceNode)
- m_audioSourceNode->unlock();
}
AudioSourceProvider* HTMLMediaElement::audioSourceProvider()
« no previous file with comments | « no previous file | Source/modules/webaudio/MediaElementAudioSourceNode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698