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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 3015 matching lines...) Expand 10 before | Expand all | Expand 10 after
3026 3026
3027 void WebContentsImpl::OnUpdateFaviconURL( 3027 void WebContentsImpl::OnUpdateFaviconURL(
3028 const std::vector<FaviconURL>& candidates) { 3028 const std::vector<FaviconURL>& candidates) {
3029 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 3029 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
3030 DidUpdateFaviconURL(candidates)); 3030 DidUpdateFaviconURL(candidates));
3031 } 3031 }
3032 3032
3033 void WebContentsImpl::OnMediaPlayingNotification(int64 player_cookie, 3033 void WebContentsImpl::OnMediaPlayingNotification(int64 player_cookie,
3034 bool has_video, 3034 bool has_video,
3035 bool has_audio) { 3035 bool has_audio) {
3036 // Chrome OS does its own detection of audio and video.
3037 #if !defined(OS_CHROMEOS) 3036 #if !defined(OS_CHROMEOS)
3038 scoped_ptr<PowerSaveBlocker> blocker; 3037 scoped_ptr<PowerSaveBlocker> blocker;
3039 if (has_video) { 3038 if (has_video) {
3040 blocker = PowerSaveBlocker::Create( 3039 blocker = PowerSaveBlocker::Create(
3041 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, "Playing video"); 3040 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, "Playing video");
3042 #if defined(OS_ANDROID) 3041 #if defined(OS_ANDROID)
3043 static_cast<PowerSaveBlockerImpl*>(blocker.get()) 3042 static_cast<PowerSaveBlockerImpl*>(blocker.get())
3044 ->InitDisplaySleepBlocker(GetView()->GetNativeView()); 3043 ->InitDisplaySleepBlocker(GetView()->GetNativeView());
3045 #endif 3044 #endif
3046 } else if (has_audio) { 3045 } else if (has_audio) {
3047 blocker = PowerSaveBlocker::Create( 3046 blocker = PowerSaveBlocker::Create(
3048 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, "Playing audio"); 3047 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, "Playing audio");
3049 } 3048 }
3050 3049
3051 if (blocker) { 3050 if (blocker) {
3051 delete power_save_blockers_[render_frame_message_source_][player_cookie];
Avi (use Gerrit) 2014/08/07 15:30:06 Gah. I see that this fixes the problem, but can't
3052 power_save_blockers_[render_frame_message_source_][player_cookie] = 3052 power_save_blockers_[render_frame_message_source_][player_cookie] =
3053 blocker.release(); 3053 blocker.release();
3054 } 3054 }
3055 #endif // !defined(OS_CHROMEOS) 3055 #endif // !defined(OS_CHROMEOS)
3056 } 3056 }
3057 3057
3058 void WebContentsImpl::OnMediaPausedNotification(int64 player_cookie) { 3058 void WebContentsImpl::OnMediaPausedNotification(int64 player_cookie) {
3059 // Chrome OS does its own detection of audio and video.
3060 #if !defined(OS_CHROMEOS) 3059 #if !defined(OS_CHROMEOS)
3061 delete power_save_blockers_[render_frame_message_source_][player_cookie]; 3060 delete power_save_blockers_[render_frame_message_source_][player_cookie];
3062 power_save_blockers_[render_frame_message_source_].erase(player_cookie); 3061 power_save_blockers_[render_frame_message_source_].erase(player_cookie);
3063 #endif // !defined(OS_CHROMEOS) 3062 #endif // !defined(OS_CHROMEOS)
3064 } 3063 }
3065 3064
3066 void WebContentsImpl::OnFirstVisuallyNonEmptyPaint() { 3065 void WebContentsImpl::OnFirstVisuallyNonEmptyPaint() {
3067 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 3066 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
3068 DidFirstVisuallyNonEmptyPaint()); 3067 DidFirstVisuallyNonEmptyPaint());
3069 } 3068 }
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after
4206 CHECK(!browser_plugin_guest_); 4205 CHECK(!browser_plugin_guest_);
4207 browser_plugin_guest_.reset(guest); 4206 browser_plugin_guest_.reset(guest);
4208 } 4207 }
4209 4208
4210 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() const { 4209 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() const {
4211 return browser_plugin_embedder_.get(); 4210 return browser_plugin_embedder_.get();
4212 } 4211 }
4213 4212
4214 void WebContentsImpl::ClearPowerSaveBlockers( 4213 void WebContentsImpl::ClearPowerSaveBlockers(
4215 RenderFrameHost* render_frame_host) { 4214 RenderFrameHost* render_frame_host) {
4215 #if !defined(OS_CHROMEOS)
4216 STLDeleteValues(&power_save_blockers_[render_frame_host]); 4216 STLDeleteValues(&power_save_blockers_[render_frame_host]);
4217 power_save_blockers_.erase(render_frame_host); 4217 power_save_blockers_.erase(render_frame_host);
4218 #endif
4218 } 4219 }
4219 4220
4220 void WebContentsImpl::ClearAllPowerSaveBlockers() { 4221 void WebContentsImpl::ClearAllPowerSaveBlockers() {
4222 #if !defined(OS_CHROMEOS)
4221 for (PowerSaveBlockerMap::iterator i(power_save_blockers_.begin()); 4223 for (PowerSaveBlockerMap::iterator i(power_save_blockers_.begin());
4222 i != power_save_blockers_.end(); ++i) 4224 i != power_save_blockers_.end(); ++i)
4223 STLDeleteValues(&power_save_blockers_[i->first]); 4225 STLDeleteValues(&power_save_blockers_[i->first]);
4224 power_save_blockers_.clear(); 4226 power_save_blockers_.clear();
4227 #endif
4225 } 4228 }
4226 4229
4227 gfx::Size WebContentsImpl::GetSizeForNewRenderView() { 4230 gfx::Size WebContentsImpl::GetSizeForNewRenderView() {
4228 gfx::Size size; 4231 gfx::Size size;
4229 if (delegate_) 4232 if (delegate_)
4230 size = delegate_->GetSizeForNewRenderView(this); 4233 size = delegate_->GetSizeForNewRenderView(this);
4231 if (size.IsEmpty()) 4234 if (size.IsEmpty())
4232 size = GetContainerBounds().size(); 4235 size = GetContainerBounds().size();
4233 return size; 4236 return size;
4234 } 4237 }
(...skipping 10 matching lines...) Expand all
4245 if (new_size != old_size) 4248 if (new_size != old_size)
4246 delegate_->UpdatePreferredSize(this, new_size); 4249 delegate_->UpdatePreferredSize(this, new_size);
4247 } 4250 }
4248 4251
4249 void WebContentsImpl::ResumeResponseDeferredAtStart() { 4252 void WebContentsImpl::ResumeResponseDeferredAtStart() {
4250 FrameTreeNode* node = frame_tree_.root(); 4253 FrameTreeNode* node = frame_tree_.root();
4251 node->render_manager()->ResumeResponseDeferredAtStart(); 4254 node->render_manager()->ResumeResponseDeferredAtStart();
4252 } 4255 }
4253 4256
4254 } // namespace content 4257 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698