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

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java

Issue 2422793002: HTML MessagePort as mojo::MessagePipeHandle (Closed)
Patch Set: Rebase Created 3 years, 11 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: android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
index 0adff6714ee8aaf0675d3817ddb8a4e953721b81..c4eb3181b0544b4ff5a3afa9a96e2c9523d13ce0 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
@@ -6,7 +6,6 @@ package org.chromium.android_webview.test;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
-import android.os.Handler;
import android.support.test.filters.SmallTest;
import android.webkit.JavascriptInterface;
@@ -18,7 +17,6 @@ import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.content.browser.AppWebMessagePort;
-import org.chromium.content.browser.AppWebMessagePortService;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
@@ -501,8 +499,6 @@ public class PostMessageTest extends AwTestBase {
@Feature({"AndroidWebView", "Android-PostMessage"})
public void testPendingPortCanBeTransferredInPendingPort() throws Throwable {
loadPage(TITLE_FROM_POSTMESSAGE_TO_CHANNEL);
- final TestMessagePort testPort =
- new TestMessagePort(getAwBrowserContext().getMessagePortService());
runTestOnUiThread(new Runnable() {
@Override
public void run() {
@@ -636,6 +632,7 @@ public class PostMessageTest extends AwTestBase {
}
private static final String HELLO = "HELLO";
+ private static final String SMILEY = "\u263A";
// Message channels are created on UI thread in a pending state. They are
// initialized at a later stage. Verify that a message port that is initialized
@@ -676,6 +673,42 @@ public class PostMessageTest extends AwTestBase {
assertEquals(HELLO + JS_MESSAGE, channelContainer.getMessage());
}
+ // Same test as above, but add in a non-ASCII character. This is meaningful
+ // as Blink uses a different serialization format for non-ASCII strings.
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testMessageChannelUsingInitializedPortWithNonASCII() throws Throwable {
+ final ChannelContainer channelContainer = new ChannelContainer();
+ loadPage(ECHO_PAGE);
+ final AppWebMessagePort[] channel =
+ ThreadUtils.runOnUiThreadBlocking(new Callable<AppWebMessagePort[]>() {
+ @Override
+ public AppWebMessagePort[] call() {
+ return mAwContents.createMessageChannel();
+ }
+ });
+
+ waitUntilPortReady(channel[0]);
+ waitUntilPortReady(channel[1]);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ channel[0].setMessageCallback(new MessagePort.MessageCallback() {
+ @Override
+ public void onMessage(String message, MessagePort[] sentPorts) {
+ channelContainer.setMessage(message);
+ }
+ }, null);
+ mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, mWebServer.getBaseUrl(),
+ new AppWebMessagePort[] {channel[1]});
+ channel[0].postMessage(HELLO + SMILEY, null);
+ }
+ });
+ // wait for the asynchronous response from JS
+ channelContainer.waitForMessage();
+ assertEquals(HELLO + SMILEY + JS_MESSAGE, channelContainer.getMessage());
+ }
+
// Verify that a message port can be used immediately (even if it is in
// pending state) after creation. In particular make sure the message port can be
// transferred to JS and full communication can happen on it.
@@ -802,87 +835,6 @@ public class PostMessageTest extends AwTestBase {
expectTitle("24");
}
- private static class TestMessagePort extends AppWebMessagePort {
- private boolean mReady;
- private AppWebMessagePort mPort;
- private final Object mLock = new Object();
-
- public TestMessagePort(AppWebMessagePortService service) {
- super(service);
- }
-
- public void setMessagePort(AppWebMessagePort port) {
- mPort = port;
- }
-
- public void setReady(boolean ready) {
- synchronized (mLock) {
- mReady = ready;
- }
- }
- @Override
- public boolean isReady() {
- synchronized (mLock) {
- return mReady;
- }
- }
- @Override
- public int portId() {
- return mPort.portId();
- }
- @Override
- public void setPortId(int id) {
- mPort.setPortId(id);
- }
- @Override
- public void close() {
- mPort.close();
- }
- @Override
- public boolean isClosed() {
- return mPort.isClosed();
- }
- @Override
- public void setMessageCallback(MessageCallback messageCallback, Handler handler) {
- mPort.setMessageCallback(messageCallback, handler);
- }
- @Override
- public void onMessage(String message, AppWebMessagePort[] sentPorts) {
- mPort.onMessage(message, sentPorts);
- }
- @Override
- public void postMessage(String message, MessagePort[] sentPorts)
- throws IllegalStateException {
- mPort.postMessage(message, sentPorts);
- }
- }
-
- // Post a message with a pending port to a frame and then post a message that
- // is pending after that. Make sure that when first message becomes ready,
- // the subsequent not-ready message is not sent.
- @SmallTest
- @Feature({"AndroidWebView", "Android-PostMessage"})
- public void testPostMessageToFrameNotSendsPendingMessages() throws Throwable {
- loadPage(TITLE_FROM_POSTMESSAGE_TO_FRAME);
- final TestMessagePort testPort =
- new TestMessagePort(getAwBrowserContext().getMessagePortService());
- runTestOnUiThread(new Runnable() {
- @Override
- public void run() {
- AppWebMessagePort[] channel = mAwContents.createMessageChannel();
- mAwContents.postMessageToFrame(
- null, "1", mWebServer.getBaseUrl(), new AppWebMessagePort[] {channel[1]});
- mAwContents.postMessageToFrame(null, "2", mWebServer.getBaseUrl(), null);
- AppWebMessagePort[] channel2 = mAwContents.createMessageChannel();
- // Test port is in a pending state so it should not be transferred.
- testPort.setMessagePort(channel2[0]);
- mAwContents.postMessageToFrame(
- null, "3", mWebServer.getBaseUrl(), new AppWebMessagePort[] {testPort});
- }
- });
- expectTitle("12");
- }
-
private static final String WORKER_MESSAGE = "from_worker";
// Listen for messages. Pass port 1 to worker and use port 2 to receive messages from

Powered by Google App Engine
This is Rietveld 408576698