Chromium Code Reviews| 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..84ad094944e9261efba601db949c59adc8340ca3 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,14 @@ |
| namespace content { |
| JavaBridgeDispatcherHostManager::JavaBridgeDispatcherHostManager( |
| - WebContents* web_contents) |
| + WebContents* web_contents, |
| + jobject retained_object_set) |
| : WebContentsObserver(web_contents), |
| - allow_object_contents_inspection_(true) { |
| + retained_object_set_(base::android::AttachCurrentThread(), |
| + retained_object_set), |
| + allow_object_contents_inspection_(true), |
| + render_frame_host_message_source_(NULL) { |
| + DCHECK(retained_object_set); |
| } |
| JavaBridgeDispatcherHostManager::~JavaBridgeDispatcherHostManager() { |
| @@ -48,27 +54,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); |
| @@ -86,8 +71,9 @@ void JavaBridgeDispatcherHostManager::RemoveNamedObject( |
| } |
| void JavaBridgeDispatcherHostManager::OnGetChannelHandle( |
| - RenderFrameHost* render_frame_host, IPC::Message* reply_msg) { |
| - instances_[render_frame_host]->OnGetChannelHandle(reply_msg); |
| + IPC::Message* reply_msg) { |
| + DCHECK(render_frame_host_message_source_); |
| + instances_[render_frame_host_message_source_]->OnGetChannelHandle(reply_msg); |
| } |
| void JavaBridgeDispatcherHostManager::RenderFrameCreated( |
| @@ -132,6 +118,20 @@ void JavaBridgeDispatcherHostManager::DocumentAvailableInMainFrame() { |
| } |
| } |
| +bool JavaBridgeDispatcherHostManager::OnMessageReceived( |
| + RenderFrameHost* render_frame_host, |
| + const IPC::Message& message) { |
| + render_frame_host_message_source_ = render_frame_host; |
|
ncarter (slow)
2014/04/29 20:50:45
Here's an idea that might mean we don't need to re
mnaganov (inactive)
2014/05/01 13:57:38
Thanks for the suggestion, Nick!
|
| + bool handled = true; |
| + IPC_BEGIN_MESSAGE_MAP(JavaBridgeDispatcherHostManager, message) |
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(JavaBridgeHostMsg_GetChannelHandle, |
| + OnGetChannelHandle) |
| + IPC_MESSAGE_UNHANDLED(handled = false) |
| + IPC_END_MESSAGE_MAP() |
| + render_frame_host_message_source_ = NULL; |
| + return handled; |
| +} |
| + |
| void JavaBridgeDispatcherHostManager::JavaBoundObjectCreated( |
| const base::android::JavaRef<jobject>& object) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |