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

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 1478643002: Refactor media out of WebContentsImpl to MediaWebContentsObserver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove cruft. Created 5 years 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/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 358754a6894b03d62c33345edbeb32d2c1b4d915..852d27c9cf34997ccb112e732af5733f673db1a9 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -47,9 +47,9 @@
#include "content/browser/manifest/manifest_manager_host.h"
#include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/media/capture/web_contents_audio_muter.h"
+#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/message_port_message_filter.h"
#include "content/browser/plugin_content_origin_whitelist.h"
-#include "content/browser/power_save_blocker_impl.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_delegate_view.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
@@ -91,7 +91,6 @@
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_contents_delegate.h"
-#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/bindings_policy.h"
#include "content/public/common/browser_plugin_guest_mode.h"
#include "content/public/common/content_constants.h"
@@ -115,10 +114,6 @@
#include "ui/gfx/screen.h"
#include "ui/gl/gl_switches.h"
-#if defined(ENABLE_BROWSER_CDMS)
-#include "content/browser/media/media_web_contents_observer.h"
-#endif
-
#if defined(OS_ANDROID)
#include "content/browser/android/content_video_view.h"
#include "content/browser/media/android/media_session.h"
@@ -413,10 +408,7 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context)
frame_tree_.SetFrameRemoveListener(
base::Bind(&WebContentsImpl::OnFrameRemoved,
base::Unretained(this)));
-#if defined(ENABLE_BROWSER_CDMS)
media_web_contents_observer_.reset(new MediaWebContentsObserver(this));
-#endif
-
wake_lock_service_context_.reset(new WakeLockServiceContext(this));
}
@@ -430,8 +422,6 @@ WebContentsImpl::~WebContentsImpl() {
frame_tree_.ForEach(
base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown));
- ClearAllPowerSaveBlockers();
-
for (std::set<RenderWidgetHostImpl*>::iterator iter =
created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
(*iter)->DetachDelegate();
@@ -630,10 +620,7 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host,
IPC_MESSAGE_HANDLER(FrameHostMsg_EndColorChooser, OnEndColorChooser)
IPC_MESSAGE_HANDLER(FrameHostMsg_SetSelectedColorInColorChooser,
OnSetSelectedColorInColorChooser)
- IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPlayingNotification,
- OnMediaPlayingNotification)
- IPC_MESSAGE_HANDLER(FrameHostMsg_MediaPausedNotification,
- OnMediaPausedNotification)
+
IPC_MESSAGE_HANDLER(ViewHostMsg_DidFirstVisuallyNonEmptyPaint,
OnFirstVisuallyNonEmptyPaint)
IPC_MESSAGE_HANDLER(FrameHostMsg_DidLoadResourceFromMemoryCache,
@@ -1157,16 +1144,10 @@ void WebContentsImpl::NotifyNavigationStateChanged(
tracked_objects::ScopedTracker tracking_profile(
FROM_HERE_WITH_EXPLICIT_FUNCTION(
"466285 WebContentsImpl::NotifyNavigationStateChanged"));
- // Create and release the audio power save blocker depending on whether the
- // tab is actively producing audio or not.
- if ((changed_flags & INVALIDATE_TYPE_TAB) &&
- AudioStreamMonitor::monitoring_available()) {
- if (WasRecentlyAudible()) {
- if (!audio_power_save_blocker_)
- CreateAudioPowerSaveBlocker();
- } else {
- audio_power_save_blocker_.reset();
- }
+ // Notify the media observer of potential audibility changes.
+ if (changed_flags & INVALIDATE_TYPE_TAB) {
+ media_web_contents_observer_->MaybeUpdateAudibleState(
+ AudioStreamMonitor::monitoring_available() && WasRecentlyAudible());
}
if (delegate_)
@@ -1203,10 +1184,6 @@ void WebContentsImpl::WasShown() {
GetRootWindowResizerRect(rvh->GetWidget()));
}
- // Restore power save blocker if there are active video players running.
- if (!active_video_players_.empty() && !video_power_save_blocker_)
- CreateVideoPowerSaveBlocker();
-
FOR_EACH_OBSERVER(WebContentsObserver, observers_, WasShown());
should_normally_be_visible_ = true;
@@ -1226,9 +1203,6 @@ void WebContentsImpl::WasHidden() {
if (view)
view->Hide();
}
-
- // Release any video power save blockers held as video is not visible.
- video_power_save_blocker_.reset();
}
FOR_EACH_OBSERVER(WebContentsObserver, observers_, WasHidden());
@@ -3448,78 +3422,6 @@ void WebContentsImpl::OnUpdateFaviconURL(
DidUpdateFaviconURL(candidates));
}
-void WebContentsImpl::CreateAudioPowerSaveBlocker() {
- DCHECK(!audio_power_save_blocker_);
- audio_power_save_blocker_ = PowerSaveBlocker::Create(
- PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension,
- PowerSaveBlocker::kReasonAudioPlayback, "Playing audio");
-}
-
-void WebContentsImpl::CreateVideoPowerSaveBlocker() {
- DCHECK(!video_power_save_blocker_);
- DCHECK(!active_video_players_.empty());
- video_power_save_blocker_ = PowerSaveBlocker::Create(
- PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
- PowerSaveBlocker::kReasonVideoPlayback, "Playing video");
- //TODO(mfomitchev): Support PowerSaveBlocker on Aura - crbug.com/546718.
-#if defined(OS_ANDROID) && !defined(USE_AURA)
-static_cast<PowerSaveBlockerImpl*>(video_power_save_blocker_.get())
- ->InitDisplaySleepBlocker(this);
-#endif
-}
-
-void WebContentsImpl::MaybeReleasePowerSaveBlockers() {
- // If there are no more audio players and we don't have audio stream
- // monitoring, release the audio power save blocker here instead of during
- // NotifyNavigationStateChanged().
- if (active_audio_players_.empty() &&
- !AudioStreamMonitor::monitoring_available()) {
- audio_power_save_blocker_.reset();
- }
-
- // If there are no more video players, clear the video power save blocker.
- if (active_video_players_.empty())
- video_power_save_blocker_.reset();
-}
-
-void WebContentsImpl::OnMediaPlayingNotification(int64 player_cookie,
- bool has_video,
- bool has_audio,
- bool is_remote) {
- // Ignore the videos playing remotely and don't hold the wake lock for the
- // screen.
- if (is_remote) return;
-
- if (has_audio) {
- AddMediaPlayerEntry(player_cookie, &active_audio_players_);
-
- // If we don't have audio stream monitoring, allocate the audio power save
- // blocker here instead of during NotifyNavigationStateChanged().
- if (!audio_power_save_blocker_ &&
- !AudioStreamMonitor::monitoring_available()) {
- CreateAudioPowerSaveBlocker();
- }
- }
-
- if (has_video) {
- AddMediaPlayerEntry(player_cookie, &active_video_players_);
-
- // If we're not hidden and have just created a player, create a blocker.
- if (!video_power_save_blocker_ && !IsHidden())
- CreateVideoPowerSaveBlocker();
- }
-
- FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaStartedPlaying());
-}
-
-void WebContentsImpl::OnMediaPausedNotification(int64 player_cookie) {
- RemoveMediaPlayerEntry(player_cookie, &active_audio_players_);
- RemoveMediaPlayerEntry(player_cookie, &active_video_players_);
- MaybeReleasePowerSaveBlockers();
-
- FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaPaused());
-}
-
#if defined(OS_ANDROID)
void WebContentsImpl::OnMediaSessionStateChanged() {
@@ -3754,7 +3656,6 @@ void WebContentsImpl::RenderFrameCreated(RenderFrameHost* render_frame_host) {
}
void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
- ClearPowerSaveBlockers(render_frame_host);
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
RenderFrameDeleted(render_frame_host));
@@ -4711,20 +4612,6 @@ void WebContentsImpl::CreateBrowserPluginEmbedderIfNecessary() {
browser_plugin_embedder_.reset(BrowserPluginEmbedder::Create(this));
}
-void WebContentsImpl::ClearPowerSaveBlockers(
- RenderFrameHost* render_frame_host) {
- RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_);
- RemoveAllMediaPlayerEntries(render_frame_host, &active_video_players_);
- MaybeReleasePowerSaveBlockers();
-}
-
-void WebContentsImpl::ClearAllPowerSaveBlockers() {
- active_audio_players_.clear();
- active_video_players_.clear();
- audio_power_save_blocker_.reset();
- video_power_save_blocker_.reset();
-}
-
gfx::Size WebContentsImpl::GetSizeForNewRenderView() {
gfx::Size size;
if (delegate_)
@@ -4747,51 +4634,6 @@ void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) {
delegate_->UpdatePreferredSize(this, new_size);
}
-void WebContentsImpl::AddMediaPlayerEntry(int64 player_cookie,
- ActiveMediaPlayerMap* player_map) {
- if (!HasValidFrameSource())
- return;
-
- const uintptr_t key =
- reinterpret_cast<uintptr_t>(render_frame_message_source_);
- DCHECK(std::find((*player_map)[key].begin(),
- (*player_map)[key].end(),
- player_cookie) == (*player_map)[key].end());
- (*player_map)[key].push_back(player_cookie);
-}
-
-void WebContentsImpl::RemoveMediaPlayerEntry(int64 player_cookie,
- ActiveMediaPlayerMap* player_map) {
- if (!HasValidFrameSource())
- return;
-
- const uintptr_t key =
- reinterpret_cast<uintptr_t>(render_frame_message_source_);
- ActiveMediaPlayerMap::iterator it = player_map->find(key);
- if (it == player_map->end())
- return;
-
- // Remove the player.
- PlayerList::iterator player_it =
- std::find(it->second.begin(), it->second.end(), player_cookie);
- if (player_it != it->second.end())
- it->second.erase(player_it);
-
- // If there are no players left, remove the map entry.
- if (it->second.empty())
- player_map->erase(it);
-}
-
-void WebContentsImpl::RemoveAllMediaPlayerEntries(
- RenderFrameHost* render_frame_host,
- ActiveMediaPlayerMap* player_map) {
- ActiveMediaPlayerMap::iterator it =
- player_map->find(reinterpret_cast<uintptr_t>(render_frame_host));
- if (it == player_map->end())
- return;
- player_map->erase(it);
-}
-
WebUI* WebContentsImpl::CreateWebUI(const GURL& url,
const std::string& frame_name) {
WebUIImpl* web_ui = new WebUIImpl(this, frame_name);
@@ -4813,4 +4655,14 @@ void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
view_->SetOverscrollControllerEnabled(CanOverscrollContent());
}
+void WebContentsImpl::MediaStartedPlaying(
+ const WebContentsObserver::MediaPlayerId& id) {
+ FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaStartedPlaying(id));
ncarter (slow) 2015/12/02 17:49:31 This FOR_EACH_OBSERVER will happen in the context
DaleCurtis 2015/12/02 19:55:46 Correct, which is also the existing behavior.
+}
+
+void WebContentsImpl::MediaPaused(
+ const WebContentsObserver::MediaPlayerId& id) {
+ FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaPaused(id));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698