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

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: fix compile 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..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;

Powered by Google App Engine
This is Rietveld 408576698