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..82189b8d7a47d12e2514b46d8ad5765cd6357d9c 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()) |
| + 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,8 @@ bool MediaWebContentsObserver::OnMessageReceived( |
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPaused, OnMediaPaused) |
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPlaying, |
| OnMediaPlaying) |
| + IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaFullscreenChange, |
| + OnMediaFullscreenChange) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -156,6 +179,21 @@ void MediaWebContentsObserver::OnMediaPlaying( |
| id); |
| } |
| +void MediaWebContentsObserver::OnMediaFullscreenChange( |
| + RenderFrameHost* render_frame_host, |
| + int delegate_id, |
| + bool is_fullscreen) { |
| + const MediaPlayerId id(render_frame_host, delegate_id); |
| + |
| + if (!is_fullscreen) { |
| + if (*fullscreen_player_ == id) |
|
liberato (no reviews please)
2017/02/22 18:28:20
has_value?
mlamouri (slow - plz ping)
2017/02/22 19:23:26
Good catch! :)
|
| + fullscreen_player_.reset(); |
| + return; |
| + } |
| + |
| + fullscreen_player_ = id; |
| +} |
| + |
| void MediaWebContentsObserver::ClearPowerSaveBlockers( |
| RenderFrameHost* render_frame_host) { |
| std::set<MediaPlayerId> removed_players; |