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

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

Issue 10907166: Upstream chromium side of modal dialogs for webview. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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/WebViewModalDialogOverrideTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/WebViewModalDialogOverrideTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/WebViewModalDialogOverrideTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..473f8f1c0b68d49637fd070761ecb28d895db5c2
--- /dev/null
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/WebViewModalDialogOverrideTest.java
@@ -0,0 +1,185 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Test suite for displaying and functioning of modal dialogs.
+ */
+
+package org.chromium.android_webview.test;
+
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.Assert;
+
+import org.chromium.android_webview.JsPromptResultReceiver;
+import org.chromium.android_webview.JsResultReceiver;
+import org.chromium.base.test.Feature;
+import org.chromium.content.browser.ContentViewCore;
+import org.chromium.content.browser.util.CallbackHelper;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class WebViewModalDialogOverrideTest extends AndroidWebViewTestBase {
+ private final static String EMPTY_PAGE =
+ "<!doctype html>" +
+ "<title>Modal Dialog Test</title><p>Testcase.</p>";
+ private final static String BEFORE_UNLOAD_URL =
+ "<!doctype html>" +
+ "<head><script>window.onbeforeunload=function() {" +
+ "return 'Are you sure?';" +
+ "};</script></head></body>";
+
+ /*
+ * Verify that when the AwContentsClient calls handleJsAlert.
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testOverrideAlertHandling() throws Throwable {
+ final String ALERT_TEXT = "Hello World!";
+
+ final AtomicBoolean callbackCalled = new AtomicBoolean(false);
+ // Returning true from the callback should not show a dialog.
+ TestAwContentsClient client = new TestAwContentsClient() {
+ @Override
+ public void handleJsAlert(String url, String message, JsResultReceiver res) {
+ callbackCalled.set(true);
+ res.confirm();
+ assertEquals(ALERT_TEXT, message);
+ }
+ };
+ AwTestContainerView view = createAwTestContainerViewOnMainSync(client);
+ final ContentViewCore contentViewCore = view.getContentViewCore();
+
+ enableJavaScriptOnUiThread(contentViewCore);
+ loadDataSync(contentViewCore, client.getOnPageFinishedHelper(),
+ EMPTY_PAGE, "text/html", false);
+ executeJavaScriptAndWaitForResult(contentViewCore, client,
+ "alert('" + ALERT_TEXT + "')");
+ assertTrue(callbackCalled.get());
+ }
+
+ /*
+ * Verify that when the AwContentsClient calls handleJsPrompt.
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testOverridePromptHandling() throws Throwable {
+ final String PROMPT_TEXT = "How do you like your eggs in the morning?";
+ final String PROMPT_DEFAULT = "Scrambled";
+ final String PROMPT_RESULT = "I like mine with a kiss";
+
+ final AtomicBoolean called = new AtomicBoolean(false);
+ // Returning true from the callback should not show a dialog.
+ final TestAwContentsClient client = new TestAwContentsClient() {
+ @Override
+ public void handleJsPrompt(String url, String message, String defaultValue,
+ JsPromptResultReceiver res) {
+ assertEquals(PROMPT_TEXT, message);
+ assertEquals(PROMPT_DEFAULT, defaultValue);
+ res.confirm(PROMPT_RESULT);
+ called.set(true);
+ }
+ };
+ AwTestContainerView view = createAwTestContainerViewOnMainSync(client);
+ ContentViewCore contentViewCore = view.getContentViewCore();
+
+ enableJavaScriptOnUiThread(contentViewCore);
+ loadDataSync(contentViewCore, client.getOnPageFinishedHelper(),
+ EMPTY_PAGE, "text/html", false);
+ String result = executeJavaScriptAndWaitForResult(contentViewCore, client,
+ "prompt('" + PROMPT_TEXT + "','" + PROMPT_DEFAULT + "')");
+ assertTrue(called.get());
+ assertEquals("\"" + PROMPT_RESULT + "\"", result);
+ }
+
+ /*
+ * Verify that when the AwContentsClient calls handleJsConfirm and the client confirms.
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testOverrideConfirmHandlingConfirmed() throws Throwable {
+ final String CONFIRM_TEXT = "Would you like a cookie?";
+
+ final AtomicBoolean called = new AtomicBoolean(false);
+ // Returning true from the callback should not show a dialog.
+ TestAwContentsClient client = new TestAwContentsClient() {
+ @Override
+ public void handleJsConfirm(String url, String message, JsResultReceiver res) {
+ assertEquals(CONFIRM_TEXT, message);
+ res.confirm();
+ called.set(true);
+ }
+ };
+ AwTestContainerView view = createAwTestContainerViewOnMainSync(client);
+ ContentViewCore contentViewCore = view.getContentViewCore();
+ enableJavaScriptOnUiThread(contentViewCore);
+
+ loadDataSync(contentViewCore, client.getOnPageFinishedHelper(),
+ EMPTY_PAGE, "text/html", false);
+ String result = executeJavaScriptAndWaitForResult(contentViewCore, client,
+ "confirm('" + CONFIRM_TEXT + "')");
+ assertTrue(called.get());
+ assertEquals("true", result);
+ }
+
+ /*
+ * Verify that when the AwContentsClient calls handleJsConfirm and the client cancels.
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testOverrideConfirmHandlingCancelled() throws Throwable {
+ final String CONFIRM_TEXT = "Would you like a cookie?";
+
+ final AtomicBoolean called = new AtomicBoolean(false);
+ // Returning true from the callback should not show a dialog.
+ TestAwContentsClient client = new TestAwContentsClient() {
+ @Override
+ public void handleJsConfirm(String url, String message, JsResultReceiver res) {
+ assertEquals(CONFIRM_TEXT, message);
+ res.cancel();
+ called.set(true);
+ }
+ };
+ AwTestContainerView view = createAwTestContainerViewOnMainSync(client);
+ ContentViewCore contentViewCore = view.getContentViewCore();
+ enableJavaScriptOnUiThread(contentViewCore);
+
+ loadDataSync(contentViewCore, client.getOnPageFinishedHelper(),
+ EMPTY_PAGE, "text/html", false);
+ String result = executeJavaScriptAndWaitForResult(contentViewCore, client,
+ "confirm('" + CONFIRM_TEXT + "')");
+ assertTrue(called.get());
+ assertEquals("false", result);
+ }
+
+ /*
+ * Verify that when the AwContentsClient calls handleJsBeforeUnload
+ */
+ @MediumTest
+ @Feature({"Android-WebView"})
+ public void testOverrideBeforeUnloadHandling() throws Throwable {
+ final CallbackHelper jsBeforeUnloadHelper = new CallbackHelper();
+ TestAwContentsClient client = new TestAwContentsClient() {
+ @Override
+ public void handleJsBeforeUnload(String url, String message, JsResultReceiver res) {
+ res.cancel();
+ jsBeforeUnloadHelper.notifyCalled();
+ }
+ };
+ AwTestContainerView view = createAwTestContainerViewOnMainSync(client);
+ ContentViewCore contentViewCore = view.getContentViewCore();
+ enableJavaScriptOnUiThread(contentViewCore);
+
+ loadDataSync(contentViewCore, client.getOnPageFinishedHelper(), BEFORE_UNLOAD_URL,
+ "text/html", false);
+ enableJavaScriptOnUiThread(contentViewCore);
+
+ // Don't wait synchronously because we don't leave the page.
+ int currentCallCount = jsBeforeUnloadHelper.getCallCount();
+ loadDataAsync(contentViewCore, EMPTY_PAGE, "text/html", false);
+ jsBeforeUnloadHelper.waitForCallback(currentCallCount);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698