summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsteveblock@chromium.org <steveblock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-13 16:16:28 +0000
committersteveblock@chromium.org <steveblock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-13 16:16:28 +0000
commit5cb4287f6e7925bd7c3ae11e7a3836b76346892e (patch)
tree028ef6613a85fe00f54b206e38e8bc497c7b9626
parenta7505e26705d9304173ea42463e0392231bf0a61 (diff)
downloadchromium_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.cc6
-rw-r--r--content/browser/renderer_host/java/java_bridge_dispatcher_host.h3
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>;