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

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

Issue 498633003: Cache pending JS bridge sync IPC replies, and send in case of RenderFrame deletion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: spelling Created 6 years, 4 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.h
diff --git a/content/browser/android/java/gin_java_bridge_dispatcher_host.h b/content/browser/android/java/gin_java_bridge_dispatcher_host.h
index 615c2b03770af4197ec1a0799a0cfe3bc4191b65..48fcbb588bbfa14a115eab8befc32d842ab6accf 100644
--- a/content/browser/android/java/gin_java_bridge_dispatcher_host.h
+++ b/content/browser/android/java/gin_java_bridge_dispatcher_host.h
@@ -76,20 +76,15 @@ class GinJavaBridgeDispatcherHost
GinJavaBoundObject::ObjectID object_id);
bool IsValidRenderFrameHost(RenderFrameHost* render_frame_host);
- void SendReply(RenderFrameHost* render_frame_host, IPC::Message* reply_msg);
void SendMethods(RenderFrameHost* render_frame_host,
- IPC::Message* reply_msg,
const std::set<std::string>& method_names);
void SendHasMethodReply(RenderFrameHost* render_frame_host,
- IPC::Message* reply_msg,
bool result);
void ProcessMethodInvocationResult(
RenderFrameHost* render_frame_host,
- IPC::Message* reply_msg,
scoped_refptr<GinJavaMethodInvocationHelper> result);
void ProcessMethodInvocationObjectResult(
RenderFrameHost* render_frame_host,
- IPC::Message* reply_msg,
scoped_refptr<GinJavaMethodInvocationHelper> result);
GinJavaBoundObject::ObjectID AddObject(
const base::android::JavaRef<jobject>& object,
@@ -101,6 +96,8 @@ class GinJavaBridgeDispatcherHost
void RemoveHolder(RenderFrameHost* holder,
const GinJavaBoundObject::ObjectMap::iterator& from,
size_t count);
+ bool HasPendingReply(RenderFrameHost* render_frame_host) const;
+ IPC::Message* TakePendingReply(RenderFrameHost* render_frame_host);
// Every time a GinJavaBoundObject backed by a real Java object is
// created/destroyed, we insert/remove a strong ref to that Java object into
@@ -114,6 +111,13 @@ class GinJavaBridgeDispatcherHost
typedef std::map<std::string, GinJavaBoundObject::ObjectID> NamedObjectMap;
NamedObjectMap named_objects_;
+ // Keep track of pending calls out to Java such that we can send a synchronous
+ // reply to the renderer waiting on the response should the RenderFrame be
+ // destroyed while the reply is pending.
+ // Only used on the UI thread.
+ typedef std::map<RenderFrameHost*, IPC::Message*> PendingReplyMap;
+ PendingReplyMap pending_replies_;
+
DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeDispatcherHost);
};

Powered by Google App Engine
This is Rietveld 408576698