Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Unified Diff: content/browser/android/java/gin_java_bridge_dispatcher_host.cc

Issue 353163002: [Android] Switch to Gin Java Bridge implementation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed AwSettingsTest#testBlockNetworkLoadsWithAudio Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/android/java/gin_java_bridge_dispatcher_host.cc
diff --git a/content/browser/android/java/gin_java_bridge_dispatcher_host.cc b/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
index a60310d5abcb804f415011450955e94f6b491d3e..65263812a549ccffb39007b448c113629e8375d3 100644
--- a/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
+++ b/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
@@ -18,6 +18,7 @@
#include "content/common/gin_java_bridge_messages.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
#include "ipc/ipc_message_utils.h"
#if !defined(OS_ANDROID)
@@ -59,7 +60,6 @@ GinJavaBridgeDispatcherHost::~GinJavaBridgeDispatcherHost() {
void GinJavaBridgeDispatcherHost::RenderFrameCreated(
RenderFrameHost* render_frame_host) {
- renderers_.insert(render_frame_host);
for (NamedObjectMap::const_iterator iter = named_objects_.begin();
iter != named_objects_.end();
++iter) {
@@ -70,7 +70,6 @@ void GinJavaBridgeDispatcherHost::RenderFrameCreated(
void GinJavaBridgeDispatcherHost::RenderFrameDeleted(
RenderFrameHost* render_frame_host) {
- renderers_.erase(render_frame_host);
RemoveHolder(render_frame_host,
GinJavaBoundObject::ObjectMap::iterator(&objects_),
objects_.size());
@@ -182,11 +181,8 @@ void GinJavaBridgeDispatcherHost::AddNamedObject(
}
named_objects_[name] = object_id;
- for (RendererSet::iterator iter = renderers_.begin();
- iter != renderers_.end(); ++iter) {
- (*iter)->Send(new GinJavaBridgeMsg_AddNamedObject(
- (*iter)->GetRoutingID(), name, object_id));
- }
+ web_contents()->SendToAllFrames(
+ new GinJavaBridgeMsg_AddNamedObject(MSG_ROUTING_NONE, name, object_id));
}
void GinJavaBridgeDispatcherHost::RemoveNamedObject(
@@ -213,11 +209,8 @@ void GinJavaBridgeDispatcherHost::RemoveNamedObject(
}
}
- for (RendererSet::iterator iter = renderers_.begin();
- iter != renderers_.end(); ++iter) {
- (*iter)->Send(new GinJavaBridgeMsg_RemoveNamedObject(
- (*iter)->GetRoutingID(), name));
- }
+ web_contents()->SendToAllFrames(
+ new GinJavaBridgeMsg_RemoveNamedObject(MSG_ROUTING_NONE, name));
}
void GinJavaBridgeDispatcherHost::SetAllowObjectContentsInspection(bool allow) {
@@ -319,11 +312,47 @@ bool GinJavaBridgeDispatcherHost::OnMessageReceived(
return handled;
}
+namespace {
+
+class IsValidRenderFrameHostHelper
+ : public base::RefCounted<IsValidRenderFrameHostHelper> {
+ public:
+ explicit IsValidRenderFrameHostHelper(RenderFrameHost* rfh_to_match)
+ : rfh_to_match_(rfh_to_match), rfh_found_(false) {}
+
+ bool rfh_found() { return rfh_found_; }
+
+ void OnFrame(RenderFrameHost* rfh) {
+ if (rfh_to_match_ == rfh) rfh_found_ = true;
+ }
+
+ private:
+ friend class base::RefCounted<IsValidRenderFrameHostHelper>;
+
+ ~IsValidRenderFrameHostHelper() {}
+
+ RenderFrameHost* rfh_to_match_;
+ bool rfh_found_;
+
+ DISALLOW_COPY_AND_ASSIGN(IsValidRenderFrameHostHelper);
+};
+
+} // namespace
+
+bool GinJavaBridgeDispatcherHost::IsValidRenderFrameHost(
+ RenderFrameHost* render_frame_host) {
+ scoped_refptr<IsValidRenderFrameHostHelper> helper =
+ new IsValidRenderFrameHostHelper(render_frame_host);
+ web_contents()->ForEachFrame(
+ base::Bind(&IsValidRenderFrameHostHelper::OnFrame, helper));
+ return helper->rfh_found();
+}
+
void GinJavaBridgeDispatcherHost::SendReply(
RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (renderers_.find(render_frame_host) != renderers_.end()) {
+ if (IsValidRenderFrameHost(render_frame_host)) {
render_frame_host->Send(reply_msg);
} else {
delete reply_msg;
@@ -455,7 +484,7 @@ void GinJavaBridgeDispatcherHost::ProcessMethodInvocationObjectResult(
IPC::Message* reply_msg,
scoped_refptr<GinJavaMethodInvocationHelper> result) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (renderers_.find(render_frame_host) == renderers_.end()) {
+ if (!IsValidRenderFrameHost(render_frame_host)) {
delete reply_msg;
return;
}

Powered by Google App Engine
This is Rietveld 408576698