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 "content/public/renderer/render_view_observer.h" 6 7#include "content/renderer/render_view_impl.h" 8 9using blink::WebFrame; 10 11namespace content { 12 13RenderViewObserver::RenderViewObserver(RenderView* render_view) 14 : render_view_(render_view), 15 routing_id_(MSG_ROUTING_NONE) { 16 // |render_view| can be NULL on unit testing or if Observe() is used. 17 if (render_view) { 18 RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view); 19 routing_id_ = impl->routing_id(); 20 // TODO(jam): bring this back DCHECK_NE(routing_id_, MSG_ROUTING_NONE); 21 impl->AddObserver(this); 22 } 23} 24 25RenderViewObserver::~RenderViewObserver() { 26 if (render_view_) { 27 RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view_); 28 impl->RemoveObserver(this); 29 } 30} 31 32void RenderViewObserver::OnDestruct() { 33 delete this; 34} 35 36bool RenderViewObserver::OnMessageReceived(const IPC::Message& message) { 37 return false; 38} 39 40bool RenderViewObserver::Send(IPC::Message* message) { 41 if (render_view_) 42 return render_view_->Send(message); 43 44 delete message; 45 return false; 46} 47 48RenderView* RenderViewObserver::render_view() const { 49 return render_view_; 50} 51 52void RenderViewObserver::RenderViewGone() { 53 render_view_ = NULL; 54} 55 56void RenderViewObserver::Observe(RenderView* render_view) { 57 RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view_); 58 if (impl) { 59 impl->RemoveObserver(this); 60 routing_id_ = 0; 61 } 62 63 render_view_ = render_view; 64 impl = static_cast<RenderViewImpl*>(render_view_); 65 if (impl) { 66 routing_id_ = impl->routing_id(); 67 impl->AddObserver(this); 68 } 69} 70 71} // namespace content 72