// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/public/browser/web_contents_observer.h" #include "content/browser/renderer_host/render_view_host.h" #include "content/browser/tab_contents/tab_contents.h" #include "content/public/browser/navigation_details.h" namespace content { WebContentsObserver::WebContentsObserver(WebContents* web_contents) : tab_contents_(NULL) { Observe(web_contents); } WebContentsObserver::WebContentsObserver() : tab_contents_(NULL) { } WebContentsObserver::~WebContentsObserver() { if (tab_contents_) tab_contents_->RemoveObserver(this); } WebContents* WebContentsObserver::web_contents() const { return tab_contents_; } void WebContentsObserver::Observe(WebContents* web_contents) { if (tab_contents_) tab_contents_->RemoveObserver(this); tab_contents_ = static_cast(web_contents); if (tab_contents_) { tab_contents_->AddObserver(this); } } bool WebContentsObserver::OnMessageReceived(const IPC::Message& message) { return false; } bool WebContentsObserver::Send(IPC::Message* message) { if (!tab_contents_ || !tab_contents_->GetRenderViewHost()) { delete message; return false; } return tab_contents_->GetRenderViewHost()->Send(message); } int WebContentsObserver::routing_id() const { if (!tab_contents_ || !tab_contents_->GetRenderViewHost()) return MSG_ROUTING_NONE; return tab_contents_->GetRenderViewHost()->routing_id(); } void WebContentsObserver::TabContentsDestroyed() { // Do cleanup so that 'this' can safely be deleted from WebContentsDestroyed. tab_contents_->RemoveObserver(this); TabContents* tab = tab_contents_; tab_contents_ = NULL; WebContentsDestroyed(tab); } } // namespace content