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

Unified Diff: content/browser/media/media_web_contents_observer.cc

Issue 2693203002: Provide a WebContents API to discover the playback of a fullscreen video. (Closed)
Patch Set: Created 3 years, 10 months 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/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;

Powered by Google App Engine
This is Rietveld 408576698