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() { |