Home | History | Annotate | Download | only in prerender
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/renderer/prerender/prerender_media_load_deferrer.h"
      6 
      7 #include "base/callback_helpers.h"
      8 #include "chrome/common/prerender_messages.h"
      9 #include "content/public/renderer/render_view.h"
     10 
     11 namespace prerender {
     12 
     13 PrerenderMediaLoadDeferrer::PrerenderMediaLoadDeferrer(
     14     content::RenderView* render_view,
     15     const base::Closure& closure)
     16     : RenderViewObserver(render_view),
     17       is_prerendering_(true),
     18       continue_loading_cb_(closure) {
     19   DCHECK(!continue_loading_cb_.is_null());
     20 }
     21 
     22 PrerenderMediaLoadDeferrer::~PrerenderMediaLoadDeferrer() {}
     23 
     24 bool PrerenderMediaLoadDeferrer::OnMessageReceived(
     25     const IPC::Message& message) {
     26   IPC_BEGIN_MESSAGE_MAP(PrerenderMediaLoadDeferrer, message)
     27     IPC_MESSAGE_HANDLER(PrerenderMsg_SetIsPrerendering, OnSetIsPrerendering)
     28   IPC_END_MESSAGE_MAP()
     29 
     30   return false;
     31 }
     32 
     33 void PrerenderMediaLoadDeferrer::OnSetIsPrerendering(bool is_prerendering) {
     34   // Prerendering can only be enabled prior to a RenderView's first
     35   // navigation, so no PrerenderMediaLoadDeferrer should see the notification
     36   // that enables prerendering.
     37   DCHECK(!is_prerendering);
     38   if (!is_prerendering_ || is_prerendering)
     39     return;
     40 
     41   is_prerendering_ = false;
     42   base::ResetAndReturn(&continue_loading_cb_).Run();
     43 }
     44 
     45 }  // namespace prerender
     46