- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / renderer / prerender / prerender_media_load_deferrer.cc
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