Commit 9978fc01 authored by Shimi Zhang's avatar Shimi Zhang Committed by Commit Bot

[JJI] Deflake a JsJavaInteractionTest

JsReplyProxy in testJsReplyProxyReplyToTheCorrectJsObject could be null
sometimes, this is because we didn't use ScopedJavaGlobalRef to
reference the corresponding Java object. If a full GC kicked in, the
Java object will be collected, so native side JavaObjectWeakGlobalRef
will return a null.

Bug: 1015023
Change-Id: I66d0f5a9334f98a65e8fd9c05712b5b492a7f788
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1873389Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Commit-Queue: Shimi Zhang <ctzsm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#709150}
parent 91316796
...@@ -14,22 +14,20 @@ JsReplyProxy::JsReplyProxy( ...@@ -14,22 +14,20 @@ JsReplyProxy::JsReplyProxy(
java_to_js_messaging) java_to_js_messaging)
: java_to_js_messaging_(std::move(java_to_js_messaging)) { : java_to_js_messaging_(std::move(java_to_js_messaging)) {
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
java_ref_ = JavaObjectWeakGlobalRef( java_ref_.Reset(
env, Java_JsReplyProxy_create(env, reinterpret_cast<intptr_t>(this))); Java_JsReplyProxy_create(env, reinterpret_cast<intptr_t>(this)));
} }
JsReplyProxy::~JsReplyProxy() { JsReplyProxy::~JsReplyProxy() {
JNIEnv* env = base::android::AttachCurrentThread(); if (java_ref_.is_null())
base::android::ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
if (obj.is_null())
return; return;
Java_JsReplyProxy_onDestroy(env, obj); JNIEnv* env = base::android::AttachCurrentThread();
Java_JsReplyProxy_onDestroy(env, java_ref_);
} }
base::android::ScopedJavaLocalRef<jobject> JsReplyProxy::GetJavaPeer() { base::android::ScopedJavaLocalRef<jobject> JsReplyProxy::GetJavaPeer() {
JNIEnv* env = base::android::AttachCurrentThread(); return base::android::ScopedJavaLocalRef<jobject>(java_ref_);
return java_ref_.get(env);
} }
void JsReplyProxy::PostMessage( void JsReplyProxy::PostMessage(
......
...@@ -26,7 +26,7 @@ class JsReplyProxy { ...@@ -26,7 +26,7 @@ class JsReplyProxy {
const base::android::JavaParamRef<jstring>& message); const base::android::JavaParamRef<jstring>& message);
private: private:
JavaObjectWeakGlobalRef java_ref_; base::android::ScopedJavaGlobalRef<jobject> java_ref_;
mojo::AssociatedRemote<mojom::JavaToJsMessaging> java_to_js_messaging_; mojo::AssociatedRemote<mojom::JavaToJsMessaging> java_to_js_messaging_;
DISALLOW_COPY_AND_ASSIGN(JsReplyProxy); DISALLOW_COPY_AND_ASSIGN(JsReplyProxy);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment