Chromium Code Reviews| Index: Source/core/html/HTMLMediaElement.cpp |
| diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp |
| index 2e7f9801e54e65cc38afbcd0fde33499f681174c..b234e8411837d157b7c2487d35177150e8f3863e 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) |
|
haraken
2014/07/26 04:11:37
Add explicit.
tkent
2014/07/28 01:20:55
Done.
|
| + : m_client(element.audioSourceNode()) |
| + { |
| + if (m_client) |
| + m_client->lock(); |
| + } |
| + ~AudioSourceProviderClientLockScope() |
| + { |
| + if (m_client) |
| + m_client->unlock(); |
| + } |
| + |
| +private: |
| + RawPtrWillBeMember<AudioSourceProviderClient> m_client; |
|
haraken
2014/07/26 04:11:37
I wonder if we can just use RefPtrWillBeMember<Aud
tkent
2014/07/28 01:20:55
Done. But do you think Patch Set 3 is better than
|
| +#else |
| + 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() |