Index: content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc |
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc |
index 8d587bd76bcdf4e7de5eef32da59d4b317c93b7d..635a1d13c2c2b55f760fd695ad4f4fd6363843bf 100644 |
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc |
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc |
@@ -13,6 +13,7 @@ |
#include "content/browser/renderer_host/java/java_bound_object.h" |
#include "content/browser/renderer_host/java/java_bridge_dispatcher_host.h" |
#include "content/common/android/hash_set.h" |
+#include "content/common/java_bridge_messages.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/render_frame_host.h" |
#include "third_party/WebKit/public/web/WebBindings.h" |
@@ -20,9 +21,13 @@ |
namespace content { |
JavaBridgeDispatcherHostManager::JavaBridgeDispatcherHostManager( |
- WebContents* web_contents) |
+ WebContents* web_contents, |
+ jobject retained_object_set) |
: WebContentsObserver(web_contents), |
+ retained_object_set_(base::android::AttachCurrentThread(), |
+ retained_object_set), |
allow_object_contents_inspection_(true) { |
+ DCHECK(retained_object_set); |
} |
JavaBridgeDispatcherHostManager::~JavaBridgeDispatcherHostManager() { |
@@ -48,27 +53,6 @@ void JavaBridgeDispatcherHostManager::AddNamedObject(const base::string16& name, |
} |
} |
-void JavaBridgeDispatcherHostManager::SetRetainedObjectSet( |
- const JavaObjectWeakGlobalRef& retained_object_set) { |
- // It's an error to replace the retained_object_set_ after it's been set, |
- // so we check that it hasn't already been here. |
- // TODO(benm): It'd be better to pass the set in the constructor to avoid |
- // the chance of this happening; but that's tricky as this get's constructed |
- // before ContentViewCore (which owns the set). Best solution may be to move |
- // ownership of the JavaBridgerDispatchHostManager from WebContents to |
- // ContentViewCore? |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- base::android::ScopedJavaLocalRef<jobject> new_retained_object_set = |
- retained_object_set.get(env); |
- base::android::ScopedJavaLocalRef<jobject> current_retained_object_set = |
- retained_object_set_.get(env); |
- if (!env->IsSameObject(new_retained_object_set.obj(), |
- current_retained_object_set.obj())) { |
- DCHECK(current_retained_object_set.is_null()); |
- retained_object_set_ = retained_object_set; |
- } |
-} |
- |
void JavaBridgeDispatcherHostManager::RemoveNamedObject( |
const base::string16& name) { |
ObjectMap::iterator iter = objects_.find(name); |
@@ -85,11 +69,6 @@ void JavaBridgeDispatcherHostManager::RemoveNamedObject( |
} |
} |
-void JavaBridgeDispatcherHostManager::OnGetChannelHandle( |
- RenderFrameHost* render_frame_host, IPC::Message* reply_msg) { |
- instances_[render_frame_host]->OnGetChannelHandle(reply_msg); |
-} |
- |
void JavaBridgeDispatcherHostManager::RenderFrameCreated( |
RenderFrameHost* render_frame_host) { |
// Creates a JavaBridgeDispatcherHost for the specified RenderViewHost and |
@@ -132,6 +111,25 @@ void JavaBridgeDispatcherHostManager::DocumentAvailableInMainFrame() { |
} |
} |
+bool JavaBridgeDispatcherHostManager::OnMessageReceived( |
+ const IPC::Message& message, |
+ RenderFrameHost* render_frame_host) { |
+ DCHECK(render_frame_host); |
+ if (!instances_.count(render_frame_host)) |
+ return false; |
+ scoped_refptr<JavaBridgeDispatcherHost> instance = |
+ instances_[render_frame_host]; |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(JavaBridgeDispatcherHostManager, message) |
+ IPC_MESSAGE_FORWARD_DELAY_REPLY( |
+ JavaBridgeHostMsg_GetChannelHandle, |
+ instance.get(), |
+ JavaBridgeDispatcherHost::OnGetChannelHandle) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
void JavaBridgeDispatcherHostManager::JavaBoundObjectCreated( |
const base::android::JavaRef<jobject>& object) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |