| 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 da841da04ba9822298635707c3de75a936dd6ed7..dc29058e3014b16364c857bf9d0c262b66b14146 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));
|
| }
|
|
|
| @@ -433,8 +425,6 @@ WebContentsImpl::~WebContentsImpl() {
|
| // Destroy all WebUI instances.
|
| frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances));
|
|
|
| - ClearAllPowerSaveBlockers();
|
| -
|
| for (std::set<RenderWidgetHostImpl*>::iterator iter =
|
| created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
|
| (*iter)->DetachDelegate();
|
| @@ -633,10 +623,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,
|
| @@ -1169,16 +1156,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_)
|
| @@ -1215,10 +1196,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;
|
| @@ -1238,9 +1215,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());
|
| @@ -3493,78 +3467,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() {
|
| @@ -3799,7 +3701,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));
|
| @@ -4744,20 +4645,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_)
|
| @@ -4780,51 +4667,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);
|
| @@ -4846,4 +4688,14 @@ void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
|
| view_->SetOverscrollControllerEnabled(CanOverscrollContent());
|
| }
|
|
|
| +void WebContentsImpl::MediaStartedPlaying(
|
| + const WebContentsObserver::MediaPlayerId& id) {
|
| + FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaStartedPlaying(id));
|
| +}
|
| +
|
| +void WebContentsImpl::MediaStoppedPlaying(
|
| + const WebContentsObserver::MediaPlayerId& id) {
|
| + FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaStoppedPlaying(id));
|
| +}
|
| +
|
| } // namespace content
|
|
|