diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index 8afa7a38dc85..d2b2aef0fca7 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1005,7 +1005,11 @@ class HTMLMediaElement::AudioChannelAgentCallback final } mPlayingThroughTheAudioChannel = playingThroughTheAudioChannel; - NotifyAudioChannelAgent(mPlayingThroughTheAudioChannel); + if (mPlayingThroughTheAudioChannel) { + StartAudioChannelAgent(); + } else { + StopAudioChanelAgent(); + } } } @@ -1145,10 +1149,10 @@ class HTMLMediaElement::AudioChannelAgentCallback final void Shutdown() { MOZ_ASSERT(!mIsShutDown); - if (mAudioChannelAgent) { - mAudioChannelAgent->NotifyStoppedPlaying(); - mAudioChannelAgent = nullptr; + if (mAudioChannelAgent && mAudioChannelAgent->IsPlayingStarted()) { + StopAudioChanelAgent(); } + mAudioChannelAgent = nullptr; mIsShutDown = true; } @@ -1186,22 +1190,23 @@ class HTMLMediaElement::AudioChannelAgentCallback final return true; } - void NotifyAudioChannelAgent(bool aPlaying) { + void StartAudioChannelAgent() { MOZ_ASSERT(mAudioChannelAgent); - - if (aPlaying) { - AudioPlaybackConfig config; - nsresult rv = - mAudioChannelAgent->NotifyStartedPlaying(&config, IsOwnerAudible()); - if (NS_WARN_IF(NS_FAILED(rv))) { - return; - } - - WindowVolumeChanged(config.mVolume, config.mMuted); - WindowSuspendChanged(config.mSuspend); - } else { - mAudioChannelAgent->NotifyStoppedPlaying(); + MOZ_ASSERT(!mAudioChannelAgent->IsPlayingStarted()); + AudioPlaybackConfig config; + if (NS_WARN_IF(NS_FAILED(mAudioChannelAgent->NotifyStartedPlaying( + &config, IsOwnerAudible())))) { + return; } + + WindowVolumeChanged(config.mVolume, config.mMuted); + WindowSuspendChanged(config.mSuspend); + } + + void StopAudioChanelAgent() { + MOZ_ASSERT(mAudioChannelAgent); + MOZ_ASSERT(mAudioChannelAgent->IsPlayingStarted()); + mAudioChannelAgent->NotifyStoppedPlaying(); } void SetSuspended(SuspendTypes aSuspend) {