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