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); |