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