| 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..6ac77cf1e5acc4c75f0fba14258a644e8a030526 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,9 @@ void MediaWebContentsObserver::RenderFrameDeleted(
|
| RenderFrameHost* render_frame_host) {
|
| ClearPowerSaveBlockers(render_frame_host);
|
| session_controllers_manager_.RenderFrameDeleted(render_frame_host);
|
| +
|
| + if (fullscreen_dominant_video_.first.first == render_frame_host)
|
| + fullscreen_dominant_video_.first = MediaPlayerId(nullptr, 0);
|
| }
|
|
|
| void MediaWebContentsObserver::MaybeUpdateAudibleState() {
|
| @@ -58,6 +61,29 @@ void MediaWebContentsObserver::MaybeUpdateAudibleState() {
|
| web_contents(), audio_stream_monitor->IsCurrentlyAudible());
|
| }
|
|
|
| +bool MediaWebContentsObserver::HasActiveFullscreenDominantVideo() const {
|
| + DCHECK(web_contents()->IsFullscreen());
|
| +
|
| + // First check if there is a fullscreen or dominant video registered.
|
| + if (fullscreen_dominant_video_.first.first == nullptr)
|
| + return false;
|
| + if (!fullscreen_dominant_video_.second.fullscreen &&
|
| + !fullscreen_dominant_video_.second.dominant) {
|
| + return false;
|
| + }
|
| +
|
| + // It has to be active.
|
| + const auto& players =
|
| + active_video_players_.find(fullscreen_dominant_video_.first.first);
|
| + if (players == active_video_players_.end())
|
| + return false;
|
| + if (players->second.find(fullscreen_dominant_video_.first.second) ==
|
| + players->second.end())
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| bool MediaWebContentsObserver::OnMessageReceived(
|
| const IPC::Message& msg,
|
| RenderFrameHost* render_frame_host) {
|
| @@ -70,6 +96,10 @@ bool MediaWebContentsObserver::OnMessageReceived(
|
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPaused, OnMediaPaused)
|
| IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaPlaying,
|
| OnMediaPlaying)
|
| + IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaFullscreenChange,
|
| + OnMediaFullscreenChange)
|
| + IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDominantChange,
|
| + OnMediaDominantChange)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -156,6 +186,34 @@ 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 (fullscreen_dominant_video_.first == id) {
|
| + fullscreen_dominant_video_.second.fullscreen = is_fullscreen;
|
| + } else if (is_fullscreen) {
|
| + fullscreen_dominant_video_.first = id;
|
| + fullscreen_dominant_video_.second = FullscreenDominantInfo(true, false);
|
| + }
|
| +}
|
| +
|
| +void MediaWebContentsObserver::OnMediaDominantChange(
|
| + RenderFrameHost* render_frame_host,
|
| + int delegate_id,
|
| + bool is_dominant) {
|
| + const MediaPlayerId id(render_frame_host, delegate_id);
|
| +
|
| + if (fullscreen_dominant_video_.first == id) {
|
| + fullscreen_dominant_video_.second.dominant = is_dominant;
|
| + } else if (is_dominant) {
|
| + fullscreen_dominant_video_.first = id;
|
| + fullscreen_dominant_video_.second = FullscreenDominantInfo(false, true);
|
| + }
|
| +}
|
| +
|
| void MediaWebContentsObserver::ClearPowerSaveBlockers(
|
| RenderFrameHost* render_frame_host) {
|
| std::set<MediaPlayerId> removed_players;
|
|
|