Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / content / public / browser / web_contents_observer.cc
blob1e705f865275f7afcb3b0c00e2a9abf1a3d1ad97
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.
5 #include "content/public/browser/web_contents_observer.h"
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"
11 namespace content {
13 WebContentsObserver::WebContentsObserver(WebContents* web_contents)
14 : web_contents_(nullptr) {
15 Observe(web_contents);
18 WebContentsObserver::WebContentsObserver()
19 : web_contents_(nullptr) {
22 WebContentsObserver::~WebContentsObserver() {
23 if (web_contents_)
24 web_contents_->RemoveObserver(this);
27 WebContents* WebContentsObserver::web_contents() const {
28 return web_contents_;
31 void 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;
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);
44 bool WebContentsObserver::OnMessageReceived(
45 const IPC::Message& message,
46 RenderFrameHost* render_frame_host) {
47 return false;
50 bool WebContentsObserver::OnMessageReceived(const IPC::Message& message) {
51 return false;
54 bool WebContentsObserver::Send(IPC::Message* message) {
55 if (!web_contents_) {
56 delete message;
57 return false;
60 return web_contents_->Send(message);
63 int WebContentsObserver::routing_id() const {
64 if (!web_contents_)
65 return MSG_ROUTING_NONE;
67 return web_contents_->GetRoutingID();
70 void WebContentsObserver::ResetWebContents() {
71 web_contents_->RemoveObserver(this);
72 web_contents_ = nullptr;
75 } // namespace content