Home | History | Annotate | Download | only in prerender
      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