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