| 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..44db7f1b7e60f86f360805a4d9dc794a6c9bc02b 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
|
| @@ -763,4 +763,90 @@ public class PostMessageTest extends AwTestBase {
|
| mMessageObject.waitForMessage();
|
| assertEquals(WORKER_MESSAGE, mMessageObject.getData());
|
| }
|
| +
|
| + private static final String POPUP_MESSAGE = "from_popup";
|
| + private static final String POPUP_URL = "/popup.html";
|
| + private static final String IFRAME_URL = "/iframe.html";
|
| + private static final String MAIN_PAGE_FOR_POPUP_TEST = "<!DOCTYPE html><html>"
|
| + + "<head>"
|
| + + " <script>"
|
| + + " function createPopup() {"
|
| + + " var popupWindow = window.open('" + POPUP_URL + "');"
|
| + + " onmessage = function(e) {"
|
| + + " popupWindow.postMessage(e.data, '*', e.ports);"
|
| + + " };"
|
| + + " }"
|
| + + " </script>"
|
| + + "</head>"
|
| + + "</html>";
|
| +
|
| + // Sends message and ports to the iframe.
|
| + private static final String POPUP_PAGE_WITH_IFRAME = "<!DOCTYPE html><html>"
|
| + + "<script>"
|
| + + " onmessage = function(e) {"
|
| + + " var iframe = document.getElementsByTagName('iframe')[0];"
|
| + + " iframe.contentWindow.postMessage('" + POPUP_MESSAGE + "', '*', e.ports);"
|
| + + " };"
|
| + + "</script>"
|
| + + "<body><iframe src='" + IFRAME_URL + "'></iframe></body>"
|
| + + "</html>";
|
| +
|
| + // Test if WebView can post a message from/to a popup window owning a message port.
|
| + @SmallTest
|
| + @Feature({"AndroidWebView", "Android-PostMessage"})
|
| + public void testPostMessageToPopup() throws Throwable {
|
| + triggerPopup(mAwContents, mContentsClient, mWebServer, MAIN_PAGE_FOR_POPUP_TEST, ECHO_PAGE,
|
| + POPUP_URL, "createPopup()");
|
| + connectPendingPopup(mAwContents);
|
| + final ChannelContainer channelContainer = new ChannelContainer();
|
| +
|
| + runTestOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + MessagePort[] channel = mAwContents.createMessageChannel();
|
| + channelContainer.set(channel);
|
| + channel[0].setWebEventHandler(new MessagePort.WebEventHandler() {
|
| + @Override
|
| + public void onMessage(String message) {
|
| + channelContainer.setMessage(message);
|
| + }
|
| + }, null);
|
| + mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, mWebServer.getBaseUrl(),
|
| + new MessagePort[] {channel[1]});
|
| + channel[0].postMessage(HELLO, null);
|
| + }
|
| + });
|
| + channelContainer.waitForMessage();
|
| + assertEquals(HELLO + JS_MESSAGE, channelContainer.getMessage());
|
| + }
|
| +
|
| + // Test if WebView can post a message from/to an iframe in a popup window.
|
| + @SmallTest
|
| + @Feature({"AndroidWebView", "Android-PostMessage"})
|
| + public void testPostMessageToIframeInsidePopup() throws Throwable {
|
| + mWebServer.setResponse(IFRAME_URL, ECHO_PAGE, null);
|
| + triggerPopup(mAwContents, mContentsClient, mWebServer, MAIN_PAGE_FOR_POPUP_TEST,
|
| + POPUP_PAGE_WITH_IFRAME, POPUP_URL, "createPopup()");
|
| + connectPendingPopup(mAwContents);
|
| + final ChannelContainer channelContainer = new ChannelContainer();
|
| +
|
| + runTestOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + MessagePort[] channel = mAwContents.createMessageChannel();
|
| + channelContainer.set(channel);
|
| + channel[0].setWebEventHandler(new MessagePort.WebEventHandler() {
|
| + @Override
|
| + public void onMessage(String message) {
|
| + channelContainer.setMessage(message);
|
| + }
|
| + }, null);
|
| + mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, mWebServer.getBaseUrl(),
|
| + new MessagePort[] {channel[1]});
|
| + channel[0].postMessage(HELLO, null);
|
| + }
|
| + });
|
| + channelContainer.waitForMessage();
|
| + assertEquals(HELLO + JS_MESSAGE, channelContainer.getMessage());
|
| + }
|
| }
|
|
|