| 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
|
|
|