diff options
author | steveblock@chromium.org <steveblock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-13 16:16:28 +0000 |
---|---|---|
committer | steveblock@chromium.org <steveblock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-13 16:16:28 +0000 |
commit | 5cb4287f6e7925bd7c3ae11e7a3836b76346892e (patch) | |
tree | 028ef6613a85fe00f54b206e38e8bc497c7b9626 | |
parent | a7505e26705d9304173ea42463e0392231bf0a61 (diff) | |
download | chromium_src-5cb4287f6e7925bd7c3ae11e7a3836b76346892e.zip chromium_src-5cb4287f6e7925bd7c3ae11e7a3836b76346892e.tar.gz chromium_src-5cb4287f6e7925bd7c3ae11e7a3836b76346892e.tar.bz2 |
Fix a bug where the JavaBridgeDispatcherHost is prematurely deleted
JavaBridgeDispatcherHost must be ref-counted because it is used with
base::Bind. http://codereview.chromium.org/8834013 changed
JavaBridgeDispatcherHost to also inherit from RenderViewHostObserver. The base
implementation of RenderViewHostObserver::RenderViewHostDestroyed() deletes the
object. This is unwanted in this class, so we provide an empy implementation of
the method.
Review URL: http://codereview.chromium.org/8929005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114218 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/browser/renderer_host/java/java_bridge_dispatcher_host.cc | 6 | ||||
-rw-r--r-- | content/browser/renderer_host/java/java_bridge_dispatcher_host.h | 3 |
2 files changed, 8 insertions, 1 deletions
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc b/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc index 831a6dd..c058dca 100644 --- a/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc +++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc @@ -66,6 +66,12 @@ bool JavaBridgeDispatcherHost::Send(IPC::Message* msg) { return RenderViewHostObserver::Send(msg); } +void JavaBridgeDispatcherHost::RenderViewHostDestroyed() { + // Base implementation deletes the object. This class is ref counted, with + // refs held by the JavaBridgeDispatcherHostManager and base::Bind, so that + // behavior is unwanted. +} + bool JavaBridgeDispatcherHost::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(JavaBridgeDispatcherHost, msg) diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host.h b/content/browser/renderer_host/java/java_bridge_dispatcher_host.h index 07fe643..0b33ccd 100644 --- a/content/browser/renderer_host/java/java_bridge_dispatcher_host.h +++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host.h @@ -39,9 +39,10 @@ class JavaBridgeDispatcherHost void AddNamedObject(const string16& name, NPObject* object); void RemoveNamedObject(const string16& name); - // RenderViewHostObserver override: + // RenderViewHostObserver overrides: // The IPC macros require this to be public. virtual bool Send(IPC::Message* msg) OVERRIDE; + virtual void RenderViewHostDestroyed() OVERRIDE; private: friend class base::RefCountedThreadSafe<JavaBridgeDispatcherHost>; |