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

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: rebased 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..e405b13ff2f9d1a1fab87af629b7c143f6964575 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 MediaSessionService state
+ // and real state.
+ //
+ // TODO(zqzhang): Maybe also compute for IsControllable()? See
+ // https://crbug.com/674983
+ 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) {
@@ -566,6 +579,17 @@ void MediaSessionImpl::OnServiceCreated(MediaSessionServiceImpl* service) {
void MediaSessionImpl::OnServiceDestroyed(MediaSessionServiceImpl* service) {
services_.erase(service->GetRenderFrameHost());
+ if (routed_service_ == service) {
+ routed_service_ = nullptr;
+ UpdateRoutedService();
+ }
+}
+
+void MediaSessionImpl::OnMediaSessionPlaybackStateChanged(
+ MediaSessionServiceImpl* service) {
+ if (service != routed_service_)
+ return;
+ NotifyAboutStateChange();
}
void MediaSessionImpl::OnMediaSessionMetadataChanged(
« no previous file with comments | « content/browser/media/session/media_session_impl.h ('k') | content/browser/media/session/media_session_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698