Index: android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
index 30a757bef955e8977e92ef6e9c49017fb087d345..c7d9e6fba0e4cebc5eae2bc28396995bc0abccb9 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java |
@@ -875,6 +875,72 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
} |
} |
+ class AwSettingsJavaScriptPopupsTestHelper extends AwSettingsTestHelper<Boolean> { |
+ static private final String POPUP_ENABLED = "Popup enabled"; |
+ static private final String POPUP_BLOCKED = "Popup blocked"; |
+ |
+ AwSettingsJavaScriptPopupsTestHelper( |
+ AwContents awContents, |
+ TestAwContentsClient contentViewClient, |
+ int index) throws Throwable { |
+ super(awContents, contentViewClient, true); |
+ } |
+ |
+ @Override |
+ protected Boolean getAlteredValue() { |
+ return ENABLED; |
+ } |
+ |
+ @Override |
+ protected Boolean getInitialValue() { |
+ return DISABLED; |
+ } |
+ |
+ @Override |
+ protected Boolean getCurrentValue() { |
+ return mContentSettings.getJavaScriptCanOpenWindowsAutomatically(); |
+ } |
+ |
+ @Override |
+ protected void setCurrentValue(Boolean value) { |
+ mContentSettings.setJavaScriptCanOpenWindowsAutomatically(value); |
+ } |
+ |
+ @Override |
+ protected void doEnsureSettingHasValue(Boolean value) throws Throwable { |
+ loadDataSync(getData()); |
+ final boolean expectPopupEnabled = value; |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ try { |
+ String title = getTitleOnUiThread(); |
+ return expectPopupEnabled ? POPUP_ENABLED.equals(title) : |
+ POPUP_BLOCKED.equals(title); |
+ } catch (Throwable t) { |
+ t.printStackTrace(); |
+ fail("Failed to getTitleOnUiThread: " + t.toString()); |
+ return false; |
+ } |
+ } |
+ }, TEST_TIMEOUT, CHECK_INTERVAL)); |
+ assertEquals(value ? POPUP_ENABLED : POPUP_BLOCKED, getTitleOnUiThread()); |
+ } |
+ |
+ private String getData() { |
+ return "<html><head>" + |
+ "<script>" + |
+ " function tryOpenWindow() {" + |
+ " var newWindow = window.open(" + |
+ " 'data:text/html;charset=utf-8," + |
+ " <html><head><title>" + POPUP_ENABLED + "</title></head></html>');" + |
+ " if (!newWindow) document.title = '" + POPUP_BLOCKED + "';" + |
+ " }" + |
+ "</script></head>" + |
+ "<body onload='tryOpenWindow()'></body></html>"; |
+ } |
+ } |
+ |
// The test verifies that JavaScript is disabled upon WebView |
// creation without accessing ContentSettings. If the test passes, |
// it means that WebView-specific web preferences configuration |
@@ -1825,6 +1891,27 @@ public class AwSettingsTest extends AndroidWebViewTestBase { |
new AwSettingsTextZoomTestHelper(views.getContents1(), views.getClient1())); |
} |
+ public void testJavaScriptPopupsNormal() throws Throwable { |
+ ViewPair views = createViews(NORMAL_VIEW, NORMAL_VIEW); |
+ runPerViewSettingsTest( |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents0(), views.getClient0(), 0), |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents1(), views.getClient1(), 1)); |
+ } |
+ |
+ public void testJavaScriptPopupsIncognito() throws Throwable { |
+ ViewPair views = createViews(INCOGNITO_VIEW, INCOGNITO_VIEW); |
+ runPerViewSettingsTest( |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents0(), views.getClient0(), 0), |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents1(), views.getClient1(), 1)); |
+ } |
+ |
+ public void testJavaScriptPopupsBoth() throws Throwable { |
+ ViewPair views = createViews(NORMAL_VIEW, INCOGNITO_VIEW); |
+ runPerViewSettingsTest( |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents0(), views.getClient0(), 0), |
+ new AwSettingsJavaScriptPopupsTestHelper(views.getContents1(), views.getClient1(), 1)); |
+ } |
+ |
class ViewPair { |
private final AwContents contents0; |
private final TestAwContentsClient client0; |