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

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

Issue 425713003: Fix a PowerSaveBlocker leak in WebContentsImpl. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 years, 4 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
===================================================================
--- content/browser/web_contents/web_contents_impl.cc (revision 288099)
+++ content/browser/web_contents/web_contents_impl.cc (working copy)
@@ -3012,7 +3012,6 @@
void WebContentsImpl::OnMediaPlayingNotification(int64 player_cookie,
bool has_video,
bool has_audio) {
-// Chrome OS does its own detection of audio and video.
#if !defined(OS_CHROMEOS)
scoped_ptr<PowerSaveBlocker> blocker;
if (has_video) {
@@ -3028,17 +3027,24 @@
}
if (blocker) {
- power_save_blockers_[render_frame_message_source_][player_cookie] =
- blocker.release();
+ 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());
}
#endif // !defined(OS_CHROMEOS)
}
void WebContentsImpl::OnMediaPausedNotification(int64 player_cookie) {
- // Chrome OS does its own detection of audio and video.
#if !defined(OS_CHROMEOS)
- delete power_save_blockers_[render_frame_message_source_][player_cookie];
- power_save_blockers_[render_frame_message_source_].erase(player_cookie);
+ 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)
}
@@ -4209,15 +4215,19 @@
void WebContentsImpl::ClearPowerSaveBlockers(
RenderFrameHost* render_frame_host) {
- STLDeleteValues(&power_save_blockers_[render_frame_host]);
- power_save_blockers_.erase(render_frame_host);
+#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() {
- for (PowerSaveBlockerMap::iterator i(power_save_blockers_.begin());
- i != power_save_blockers_.end(); ++i)
- STLDeleteValues(&power_save_blockers_[i->first]);
+#if !defined(OS_CHROMEOS)
power_save_blockers_.clear();
+#endif
}
gfx::Size WebContentsImpl::GetSizeForNewRenderView() {

Powered by Google App Engine
This is Rietveld 408576698