Chromium Code Reviews| Index: chrome/renderer/chrome_content_renderer_client.cc |
| diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc |
| index d925fe3a1f2bccdcc6b416b4c3d5e6c4ebb1f33f..06187044a9640f34ac0ec3bd1b8fa41bbdb1d2dd 100644 |
| --- a/chrome/renderer/chrome_content_renderer_client.cc |
| +++ b/chrome/renderer/chrome_content_renderer_client.cc |
| @@ -341,6 +341,30 @@ bool IsStandaloneExtensionProcess() { |
| extensions::switches::kExtensionProcess); |
| } |
| #endif |
| + |
| +// Defers media player loading in background pages until they're visible. |
| +class MediaLoadDeferrer : public content::RenderFrameObserver { |
| + public: |
| + MediaLoadDeferrer(content::RenderFrame* render_frame, |
| + const base::Closure& continue_loading_cb) |
| + : content::RenderFrameObserver(render_frame), |
| + continue_loading_cb_(continue_loading_cb) {} |
| + ~MediaLoadDeferrer() override {} |
| + |
| + private: |
| + // content::RenderFrameObserver implementation: |
| + void WasShown() override { |
| + continue_loading_cb_.Run(); |
| + delete this; |
| + } |
| + |
| + // TODO(dalecurtis): Include an idle listener too. http://crbug.com/509135 |
| + |
| + const base::Closure continue_loading_cb_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MediaLoadDeferrer); |
| +}; |
| + |
| } // namespace |
| ChromeContentRendererClient::ChromeContentRendererClient() { |
| @@ -689,13 +713,20 @@ void ChromeContentRendererClient::DeferMediaLoad( |
| closure.Run(); |
| return; |
| #else |
| - if (!prerender::PrerenderHelper::IsPrerendering(render_frame)) { |
| + if (prerender::PrerenderHelper::IsPrerendering(render_frame)) { |
| + // Lifetime is tied to |render_frame| via content::RenderFrameObserver. |
| + new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); |
| + return; |
| + } |
| + |
| + // TODO(dalecurtis): Include an idle check too. http://crbug.com/509135 |
| + if (!render_frame->IsHidden()) { |
|
Lei Zhang
2015/08/13 19:11:47
nit, how about we structure this block consistentl
DaleCurtis
2015/08/13 21:44:48
Done.
|
| closure.Run(); |
| return; |
| } |
| // Lifetime is tied to |render_frame| via content::RenderFrameObserver. |
| - new prerender::PrerenderMediaLoadDeferrer(render_frame, closure); |
| + new MediaLoadDeferrer(render_frame, closure); |
| #endif |
| } |