From 91873409e26ae1547dcd759735348884823f66ad Mon Sep 17 00:00:00 2001 From: mlamouri Date: Fri, 11 Mar 2016 20:47:52 -0800 Subject: Make MediaSession a runtime-enabled feature on Desktop. At the moment, it's only compiled on Android, this CL compiles it on all platforms but it's only enabled by default on Android. Other platforms have to pass --enable-default-media-session flag to the command line. This CL move all the media session related files from content/browser/media/android/ to content/browser/media/session/ and tear down the Android specific code from MediaSession into a delegate. The Desktop delegate simply pauses other tabs when a media session gets activated in a tab. It is also moving the MediaSessionController handling to a separate class so it can move from MediaWebContentsObserverAndroid to MediaWebContentsObserver easily. BUG=587471 Review URL: https://codereview.chromium.org/1698933004 Cr-Commit-Position: refs/heads/master@{#380850} --- .../browser/media/media_web_contents_observer.cc | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'content/browser/media/media_web_contents_observer.cc') diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc index 1123974..654f99c 100644 --- a/content/browser/media/media_web_contents_observer.cc +++ b/content/browser/media/media_web_contents_observer.cc @@ -26,7 +26,8 @@ static base::LazyInstance::Leaky g_audible_metrics = } // anonymous namespace MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) - : WebContentsObserver(web_contents) {} + : WebContentsObserver(web_contents), + session_controllers_manager_(this) {} MediaWebContentsObserver::~MediaWebContentsObserver() {} @@ -37,6 +38,7 @@ void MediaWebContentsObserver::WebContentsDestroyed() { void MediaWebContentsObserver::RenderFrameDeleted( RenderFrameHost* render_frame_host) { ClearPowerSaveBlockers(render_frame_host); + session_controllers_manager_.RenderFrameDeleted(render_frame_host); } void MediaWebContentsObserver::MaybeUpdateAudibleState() { @@ -93,19 +95,26 @@ void MediaWebContentsObserver::OnMediaDestroyed( OnMediaPaused(render_frame_host, delegate_id, true); } - void MediaWebContentsObserver::OnMediaPaused(RenderFrameHost* render_frame_host, int delegate_id, bool reached_end_of_stream) { - const MediaPlayerId id(render_frame_host, delegate_id); - const bool removed_audio = RemoveMediaPlayerEntry(id, &active_audio_players_); - const bool removed_video = RemoveMediaPlayerEntry(id, &active_video_players_); + const MediaPlayerId player_id(render_frame_host, delegate_id); + const bool removed_audio = + RemoveMediaPlayerEntry(player_id, &active_audio_players_); + const bool removed_video = + RemoveMediaPlayerEntry(player_id, &active_video_players_); MaybeReleasePowerSaveBlockers(); if (removed_audio || removed_video) { // Notify observers the player has been "paused". - static_cast(web_contents())->MediaStoppedPlaying(id); + static_cast(web_contents()) + ->MediaStoppedPlaying(player_id); } + + if (reached_end_of_stream) + session_controllers_manager_.OnEnd(player_id); + else + session_controllers_manager_.OnPause(player_id); } void MediaWebContentsObserver::OnMediaPlaying( @@ -143,6 +152,11 @@ void MediaWebContentsObserver::OnMediaPlaying( } } + if (!session_controllers_manager_.RequestPlay( + id, has_audio, is_remote, duration)) { + return; + } + // Notify observers of the new player. DCHECK(has_audio || has_video); static_cast(web_contents())->MediaStartedPlaying(id); -- cgit v1.1