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

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

Issue 562863002: Gardening: Revert "Use AudioStreamMonitor to control power save blocking." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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/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 5331f495c576d2b562dc2a803df473f1341b9976..b34f55c9edb9e37a8349a26317f054f8e799a196 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -38,7 +38,6 @@
#include "content/browser/geolocation/geolocation_dispatcher_host.h"
#include "content/browser/host_zoom_map_impl.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
-#include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/media/midi_dispatcher_host.h"
#include "content/browser/message_port_message_filter.h"
#include "content/browser/message_port_service.h"
@@ -377,8 +376,7 @@ WebContentsImpl::WebContentsImpl(
force_disable_overscroll_content_(false),
last_dialog_suppressed_(false),
accessibility_mode_(
- BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()),
- audio_stream_monitor_(this) {
+ BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()) {
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++)
g_created_callbacks.Get().at(i).Run(this);
frame_tree_.SetFrameRemoveListener(
@@ -1011,18 +1009,6 @@ bool WebContentsImpl::IsBeingDestroyed() const {
void WebContentsImpl::NotifyNavigationStateChanged(
InvalidateTypes changed_flags) {
- // 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();
- }
- }
-
if (delegate_)
delegate_->NavigationStateChanged(this, changed_flags);
}
@@ -1056,10 +1042,6 @@ void WebContentsImpl::WasShown() {
rvh->ResizeRectChanged(GetRootWindowResizerRect());
}
- // 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;
@@ -1082,9 +1064,6 @@ void WebContentsImpl::WasHidden() {
if (*iter)
(*iter)->Hide();
}
-
- // Release any video power save blockers held as video is not visible.
- video_power_save_blocker_.reset();
}
FOR_EACH_OBSERVER(WebContentsObserver, observers_, WasHidden());
@@ -2409,10 +2388,6 @@ void WebContentsImpl::InsertCSS(const std::string& css) {
GetMainFrame()->GetRoutingID(), css));
}
-bool WebContentsImpl::WasRecentlyAudible() {
- return audio_stream_monitor_.WasRecentlyAudible();
-}
-
bool WebContentsImpl::FocusLocationBarByDefault() {
NavigationEntry* entry = controller_.GetVisibleEntry();
if (entry && entry->GetURL() == GURL(url::kAboutBlankURL))
@@ -3026,70 +3001,43 @@ void WebContentsImpl::OnUpdateFaviconURL(
DidUpdateFaviconURL(candidates));
}
-void WebContentsImpl::CreateAudioPowerSaveBlocker() {
- // ChromeOS has its own way of handling power save blocks for media.
-#if !defined(OS_CHROMEOS)
- DCHECK(!audio_power_save_blocker_);
- audio_power_save_blocker_ = PowerSaveBlocker::Create(
- PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, "Playing Audio");
-#endif
-}
-
-void WebContentsImpl::CreateVideoPowerSaveBlocker() {
- // ChromeOS has its own way of handling power save blocks for media.
+void WebContentsImpl::OnMediaPlayingNotification(int64 player_cookie,
+ bool has_video,
+ bool has_audio) {
#if !defined(OS_CHROMEOS)
- DCHECK(!video_power_save_blocker_);
- DCHECK(!active_video_players_.empty());
- video_power_save_blocker_ = PowerSaveBlocker::Create(
- PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, "Playing Video");
+ scoped_ptr<PowerSaveBlocker> blocker;
+ if (has_video) {
+ blocker = PowerSaveBlocker::Create(
+ PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, "Playing video");
#if defined(OS_ANDROID)
- static_cast<PowerSaveBlockerImpl*>(video_power_save_blocker_.get())
- ->InitDisplaySleepBlocker(GetView()->GetNativeView());
-#endif
+ static_cast<PowerSaveBlockerImpl*>(blocker.get())
+ ->InitDisplaySleepBlocker(GetView()->GetNativeView());
#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();
+ } else if (has_audio) {
+ blocker = PowerSaveBlocker::Create(
+ PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, "Playing audio");
}
- // 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) {
- 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 (blocker) {
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_message_source_);
+ if (!power_save_blockers_.contains(key)) {
+ power_save_blockers_.add(key,
+ make_scoped_ptr(new PowerSaveBlockerMapEntry));
}
+ PowerSaveBlockerMapEntry* map_entry =
+ power_save_blockers_.get(key);
+ map_entry->set(player_cookie, blocker.Pass());
}
-
- 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();
- }
+#endif // !defined(OS_CHROMEOS)
}
void WebContentsImpl::OnMediaPausedNotification(int64 player_cookie) {
- RemoveMediaPlayerEntry(player_cookie, &active_audio_players_);
- RemoveMediaPlayerEntry(player_cookie, &active_video_players_);
- MaybeReleasePowerSaveBlockers();
+#if !defined(OS_CHROMEOS)
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_message_source_);
+ PowerSaveBlockerMapEntry* map_entry = power_save_blockers_.get(key);
+ if (map_entry)
+ map_entry->erase(player_cookie);
+#endif // !defined(OS_CHROMEOS)
}
void WebContentsImpl::OnFirstVisuallyNonEmptyPaint() {
@@ -3107,6 +3055,7 @@ void WebContentsImpl::NotifyBeforeFormRepostWarningShow() {
BeforeFormRepostWarningShow());
}
+
void WebContentsImpl::ActivateAndShowRepostFormWarningDialog() {
Activate();
if (delegate_)
@@ -4255,16 +4204,19 @@ BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() const {
void WebContentsImpl::ClearPowerSaveBlockers(
RenderFrameHost* render_frame_host) {
- RemoveAllMediaPlayerEntries(render_frame_host, &active_audio_players_);
- RemoveAllMediaPlayerEntries(render_frame_host, &active_video_players_);
- MaybeReleasePowerSaveBlockers();
+#if !defined(OS_CHROMEOS)
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
+ scoped_ptr<PowerSaveBlockerMapEntry> map_entry =
+ power_save_blockers_.take_and_erase(key);
+ if (map_entry)
+ map_entry->clear();
+#endif
}
void WebContentsImpl::ClearAllPowerSaveBlockers() {
- active_audio_players_.clear();
- active_video_players_.clear();
- audio_power_save_blocker_.reset();
- video_power_save_blocker_.reset();
+#if !defined(OS_CHROMEOS)
+ power_save_blockers_.clear();
+#endif
}
gfx::Size WebContentsImpl::GetSizeForNewRenderView() {
@@ -4289,45 +4241,6 @@ void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) {
delegate_->UpdatePreferredSize(this, new_size);
}
-void WebContentsImpl::AddMediaPlayerEntry(int64 player_cookie,
- ActiveMediaPlayerMap* player_map) {
- 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) {
- 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);
-}
-
void WebContentsImpl::ResumeResponseDeferredAtStart() {
FrameTreeNode* node = frame_tree_.root();
node->render_manager()->ResumeResponseDeferredAtStart();
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/browser/web_contents/web_contents_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698