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

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

Issue 986553004: Hold messages in message port service when a message port is (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address hush nit Created 5 years, 9 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 6d86ef3dc20f50ad84538c6885d23c207c8a9cfa..c302639d4379b3d3e0617f26334454207df6a340 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
@@ -219,6 +219,116 @@ public class PostMessageTest extends AwTestBase {
boolean ignore = latch.await(TIMEOUT, java.util.concurrent.TimeUnit.MILLISECONDS);
}
+ // There are two cases that put a port in a started state.
+ // 1. posting a message
+ // 2. setting an event handler.
+ // A started port cannot return to "non-started" state. The four tests below verifies
+ // these conditions for both conditions, using message ports and message channels.
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testStartedPortCannotBeTransferredUsingPostMessageToFrame1() throws Throwable {
+ loadPage(TEST_PAGE);
+ final CountDownLatch latch = new CountDownLatch(1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MessagePort[] channel = mAwContents.createMessageChannel();
+ channel[1].postMessage("1", null);
+ try {
+ mAwContents.postMessageToFrame(null, "2", mWebServer.getBaseUrl(),
+ new MessagePort[]{channel[1]});
+ } catch (IllegalStateException ex) {
+ latch.countDown();
+ return;
+ }
+ fail();
+ }
+ });
+ boolean ignore = latch.await(TIMEOUT, java.util.concurrent.TimeUnit.MILLISECONDS);
+ }
+
+ // see documentation in testStartedPortCannotBeTransferredUsingPostMessageToFrame1
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testStartedPortCannotBeTransferredUsingPostMessageToFrame2() throws Throwable {
+ loadPage(TEST_PAGE);
+ final CountDownLatch latch = new CountDownLatch(1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MessagePort[] channel = mAwContents.createMessageChannel();
+ // set a web event handler, this puts the port in a started state.
+ channel[1].setWebEventHandler(new MessagePort.WebEventHandler() {
+ @Override
+ public void onMessage(String message) {
+ }
+ }, null);
+ try {
+ mAwContents.postMessageToFrame(null, "2", mWebServer.getBaseUrl(),
+ new MessagePort[]{channel[1]});
+ } catch (IllegalStateException ex) {
+ latch.countDown();
+ return;
+ }
+ fail();
+ }
+ });
+ boolean ignore = latch.await(TIMEOUT, java.util.concurrent.TimeUnit.MILLISECONDS);
+ }
+
+ // see documentation in testStartedPortCannotBeTransferredUsingPostMessageToFrame1
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testStartedPortCannotBeTransferredUsingMessageChannel1() throws Throwable {
+ loadPage(TEST_PAGE);
+ final CountDownLatch latch = new CountDownLatch(1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MessagePort[] channel1 = mAwContents.createMessageChannel();
+ channel1[1].postMessage("1", null);
+ MessagePort[] channel2 = mAwContents.createMessageChannel();
+ try {
+ channel2[0].postMessage("2", new MessagePort[]{channel1[1]});
+ } catch (IllegalStateException ex) {
+ latch.countDown();
+ return;
+ }
+ fail();
+ }
+ });
+ boolean ignore = latch.await(TIMEOUT, java.util.concurrent.TimeUnit.MILLISECONDS);
+ }
+
+ // see documentation in testStartedPortCannotBeTransferredUsingPostMessageToFrame1
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-PostMessage"})
+ public void testStartedPortCannotBeTransferredUsingMessageChannel2() throws Throwable {
+ loadPage(TEST_PAGE);
+ final CountDownLatch latch = new CountDownLatch(1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MessagePort[] channel1 = mAwContents.createMessageChannel();
+ // set a web event handler, this puts the port in a started state.
+ channel1[1].setWebEventHandler(new MessagePort.WebEventHandler() {
+ @Override
+ public void onMessage(String message) { }
+ }, null);
+ MessagePort[] channel2 = mAwContents.createMessageChannel();
+ try {
+ channel2[0].postMessage("1", new MessagePort[]{channel1[1]});
+ } catch (IllegalStateException ex) {
+ latch.countDown();
+ return;
+ }
+ fail();
+ }
+ });
+ boolean ignore = latch.await(TIMEOUT, java.util.concurrent.TimeUnit.MILLISECONDS);
+ }
+
+
// channel[0] and channel[1] are entangled ports, establishing a channel. Verify
// it is not allowed to transfer channel[0] on channel[0].postMessage.
// TODO(sgurun) Note that the related case of posting channel[1] via
@@ -228,7 +338,7 @@ public class PostMessageTest extends AwTestBase {
// this case.
@SmallTest
@Feature({"AndroidWebView", "Android-PostMessage"})
- public void testTransferSourcePortViaMessageChannelNotAllowed() throws Throwable {
+ public void testTransferringSourcePortViaMessageChannelNotAllowed() throws Throwable {
loadPage(TEST_PAGE);
final CountDownLatch latch = new CountDownLatch(1);
runTestOnUiThread(new Runnable() {

Powered by Google App Engine
This is Rietveld 408576698