diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-08 21:03:10 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-08 21:03:10 +0000 |
commit | f364d139a49933c7212d521801fec68d1b229487 (patch) | |
tree | 7c4fe037e5a083276962d668369dff201eeaf612 /content/browser/renderer_host/render_view_host_observer.cc | |
parent | 5bba4dd3a7ad928f6c8a58aea8d716605eec285a (diff) | |
download | chromium_src-f364d139a49933c7212d521801fec68d1b229487.zip chromium_src-f364d139a49933c7212d521801fec68d1b229487.tar.gz chromium_src-f364d139a49933c7212d521801fec68d1b229487.tar.bz2 |
Relanding http://src.chromium.org/viewvc/chrome?view=rev&revision=80938.
Add a new RenderViewHostObserver interface for filtering IPCs send to RenderViewHost. This is needed because with TabContentsObserver, an observer might not know which RenderViewHost a message came from duing a pending navigation. A side-benefit is that we only have to add these observers once, instead of remembering/knowing all the delegates that might want to filter these messages.
BUG=78629
Review URL: http://codereview.chromium.org/6813046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80984 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/renderer_host/render_view_host_observer.cc')
-rw-r--r-- | content/browser/renderer_host/render_view_host_observer.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/content/browser/renderer_host/render_view_host_observer.cc b/content/browser/renderer_host/render_view_host_observer.cc new file mode 100644 index 0000000..e60e2bb --- /dev/null +++ b/content/browser/renderer_host/render_view_host_observer.cc @@ -0,0 +1,41 @@ +// 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/browser/renderer_host/render_view_host_observer.h" + +#include "content/browser/renderer_host/render_view_host.h" + +RenderViewHostObserver::RenderViewHostObserver(RenderViewHost* render_view_host) + : render_view_host_(render_view_host), + routing_id_(render_view_host->routing_id()) { + render_view_host_->AddObserver(this); +} + +RenderViewHostObserver::~RenderViewHostObserver() { + if (render_view_host_) + render_view_host_->RemoveObserver(this); +} + +void RenderViewHostObserver::RenderViewHostDestroyed() { + delete this; +} + +bool RenderViewHostObserver::OnMessageReceived(const IPC::Message& message) { + return false; +} + +bool RenderViewHostObserver::Send(IPC::Message* message) { + if (!render_view_host_) { + delete message; + return false; + } + + return render_view_host_->Send(message); +} + +void RenderViewHostObserver::RenderViewHostDestruction() { + render_view_host_->RemoveObserver(this); + RenderViewHostDestroyed(); + render_view_host_ = NULL; +} |