| Index: content/browser/media/session/media_session_impl.cc
|
| diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc
|
| index 5254f43d7c6cbff73199ddf599a88d73dee94f0c..c074e0c789ee63f94c9390d2f453304a230f70dc 100644
|
| --- a/content/browser/media/session/media_session_impl.cc
|
| +++ b/content/browser/media/session/media_session_impl.cc
|
| @@ -298,7 +298,8 @@ void MediaSessionImpl::Resume(SuspendType suspend_type) {
|
| }
|
|
|
| void MediaSessionImpl::Suspend(SuspendType suspend_type) {
|
| - DCHECK(!IsSuspended());
|
| + if (!IsSuspended())
|
| + return;
|
|
|
| OnSuspendInternal(suspend_type, State::SUSPENDED);
|
| }
|
| @@ -510,9 +511,21 @@ void MediaSessionImpl::AbandonSystemAudioFocusIfNeeded() {
|
| }
|
|
|
| void MediaSessionImpl::NotifyAboutStateChange() {
|
| + bool is_actually_suspended = IsSuspended();
|
| + // Compute the actual playback state using both the advertised state and real
|
| + // state.
|
| + //
|
| + // TODO(zqzhang): Maybe also compute for IsControllable()? See
|
| + // https://crbug.com/xxxxxx
|
| + if (routed_service_ &&
|
| + routed_service_->playback_state() ==
|
| + blink::mojom::MediaSessionPlaybackState::PLAYING) {
|
| + is_actually_suspended = false;
|
| + }
|
| +
|
| media_session_state_listeners_.Notify(audio_focus_state_);
|
| for (auto& observer : observers_)
|
| - observer.MediaSessionStateChanged(IsControllable(), IsSuspended());
|
| + observer.MediaSessionStateChanged(IsControllable(), is_actually_suspended);
|
| }
|
|
|
| void MediaSessionImpl::SetAudioFocusState(State audio_focus_state) {
|
| @@ -568,6 +581,13 @@ void MediaSessionImpl::OnServiceDestroyed(MediaSessionServiceImpl* service) {
|
| services_.erase(service->GetRenderFrameHost());
|
| }
|
|
|
| +void MediaSessionImpl::OnMediaSessionAdvertisedPlaybackStateChanged(
|
| + MediaSessionServiceImpl* service) {
|
| + if (service != routed_service_)
|
| + return;
|
| + NotifyAboutStateChange();
|
| +}
|
| +
|
| void MediaSessionImpl::OnMediaSessionMetadataChanged(
|
| MediaSessionServiceImpl* service) {
|
| if (service != routed_service_)
|
|
|