Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2012 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 "content/public/browser/web_contents_observer.h"
      6 
      7 #include "content/browser/web_contents/web_contents_impl.h"
      8 #include "content/public/browser/navigation_details.h"
      9 #include "content/public/browser/render_view_host.h"
     10 
     11 namespace content {
     12 
     13 WebContentsObserver::WebContentsObserver(WebContents* web_contents)
     14     : web_contents_(NULL) {
     15   Observe(web_contents);
     16 }
     17 
     18 WebContentsObserver::WebContentsObserver()
     19     : web_contents_(NULL) {
     20 }
     21 
     22 WebContentsObserver::~WebContentsObserver() {
     23   if (web_contents_)
     24     web_contents_->RemoveObserver(this);
     25 }
     26 
     27 WebContents* WebContentsObserver::web_contents() const {
     28   return web_contents_;
     29 }
     30 
     31 void WebContentsObserver::Observe(WebContents* web_contents) {
     32   if (web_contents_)
     33     web_contents_->RemoveObserver(this);
     34   web_contents_ = static_cast<WebContentsImpl*>(web_contents);
     35   if (web_contents_) {
     36     web_contents_->AddObserver(this);
     37   }
     38 }
     39 
     40 bool WebContentsObserver::OnMessageReceived(const IPC::Message& message) {
     41   return false;
     42 }
     43 
     44 bool WebContentsObserver::Send(IPC::Message* message) {
     45   if (!web_contents_) {
     46     delete message;
     47     return false;
     48   }
     49 
     50   return web_contents_->Send(message);
     51 }
     52 
     53 int WebContentsObserver::routing_id() const {
     54   if (!web_contents_)
     55     return MSG_ROUTING_NONE;
     56 
     57   return web_contents_->GetRoutingID();
     58 }
     59 
     60 void WebContentsObserver::WebContentsImplDestroyed() {
     61   // Do cleanup so that 'this' can safely be deleted from WebContentsDestroyed.
     62   web_contents_->RemoveObserver(this);
     63   WebContentsImpl* contents = web_contents_;
     64   web_contents_ = NULL;
     65   WebContentsDestroyed(contents);
     66 }
     67 
     68 }  // namespace content
     69