17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/renderer/prerender/prerender_media_load_deferrer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/callback_helpers.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/prerender_messages.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace prerender {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochPrerenderMediaLoadDeferrer::PrerenderMediaLoadDeferrer(
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    content::RenderFrame* render_frame,
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const base::Closure& closure)
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : RenderFrameObserver(render_frame),
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      is_prerendering_(true),
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      continue_loading_cb_(closure) {
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DCHECK(!continue_loading_cb_.is_null());
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochPrerenderMediaLoadDeferrer::~PrerenderMediaLoadDeferrer() {}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool PrerenderMediaLoadDeferrer::OnMessageReceived(
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const IPC::Message& message) {
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  IPC_BEGIN_MESSAGE_MAP(PrerenderMediaLoadDeferrer, message)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(PrerenderMsg_SetIsPrerendering, OnSetIsPrerendering)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid PrerenderMediaLoadDeferrer::OnSetIsPrerendering(bool is_prerendering) {
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Prerendering can only be enabled prior to a RenderFrame's first
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // navigation, so no PrerenderMediaLoadDeferrer should see the notification
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that enables prerendering.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!is_prerendering);
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (!is_prerendering_ || is_prerendering)
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  is_prerendering_ = false;
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::ResetAndReturn(&continue_loading_cb_).Run();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace prerender
45