Chromium Code Reviews| 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 869b8baa7dcf01c75b213a10c09926bd0a283f48..38d2d31095a69fe3439f1faf758b7f989986db64 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 |
| @@ -146,7 +146,7 @@ public class PostMessageTest extends AwTestBase { |
| + " onmessage = function (e) {" |
| + " var myport = e.ports[0];" |
| + " myport.onmessage = function (f) {" |
| - + " received = received + f.data;" |
| + + " received += f.data;" |
| + " document.title = received;" |
| + " }" |
| + " }" |
| @@ -261,8 +261,7 @@ public class PostMessageTest extends AwTestBase { |
| // 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) { |
| - } |
| + public void onMessage(String message, MessagePort[] sentPorts) { } |
| }, null); |
| try { |
| mAwContents.postMessageToFrame(null, "2", mWebServer.getBaseUrl(), |
| @@ -314,7 +313,7 @@ public class PostMessageTest extends AwTestBase { |
| // 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) { } |
| + public void onMessage(String message, MessagePort[] sentPorts) { } |
| }, null); |
| MessagePort[] channel2 = mAwContents.createMessageChannel(); |
| try { |
| @@ -572,7 +571,7 @@ public class PostMessageTest extends AwTestBase { |
| channelContainer.set(channel); |
| channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |
| @@ -653,7 +652,7 @@ public class PostMessageTest extends AwTestBase { |
| public void run() { |
| channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |
| @@ -683,7 +682,7 @@ public class PostMessageTest extends AwTestBase { |
| MessagePort[] channel = mAwContents.createMessageChannel(); |
| channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |
| @@ -710,7 +709,7 @@ public class PostMessageTest extends AwTestBase { |
| MessagePort[] channel = mAwContents.createMessageChannel(); |
| channel[1].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |
| @@ -741,6 +740,58 @@ public class PostMessageTest extends AwTestBase { |
| expectTitle("123"); |
| } |
| + private static final String RECEIVE_JS_MESSAGE_CHANNEL_PAGE = |
| + "<!DOCTYPE html><html><body>" |
| + + " <script>" |
| + + " var received ='';" |
| + + " var mc = new MessageChannel();" |
| + + " mc.port1.onmessage = function (e) {" |
| + + " received += e.data;" |
| + + " document.title = received;" |
| + + " if (e.data == '2') { mc.port1.postMessage('3'); }" |
| + + " };" |
| + + " onmessage = function (e) {" |
| + + " var myPort = e.ports[0];" |
| + + " myPort.postMessage('from window', [mc.port2]);" |
|
hush (inactive)
2015/03/10 22:31:36
The other scenario (that does not work) is JS tryi
sgurun-gerrit only
2015/03/10 23:20:12
let's write a test in a separate CL.
|
| + + " }" |
| + + " </script>" |
| + + "</body></html>"; |
| + |
| + // Test webview can use a message port received from JS for full duplex communication. |
| + // Test steps: |
| + // 1. Java creates a message channel, and send one port to JS |
| + // 2. JS creates a new message channel and sends one port to Java using the channel in 1 |
| + // 3. Java sends a message using the new channel in 2. |
| + // 4. Js responds to this message using the channel in 2. |
| + // 5. Java responds to message in 4 using the channel in 2. |
| + @SmallTest |
| + @Feature({"AndroidWebView", "Android-PostMessage"}) |
| + public void testCanUseReceivedMessagePortFromJS() throws Throwable { |
| + loadPage(RECEIVE_JS_MESSAGE_CHANNEL_PAGE); |
| + runTestOnUiThread(new Runnable() { |
| + @Override |
| + public void run() { |
| + MessagePort[] channel = mAwContents.createMessageChannel(); |
| + mAwContents.postMessageToFrame(null, "1", mWebServer.getBaseUrl(), |
| + new MessagePort[]{channel[1]}); |
| + channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| + @Override |
| + public void onMessage(String message, final MessagePort[] p) { |
| + p[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| + @Override |
| + public void onMessage(String message, MessagePort[] q) { |
| + assertEquals("3", message); |
| + p[0].postMessage("4", null); |
| + } |
| + }, null); |
| + p[0].postMessage("2", null); |
| + } |
| + }, null); |
| + } |
| + }); |
| + expectTitle("24"); |
| + } |
| + |
| private static class TestMessagePort extends MessagePort { |
| private boolean mReady; |
| @@ -787,13 +838,13 @@ public class PostMessageTest extends AwTestBase { |
| mPort.setWebEventHandler(webEventHandler, handler); |
| } |
| @Override |
| - public void onMessage(String message) { |
| - mPort.onMessage(message); |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| + mPort.onMessage(message, sentPorts); |
| } |
| @Override |
| - public void postMessage(String message, MessagePort[] msgPorts) throws |
| + public void postMessage(String message, MessagePort[] sentPorts) throws |
| IllegalStateException { |
| - mPort.postMessage(message, msgPorts); |
| + mPort.postMessage(message, sentPorts); |
| } |
| } |
| @@ -918,7 +969,7 @@ public class PostMessageTest extends AwTestBase { |
| channelContainer.set(channel); |
| channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |
| @@ -948,7 +999,7 @@ public class PostMessageTest extends AwTestBase { |
| channelContainer.set(channel); |
| channel[0].setWebEventHandler(new MessagePort.WebEventHandler() { |
| @Override |
| - public void onMessage(String message) { |
| + public void onMessage(String message, MessagePort[] sentPorts) { |
| channelContainer.setMessage(message); |
| } |
| }, null); |