Chromium Code Reviews| Index: 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 87d7670d71aa4ac5aae1a5a5e0ae738b00d66eec..9c6f3f05568341dfff61d78a96d3f6de1cd0c910 100644 |
| --- a/content/browser/media/media_web_contents_observer.cc |
| +++ b/content/browser/media/media_web_contents_observer.cc |
| @@ -31,7 +31,7 @@ MediaWebContentsObserver::MediaWebContentsObserver(WebContents* web_contents) |
| : WebContentsObserver(web_contents), |
| session_controllers_manager_(this) {} |
| -MediaWebContentsObserver::~MediaWebContentsObserver() {} |
| +MediaWebContentsObserver::~MediaWebContentsObserver() = default; |
| void MediaWebContentsObserver::WebContentsDestroyed() { |
| GetAudibleMetrics()->UpdateAudibleWebContentsState(web_contents(), false); |
| @@ -41,6 +41,11 @@ void MediaWebContentsObserver::RenderFrameDeleted( |
| RenderFrameHost* render_frame_host) { |
| ClearPowerSaveBlockers(render_frame_host); |
| session_controllers_manager_.RenderFrameDeleted(render_frame_host); |
| + |
| + if (fullscreen_player_.has_value() && |
| + fullscreen_player_->first == render_frame_host) { |
| + fullscreen_player_.reset(); |
| + } |
| } |
| void MediaWebContentsObserver::MaybeUpdateAudibleState() { |
| @@ -58,6 +63,22 @@ void MediaWebContentsObserver::MaybeUpdateAudibleState() { |
| web_contents(), audio_stream_monitor->IsCurrentlyAudible()); |
| } |
| +bool MediaWebContentsObserver::HasActiveEffectivelyFullscreenVideo() const { |
| + DCHECK(web_contents()->IsFullscreen()); |
| + |
| + if (!fullscreen_player_.has_value()) |
|
dcheng
2017/02/23 03:18:52
Nit: omit .has_value()
mlamouri (slow - plz ping)
2017/02/23 13:34:18
I actually like explicit has_value() but I guess i
|
| + return false; |
| + |
| + // Check that the player is active. |
| + const auto& players = active_video_players_.find(fullscreen_player_->first); |
| + if (players == active_video_players_.end()) |
| + return false; |
| + if (players->second.find(fullscreen_player_->second) == players->second.end()) |
| + return false; |
| + |
| + return true; |
| +} |
| + |
| bool MediaWebContentsObserver::OnMessageReceived( |
| const IPC::Message& msg, |
| RenderFrameHost* render_frame_host) { |
| @@ -70,6 +91,9 @@ bool MediaWebContentsObserver::OnMessageReceived( |
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPaused, OnMediaPaused) |
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPlaying, |
| OnMediaPlaying) |
| + IPC_MESSAGE_HANDLER( |
| + MediaPlayerDelegateHostMsg_OnMediaEffectivelyFullscreenChange, |
| + OnMediaEffectivelyFullscreenChange) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -156,6 +180,21 @@ void MediaWebContentsObserver::OnMediaPlaying( |
| id); |
| } |
| +void MediaWebContentsObserver::OnMediaEffectivelyFullscreenChange( |
| + RenderFrameHost* render_frame_host, |
| + int delegate_id, |
| + bool is_fullscreen) { |
| + const MediaPlayerId id(render_frame_host, delegate_id); |
| + |
| + if (!is_fullscreen) { |
| + if (fullscreen_player_.has_value() && *fullscreen_player_ == id) |
|
dcheng
2017/02/23 03:18:52
Nit: combine the if statements and remove has_valu
mlamouri (slow - plz ping)
2017/02/23 13:34:18
Okay for has_value() but I can't combine the if st
|
| + fullscreen_player_.reset(); |
| + return; |
| + } |
| + |
| + fullscreen_player_ = id; |
| +} |
| + |
| void MediaWebContentsObserver::ClearPowerSaveBlockers( |
| RenderFrameHost* render_frame_host) { |
| std::set<MediaPlayerId> removed_players; |