Commit 57091c19 authored by Shimi Zhang's avatar Shimi Zhang Committed by Commit Bot

[JJI] Don't use evaluateJavascript() to validate test

Event listeners for the injected JS object are different
from evaluateJavascript() in a way that evaluateJavascript()
will execute the JavaScript immediately when it reaches to
the renderer, however JJI's event listener posted to the event
loop asynchronously. So we can't expect that a listener is
executed before evaluateJavascript().

This CL changed the validation to relying on the async call
of the listeners instead of using evaluateJavascript().

Bug: 1015023
Test: Run both tests locally 1000 times, didn't see any failure.

Change-Id: I1434b43f5dbc7f2700580c9c053453f5d20398c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1894248
Commit-Queue: Shimi Zhang <ctzsm@chromium.org>
Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712345}
parent 9dd5ecdc
...@@ -662,20 +662,12 @@ public class JsJavaInteractionTest { ...@@ -662,20 +662,12 @@ public class JsJavaInteractionTest {
// Listener for myObject. // Listener for myObject.
final String listener1 = "function (event) {" final String listener1 = "function (event) {"
+ " if (window.listenerResult1) {" + " " + JS_OBJECT_NAME + ".postMessage('ack1' + event.data);"
+ " window.listenerResult1 += event.data;"
+ " } else {"
+ " window.listenerResult1 = event.data;"
+ " }"
+ "}"; + "}";
// Listener for myObject2. // Listener for myObject2.
final String listener2 = "function (event) {" final String listener2 = "function (event) {"
+ " if (window.listenerResult2) {" + " " + JS_OBJECT_NAME_2 + ".postMessage('ack2' + event.data);"
+ " window.listenerResult2 += event.data;"
+ " } else {"
+ " window.listenerResult2 = event.data;"
+ " }"
+ "}"; + "}";
// Add two different js objects. // Add two different js objects.
...@@ -693,19 +685,16 @@ public class JsJavaInteractionTest { ...@@ -693,19 +685,16 @@ public class JsJavaInteractionTest {
Assert.assertEquals(message, data2.mMessage); Assert.assertEquals(message, data2.mMessage);
final String hello1 = "hello1";
final String hello2 = "hello2";
// Targeting myObject. // Targeting myObject.
data.mReplyProxy.postMessage(hello1); data.mReplyProxy.postMessage(HELLO);
// Targeting myObject2. // Targeting myObject2.
data2.mReplyProxy.postMessage(hello2); data2.mReplyProxy.postMessage(HELLO);
TestWebMessageListener.Data replyData1 = mListener.waitForOnPostMessage();
TestWebMessageListener.Data replyData2 = webMessageListener2.waitForOnPostMessage();
Assert.assertEquals(hello1, Assert.assertEquals("ack1" + HELLO, replyData1.mMessage);
getJsObjectValue( Assert.assertEquals("ack2" + HELLO, replyData2.mMessage);
"window.listenerResult1", mActivityTestRule, mAwContents, mContentsClient));
Assert.assertEquals(hello2,
getJsObjectValue(
"window.listenerResult2", mActivityTestRule, mAwContents, mContentsClient));
Assert.assertTrue(mListener.hasNoMoreOnPostMessage()); Assert.assertTrue(mListener.hasNoMoreOnPostMessage());
Assert.assertTrue(webMessageListener2.hasNoMoreOnPostMessage()); Assert.assertTrue(webMessageListener2.hasNoMoreOnPostMessage());
...@@ -751,19 +740,21 @@ public class JsJavaInteractionTest { ...@@ -751,19 +740,21 @@ public class JsJavaInteractionTest {
JsReplyProxy proxy = mListener.waitForOnPostMessage().mReplyProxy; JsReplyProxy proxy = mListener.waitForOnPostMessage().mReplyProxy;
final String listener1 = "function (event) {" final String listener1 = "function (event) {"
+ " if (window.listenerResult1) {" + " if (window.receivedCount1) {"
+ " window.listenerResult1 += event.data;" + " window.receivedCount1++;"
+ " } else {" + " } else {"
+ " window.listenerResult1 = event.data;" + " window.receivedCount1 = 1;"
+ " }" + " }"
+ " " + JS_OBJECT_NAME + ".postMessage('ack1:' + window.receivedCount1);"
+ "}"; + "}";
final String listener2 = "function (event) {" final String listener2 = "function (event) {"
+ " if (window.listenerResult2) {" + " if (window.receivedCount2) {"
+ " window.listenerResult2 += event.data;" + " window.receivedCount2++;"
+ " } else {" + " } else {"
+ " window.listenerResult2 = event.data;" + " window.receivedCount2 = 1;"
+ " }" + " }"
+ " " + JS_OBJECT_NAME + ".postMessage('ack2:' + window.receivedCount2);"
+ "}"; + "}";
addEventListener(listener1, "listener1", JS_OBJECT_NAME, mActivityTestRule, mAwContents, addEventListener(listener1, "listener1", JS_OBJECT_NAME, mActivityTestRule, mAwContents,
...@@ -772,30 +763,26 @@ public class JsJavaInteractionTest { ...@@ -772,30 +763,26 @@ public class JsJavaInteractionTest {
mContentsClient); mContentsClient);
// Post message to test both listeners receive message. // Post message to test both listeners receive message.
final String message = "testListener"; proxy.postMessage(HELLO);
proxy.postMessage(message);
TestWebMessageListener.Data replyData1 = mListener.waitForOnPostMessage();
TestWebMessageListener.Data replyData2 = mListener.waitForOnPostMessage();
Assert.assertEquals(message, Assert.assertEquals("ack1:1", replyData1.mMessage);
getJsObjectValue( Assert.assertEquals("ack2:1", replyData2.mMessage);
"window.listenerResult1", mActivityTestRule, mAwContents, mContentsClient));
Assert.assertEquals(message,
getJsObjectValue(
"window.listenerResult2", mActivityTestRule, mAwContents, mContentsClient));
removeEventListener( removeEventListener(
"listener2", JS_OBJECT_NAME, mActivityTestRule, mAwContents, mContentsClient); "listener2", JS_OBJECT_NAME, mActivityTestRule, mAwContents, mContentsClient);
// Post message again to test if remove works. // Post message again to test if remove works.
proxy.postMessage(message); proxy.postMessage(HELLO);
// listener 1 should add message again. // listener 1 should add message again.
Assert.assertEquals(message + message, TestWebMessageListener.Data replyData3 = mListener.waitForOnPostMessage();
getJsObjectValue( Assert.assertEquals("ack1:2", replyData3.mMessage);
"window.listenerResult1", mActivityTestRule, mAwContents, mContentsClient));
// listener 2 result should remain the same. // Should be no more messages.
Assert.assertEquals(message, Assert.assertTrue(mListener.hasNoMoreOnPostMessage());
getJsObjectValue(
"window.listenerResult2", mActivityTestRule, mAwContents, mContentsClient));
} }
@Test @Test
...@@ -925,13 +912,6 @@ public class JsJavaInteractionTest { ...@@ -925,13 +912,6 @@ public class JsJavaInteractionTest {
rule.executeJavaScriptAndWaitForResult(awContents, contentsClient, code); rule.executeJavaScriptAndWaitForResult(awContents, contentsClient, code);
} }
private static String getJsObjectValue(final String jsObjectName, final AwActivityTestRule rule,
final AwContents awContents, final TestAwContentsClient contentsClient)
throws Throwable {
return rule.maybeStripDoubleQuotes(
rule.executeJavaScriptAndWaitForResult(awContents, contentsClient, jsObjectName));
}
private static String parseOrigin(String url) { private static String parseOrigin(String url) {
final Uri uri = Uri.parse(url); final Uri uri = Uri.parse(url);
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
......
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