diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java index 619979c9ae93a8..ef65bfe2899d66 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java @@ -21,9 +21,7 @@ import org.chromium.content.browser.test.util.CallbackHelper; 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; import org.chromium.content_public.browser.LoadUrlParams; -import org.chromium.net.test.util.TestWebServer; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -511,59 +509,4 @@ public Boolean call() throws Exception { }); } - /** - * Loads the main html then triggers the popup window. - */ - public void triggerPopup(final AwContents parentAwContents, - TestAwContentsClient parentAwContentsClient, TestWebServer testWebServer, - String mainHtml, String popupHtml, String popupPath, String triggerScript) - throws Exception { - enableJavaScriptOnUiThread(parentAwContents); - getInstrumentation().runOnMainSync(new Runnable() { - @Override - public void run() { - parentAwContents.getSettings().setSupportMultipleWindows(true); - parentAwContents.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); - } - }); - - final String parentUrl = testWebServer.setResponse("/popupParent.html", mainHtml, null); - testWebServer.setResponse(popupPath, popupHtml, null); - - parentAwContentsClient.getOnCreateWindowHelper().setReturnValue(true); - loadUrlSync(parentAwContents, parentAwContentsClient.getOnPageFinishedHelper(), parentUrl); - - TestAwContentsClient.OnCreateWindowHelper onCreateWindowHelper = - parentAwContentsClient.getOnCreateWindowHelper(); - int currentCallCount = onCreateWindowHelper.getCallCount(); - parentAwContents.evaluateJavaScript(triggerScript, null); - onCreateWindowHelper.waitForCallback( - currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS); - } - - /** - * Supplies the popup window with AwContents then waits for the popup window to finish loading. - */ - public AwContents connectPendingPopup(final AwContents parentAwContents) throws Exception { - TestAwContentsClient popupContentsClient; - AwTestContainerView popupContainerView; - final AwContents popupContents; - popupContentsClient = new TestAwContentsClient(); - popupContainerView = createAwTestContainerViewOnMainSync(popupContentsClient); - popupContents = popupContainerView.getAwContents(); - enableJavaScriptOnUiThread(popupContents); - - getInstrumentation().runOnMainSync(new Runnable() { - @Override - public void run() { - parentAwContents.supplyContentsForPopup(popupContents); - } - }); - - OnPageFinishedHelper onPageFinishedHelper = popupContentsClient.getOnPageFinishedHelper(); - int callCount = onPageFinishedHelper.getCallCount(); - onPageFinishedHelper.waitForCallback(callCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS); - - return popupContents; - } } diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java index 3044ddc5917a36..a81e9070fd5577 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java @@ -8,11 +8,15 @@ import android.test.suitebuilder.annotation.SmallTest; import org.chromium.android_webview.AwContents; +import org.chromium.android_webview.test.util.AwTestTouchUtils; import org.chromium.android_webview.test.util.CommonResources; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.net.test.util.TestWebServer; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + /** * Tests for pop up window flow. */ @@ -21,6 +25,9 @@ public class PopupWindowTest extends AwTestBase { private TestAwContentsClient mParentContentsClient; private AwTestContainerView mParentContainerView; private AwContents mParentContents; + private TestAwContentsClient mPopupContentsClient; + private AwTestContainerView mPopupContainerView; + private AwContents mPopupContents; private TestWebServer mWebServer; private static final String POPUP_TITLE = "Popup Window"; @@ -42,22 +49,67 @@ public void tearDown() throws Exception { super.tearDown(); } - @SmallTest - @Feature({"AndroidWebView"}) - public void testPopupWindow() throws Throwable { + private void triggerPopup() throws Throwable { + enableJavaScriptOnUiThread(mParentContents); + getInstrumentation().runOnMainSync(new Runnable() { + @Override + public void run() { + mParentContents.getSettings().setSupportMultipleWindows(true); + mParentContents.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); + } + }); + final String popupPath = "/popup.html"; - final String parentPageHtml = CommonResources.makeHtmlPageFrom("", ""); - + + "}" + + "Click me!"); final String popupPageHtml = CommonResources.makeHtmlPageFrom( "" + POPUP_TITLE + "", "This is a popup window"); - triggerPopup(mParentContents, mParentContentsClient, mWebServer, parentPageHtml, - popupPageHtml, "/popup.html", "tryOpenWindow()"); - AwContents popupContents = connectPendingPopup(mParentContents); - assertEquals(POPUP_TITLE, getTitleOnUiThread(popupContents)); + final String parentUrl = mWebServer.setResponse("/popupParent.html", parentPageHtml, null); + mWebServer.setResponse(popupPath, popupPageHtml, null); + + mParentContentsClient.getOnCreateWindowHelper().setReturnValue(true); + loadUrlSync(mParentContents, + mParentContentsClient.getOnPageFinishedHelper(), + parentUrl); + + TestAwContentsClient.OnCreateWindowHelper onCreateWindowHelper = + mParentContentsClient.getOnCreateWindowHelper(); + int currentCallCount = onCreateWindowHelper.getCallCount(); + AwTestTouchUtils.simulateTouchCenterOfView(mParentContainerView); + onCreateWindowHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS, + TimeUnit.MILLISECONDS); + } + + private void connectPendingPopup() throws Exception { + mPopupContentsClient = new TestAwContentsClient(); + mPopupContainerView = createAwTestContainerViewOnMainSync(mPopupContentsClient); + mPopupContents = mPopupContainerView.getAwContents(); + + getInstrumentation().runOnMainSync(new Runnable() { + @Override + public void run() { + mParentContents.supplyContentsForPopup(mPopupContents); + } + }); + } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testPopupWindow() throws Throwable { + triggerPopup(); + connectPendingPopup(); + poll(new Callable() { + @Override + public Boolean call() throws Exception { + return POPUP_TITLE.equals(getTitleOnUiThread(mPopupContents)); + } + }); } } 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 7dec8dd5849af2..6d86ef3dc20f50 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,90 +763,4 @@ public void run() { 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 = "" - + "" - + " " - + "" - + ""; - - // Sends message and ports to the iframe. - private static final String POPUP_PAGE_WITH_IFRAME = "" - + "" - + "" - + ""; - - // 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); - } - }); - 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); - } - }); - mAwContents.postMessageToFrame(null, WEBVIEW_MESSAGE, mWebServer.getBaseUrl(), - new MessagePort[] {channel[1]}); - channel[0].postMessage(HELLO, null); - } - }); - channelContainer.waitForMessage(); - assertEquals(HELLO + JS_MESSAGE, channelContainer.getMessage()); - } }