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

Unified Diff: content/browser/media/session/media_session_impl.cc

Issue 2583463002: [MediaSession] Add playbackState attribute to Blink MediaSession and use it to determine playback s… (Closed)
Patch Set: browser tests Created 4 years 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
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_)

Powered by Google App Engine
This is Rietveld 408576698