1 // Copyright (c) 2011 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/browser/prerender/prerender_render_view_host_observer.h" 6 7 #include "chrome/browser/prerender/prerender_contents.h" 8 #include "chrome/common/render_messages.h" 9 10 using content::RenderViewHost; 11 12 namespace prerender { 13 14 PrerenderRenderViewHostObserver::PrerenderRenderViewHostObserver( 15 PrerenderContents* prerender_contents, 16 RenderViewHost* render_view_host) 17 : content::RenderViewHostObserver(render_view_host), 18 prerender_contents_(prerender_contents) { 19 } 20 21 void PrerenderRenderViewHostObserver::RenderViewHostDestroyed( 22 RenderViewHost* rvh) { 23 // The base class deletes |this| on RenderViewHost destruction but we want the 24 // lifetime to be tied to the PrerenderContents instead, so we'll do nothing 25 // here. 26 } 27 28 bool PrerenderRenderViewHostObserver::OnMessageReceived( 29 const IPC::Message& message) { 30 if (!prerender_contents_) 31 return content::RenderViewHostObserver::OnMessageReceived(message); 32 33 bool handled = true; 34 // The following messages we do want to consume. 35 IPC_BEGIN_MESSAGE_MAP(PrerenderRenderViewHostObserver, message) 36 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_MaybeCancelPrerenderForHTML5Media, 37 OnMaybeCancelPrerenderForHTML5Media) 38 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CancelPrerenderForPrinting, 39 OnCancelPrerenderForPrinting) 40 IPC_MESSAGE_UNHANDLED(handled = false) 41 IPC_END_MESSAGE_MAP() 42 43 // Pass the message through. 44 if (!handled) 45 handled = content::RenderViewHostObserver::OnMessageReceived(message); 46 47 return handled; 48 } 49 50 // The base class declares this as protected so this is just here to make it 51 // public so it is visible to the caller. 52 bool PrerenderRenderViewHostObserver::Send(IPC::Message* message) { 53 return content::RenderViewHostObserver::Send(message); 54 } 55 56 void PrerenderRenderViewHostObserver::OnMaybeCancelPrerenderForHTML5Media() { 57 prerender_contents_->Destroy(FINAL_STATUS_HTML5_MEDIA); 58 } 59 60 void PrerenderRenderViewHostObserver::OnCancelPrerenderForPrinting() { 61 prerender_contents_->Destroy(FINAL_STATUS_WINDOW_PRINT); 62 } 63 64 } 65