web_contents_observer.cc revision 010d83a9304c5a91596085d917d248abff47903a
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
11namespace content {
12
13WebContentsObserver::WebContentsObserver(WebContents* web_contents)
14    : web_contents_(NULL) {
15  Observe(web_contents);
16}
17
18WebContentsObserver::WebContentsObserver()
19    : web_contents_(NULL) {
20}
21
22WebContentsObserver::~WebContentsObserver() {
23  if (web_contents_)
24    web_contents_->RemoveObserver(this);
25}
26
27WebContents* WebContentsObserver::web_contents() const {
28  return web_contents_;
29}
30
31void WebContentsObserver::Observe(WebContents* web_contents) {
32  if (web_contents == web_contents_) {
33    // Early exit to avoid infinite loops if we're in the middle of a callback.
34    return;
35  }
36  if (web_contents_)
37    web_contents_->RemoveObserver(this);
38  web_contents_ = static_cast<WebContentsImpl*>(web_contents);
39  if (web_contents_) {
40    web_contents_->AddObserver(this);
41  }
42}
43
44bool WebContentsObserver::OnMessageReceived(const IPC::Message& message) {
45  return false;
46}
47
48bool WebContentsObserver::Send(IPC::Message* message) {
49  if (!web_contents_) {
50    delete message;
51    return false;
52  }
53
54  return web_contents_->Send(message);
55}
56
57int WebContentsObserver::routing_id() const {
58  if (!web_contents_)
59    return MSG_ROUTING_NONE;
60
61  return web_contents_->GetRoutingID();
62}
63
64void WebContentsObserver::ResetWebContents() {
65  web_contents_->RemoveObserver(this);
66  web_contents_ = NULL;
67}
68
69}  // namespace content
70