diff options
author | hush <hush@chromium.org> | 2015-06-17 12:52:00 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-17 19:52:25 +0000 |
commit | d6b6b6df86d87905a51b5a97522a8c49887b1bcd (patch) | |
tree | 067817b059dd71e7719c561b798167ca483bed54 | |
parent | 18bcaf062c839d3f707228c94c393e1bc38d4691 (diff) | |
download | chromium_src-d6b6b6df86d87905a51b5a97522a8c49887b1bcd.zip chromium_src-d6b6b6df86d87905a51b5a97522a8c49887b1bcd.tar.gz chromium_src-d6b6b6df86d87905a51b5a97522a8c49887b1bcd.tar.bz2 |
Test text handles appear in Android WebView popups
Also fix some possible flakiness for similar tests in content shell.
BUG=437069
Review URL: https://codereview.chromium.org/759363003
Cr-Commit-Position: refs/heads/master@{#334894}
4 files changed, 102 insertions, 33 deletions
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 16d6b55..3c07e5f 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 @@ -11,9 +11,15 @@ import org.chromium.android_webview.AwContents; 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.content.browser.ContentViewCore; +import org.chromium.content.browser.test.util.Criteria; +import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.content.browser.test.util.DOMUtils; import org.chromium.content.browser.test.util.TestCallbackHelperContainer; import org.chromium.net.test.util.TestWebServer; +import java.util.concurrent.Callable; + /** * Tests for pop up window flow. */ @@ -84,4 +90,67 @@ public class PopupWindowTest extends AwTestBase { onPageFinishedHelper.waitForCallback(onPageFinishedCallCount); assertEquals("about:blank", onPageFinishedHelper.getUrl()); } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testPopupWindowTextHandle() throws Throwable { + final String popupPath = "/popup.html"; + final String parentPageHtml = CommonResources.makeHtmlPageFrom("", "<script>" + + "function tryOpenWindow() {" + + " var newWindow = window.open('" + popupPath + "');" + + "}</script>"); + + final String popupPageHtml = CommonResources.makeHtmlPageFrom( + "<title>" + POPUP_TITLE + "</title>", + "<span id=\"plain_text\" class=\"full_view\">This is a popup window.</span>"); + + triggerPopup(mParentContents, mParentContentsClient, mWebServer, parentPageHtml, + popupPageHtml, popupPath, "tryOpenWindow()"); + PopupInfo popupInfo = connectPendingPopup(mParentContents); + final AwContents popupContents = popupInfo.popupContents; + TestAwContentsClient popupContentsClient = popupInfo.popupContentsClient; + assertEquals(POPUP_TITLE, getTitleOnUiThread(popupContents)); + + enableJavaScriptOnUiThread(popupContents); + + // Now long press on some texts and see if the text handles show up. + DOMUtils.longPressNode(this, popupContents.getContentViewCore(), "plain_text"); + assertWaitForSelectActionBarStatus(true, popupContents.getContentViewCore()); + assertTrue(runTestOnUiThreadAndGetResult(new Callable<Boolean>() { + @Override + public Boolean call() throws Exception { + return popupContents.getContentViewCore().hasSelection(); + } + })); + + // Now hide the select action bar. This should hide the text handles and + // clear the selection. + hideSelectActionMode(popupContents.getContentViewCore()); + + assertWaitForSelectActionBarStatus(false, popupContents.getContentViewCore()); + String jsGetSelection = "window.getSelection().toString()"; + // Test window.getSelection() returns empty string "" literally. + assertEquals("\"\"", executeJavaScriptAndWaitForResult( + popupContents, popupContentsClient, jsGetSelection)); + } + + // Copied from imeTest.java. + private void assertWaitForSelectActionBarStatus(final boolean show, final ContentViewCore cvc) + throws InterruptedException { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { + @Override + public boolean isSatisfied() { + return show == cvc.isSelectActionBarShowing(); + } + })); + } + + private void hideSelectActionMode(final ContentViewCore cvc) { + getInstrumentation().runOnMainSync(new Runnable() { + @Override + public void run() { + cvc.hideSelectActionMode(); + } + }); + } } diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java index 42e9225..6a6182f 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java @@ -6,12 +6,17 @@ package org.chromium.android_webview.test; import android.graphics.Picture; import android.net.http.SslError; +import android.view.ActionMode; +import android.view.View; import android.webkit.ConsoleMessage; import android.webkit.ValueCallback; import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest; import org.chromium.android_webview.AwWebResourceResponse; import org.chromium.base.ThreadUtils; +import org.chromium.content.browser.SelectActionMode; +import org.chromium.content.browser.SelectActionModeCallback; +import org.chromium.content.browser.SelectActionModeCallback.ActionHandler; import org.chromium.content.browser.test.util.CallbackHelper; import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper; import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageCommitVisibleHelper; @@ -216,6 +221,16 @@ public class TestAwContentsClient extends NullContentsClient { mOnReceivedSslErrorHelper.notifyCalled(); } + @Override + public SelectActionMode startActionMode( + View view, ActionHandler actionHandler, boolean floating) { + if (floating) return null; + ActionMode.Callback callback = + new SelectActionModeCallback(view.getContext(), actionHandler); + ActionMode actionMode = view.startActionMode(callback); + return actionMode != null ? new SelectActionMode(actionMode) : null; + } + public void setAllowSslError(boolean allow) { mAllowSslError = allow; } diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java index 57d0fc0..3e2a081 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java @@ -19,8 +19,6 @@ import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.DOMUtils; import org.chromium.content_shell_apk.ContentShellTestBase; -import java.util.concurrent.Callable; - /** * Integration tests for text selection-related behavior. */ @@ -548,27 +546,21 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { private void assertClipboardContents(final Context context, final String expectedContents) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { - return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { - @Override - public Boolean call() throws Exception { - ClipboardManager clipboardManager = - (ClipboardManager) context.getSystemService( - Context.CLIPBOARD_SERVICE); - ClipData clip = clipboardManager.getPrimaryClip(); - return clip != null && clip.getItemCount() == 1 - && TextUtils.equals(clip.getItemAt(0).getText(), expectedContents); - } - }); + ClipboardManager clipboardManager = + (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = clipboardManager.getPrimaryClip(); + return clip != null && clip.getItemCount() == 1 + && TextUtils.equals(clip.getItemAt(0).getText(), expectedContents); } })); } private void assertWaitForSelectActionBarVisible( final boolean visible) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return visible == mContentViewCore.isSelectActionBarShowing(); @@ -623,7 +615,7 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { } private void assertWaitForPastePopupStatus(final boolean show) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return show == mContentViewCore.getPastePopupForTest().isShowing(); diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java index cee8606..5050aee 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java @@ -32,7 +32,6 @@ import org.chromium.content_public.browser.WebContents; import org.chromium.content_shell_apk.ContentShellTestBase; import java.util.ArrayList; -import java.util.concurrent.Callable; /** * Integration tests for text input using cases based on fixed regressions. @@ -945,7 +944,7 @@ public class ImeTest extends ContentShellTestBase { DOMUtils.longPressNode(this, mContentViewCore, "input_text"); final PastePopupMenu pastePopup = mContentViewCore.getPastePopupForTest(); - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return pastePopup.isShowing(); @@ -986,7 +985,7 @@ public class ImeTest extends ContentShellTestBase { } private void assertWaitForKeyboardStatus(final boolean show) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return show == getImeAdapter().mIsShowWithoutHideOutstanding @@ -997,7 +996,7 @@ public class ImeTest extends ContentShellTestBase { private void assertWaitForSelectActionBarStatus( final boolean show) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return show == mContentViewCore.isSelectActionBarShowing(); @@ -1032,7 +1031,7 @@ public class ImeTest extends ContentShellTestBase { assertTrue("Actual selection was: " + mInputMethodManagerWrapper.getSelection() + ", and actual composition was: " + mInputMethodManagerWrapper.getComposition(), - CriteriaHelper.pollForCriteria(new Criteria() { + CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { return mInputMethodManagerWrapper.getSelection().equals(selection) @@ -1060,20 +1059,14 @@ public class ImeTest extends ContentShellTestBase { private void assertClipboardContents(final Activity activity, final String expectedContents) throws InterruptedException { - assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() { @Override public boolean isSatisfied() { - return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { - @Override - public Boolean call() throws Exception { - ClipboardManager clipboardManager = - (ClipboardManager) activity.getSystemService( - Context.CLIPBOARD_SERVICE); - ClipData clip = clipboardManager.getPrimaryClip(); - return clip != null && clip.getItemCount() == 1 - && TextUtils.equals(clip.getItemAt(0).getText(), expectedContents); - } - }); + ClipboardManager clipboardManager = + (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = clipboardManager.getPrimaryClip(); + return clip != null && clip.getItemCount() == 1 + && TextUtils.equals(clip.getItemAt(0).getText(), expectedContents); } })); } |