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

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

Issue 766623002: Verify that Message Channel Message Ports can be transferred correctly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix order Created 6 years 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
« no previous file with comments | « no previous file | content/browser/message_port_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7d5b0aea0d727a6b5becc77b1e2533014a03a777..5d7df38e61f0ce58b829c5ede771da287f448a5a 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
@@ -12,23 +12,15 @@ import static org.chromium.content.browser.test.util.TestCallbackHelperContainer
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.MessageChannel;
+import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.base.test.util.Feature;
+import org.chromium.net.test.util.TestWebServer;
/**
* The tests for content postMessage API.
*/
public class PostMessageTest extends AwTestBase {
- private static final String TEST_PAGE =
- "<!DOCTYPE html><html><body>"
- + " <script type=\"text/javascript\">"
- + " onmessage = function (e) {"
- + " messageObject.setMessageParams(e.data, e.origin, e.ports);"
- + " }"
- + " </script>"
- + "</body></html>";
-
- private static final String MESSAGE = "Foo";
private static final String SOURCE_ORIGIN = "android_webview";
// Inject to the page to verify received messages.
@@ -75,6 +67,7 @@ public class PostMessageTest extends AwTestBase {
private TestAwContentsClient mContentsClient;
private AwTestContainerView mTestContainerView;
private AwContents mAwContents;
+ private TestWebServer mWebServer;
@Override
protected void setUp() throws Exception {
@@ -96,25 +89,48 @@ public class PostMessageTest extends AwTestBase {
} catch (Throwable t) {
throw new RuntimeException(t);
}
+ mWebServer = TestWebServer.start();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mWebServer.shutdown();
+ super.tearDown();
+ }
+
+ private static final String WEBVIEW_MESSAGE = "from_webview";
+
+ private static final String TEST_PAGE =
+ "<!DOCTYPE html><html><body>"
+ + " <script type=\"text/javascript\">"
+ + " onmessage = function (e) {"
+ + " messageObject.setMessageParams(e.data, e.origin, e.ports);"
+ + " }"
+ + " </script>"
+ + "</body></html>";
+
+ private void loadPage(String page) throws Throwable {
+ final String url = mWebServer.setResponse("/test.html", page,
+ CommonResources.getTextHtmlHeaders(true));
OnPageFinishedHelper onPageFinishedHelper = mContentsClient.getOnPageFinishedHelper();
int currentCallCount = onPageFinishedHelper.getCallCount();
- // Load test page
- loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
- TEST_PAGE, "text/html", false);
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
onPageFinishedHelper.waitForCallback(currentCallCount);
}
@SmallTest
@Feature({"AndroidWebView", "Android-PostMessage"})
public void testPostMessageToMainFrame() throws Throwable {
+ loadPage(TEST_PAGE);
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- mAwContents.postMessageToFrame(null, MESSAGE, SOURCE_ORIGIN, "*", null);
+ mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, SOURCE_ORIGIN,
+ mWebServer.getBaseUrl(), null);
}
});
mMessageObject.waitForMessage();
- assertEquals(MESSAGE, mMessageObject.getData());
+ assertEquals(WEBVIEW_MESSAGE, mMessageObject.getData());
assertEquals(SOURCE_ORIGIN, mMessageObject.getOrigin());
}
@@ -125,23 +141,80 @@ public class PostMessageTest extends AwTestBase {
@SmallTest
@Feature({"AndroidWebView", "Android-PostMessage"})
public void testCreateChannel() throws Throwable {
+ loadPage(TEST_PAGE);
runTestOnUiThread(new Runnable() {
@Override
public void run() {
ValueCallback<MessageChannel> callback = new ValueCallback<MessageChannel>() {
@Override
public void onReceiveValue(MessageChannel channel) {
- mAwContents.postMessageToFrame(null, MESSAGE, SOURCE_ORIGIN, "*",
- new int[]{channel.port2()});
+ mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, SOURCE_ORIGIN,
+ mWebServer.getBaseUrl(), new int[]{channel.port2()});
}
};
mAwContents.createMessageChannel(callback);
}
});
mMessageObject.waitForMessage();
- assertEquals(MESSAGE, mMessageObject.getData());
+ assertEquals(WEBVIEW_MESSAGE, mMessageObject.getData());
assertEquals(SOURCE_ORIGIN, mMessageObject.getOrigin());
// verify that one message port is received.
assertEquals(1, mMessageObject.getPorts().length);
}
+
+ private static final String WORKER_MESSAGE = "from_worker";
+
+ // Listen for messages. Pass port 1 to worker and use port 2 to receive messages from
+ // from worker.
+ private static final String TEST_PAGE_FOR_PORT_TRANSFER =
+ "<!DOCTYPE html><html><body>"
+ + " <script type=\"text/javascript\">"
+ + " var worker = new Worker(\"worker.js\");"
+ + " onmessage = function (e) {"
+ + " if (e.data == \"" + WEBVIEW_MESSAGE + "\") {"
+ + " worker.postMessage(\"worker_port\", [e.ports[0]]);"
+ + " var messageChannelPort = e.ports[1];"
+ + " messageChannelPort.onmessage = receiveWorkerMessage;"
+ + " }"
+ + " };"
+ + " function receiveWorkerMessage(e) {"
+ + " if (e.data == \"" + WORKER_MESSAGE + "\") {"
+ + " messageObject.setMessageParams(e.data, e.origin, e.ports);"
+ + " }"
+ + " };"
+ + " </script>"
+ + "</body></html>";
+
+ private static final String WORKER_SCRIPT =
+ "onmessage = function(e) {"
+ + " if (e.data == \"worker_port\") {"
+ + " var toWindow = e.ports[0];"
+ + " toWindow.postMessage(\"" + WORKER_MESSAGE + "\");"
+ + " toWindow.start();"
+ + " }"
+ + "}";
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testTransferPortsToWorker() throws Throwable {
+ mWebServer.setResponse("/worker.js", WORKER_SCRIPT,
+ CommonResources.getTextJavascriptHeaders(true));
+ loadPage(TEST_PAGE_FOR_PORT_TRANSFER);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ValueCallback<MessageChannel> callback = new ValueCallback<MessageChannel>() {
+ @Override
+ public void onReceiveValue(MessageChannel channel) {
+ mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, SOURCE_ORIGIN,
+ mWebServer.getBaseUrl(),
+ new int[]{channel.port1(), channel.port2()});
+ }
+ };
+ mAwContents.createMessageChannel(callback);
+ }
+ });
+ mMessageObject.waitForMessage();
+ assertEquals(WORKER_MESSAGE, mMessageObject.getData());
+ }
}
« no previous file with comments | « no previous file | content/browser/message_port_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698