| Index: content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
|
| 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 6a65a9b60018abdc52d62e1d3f5a2f6df9a7cef4..c8e20aa08ae12a5176473406fb04c82f4949cb35 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
|
| @@ -10,7 +10,6 @@ import android.content.ClipboardManager;
|
| import android.content.Context;
|
| import android.content.res.Configuration;
|
| import android.os.Handler;
|
| -import android.os.Looper;
|
| import android.test.suitebuilder.annotation.MediumTest;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
| import android.text.InputType;
|
| @@ -23,13 +22,10 @@ import android.view.inputmethod.EditorInfo;
|
| import android.view.inputmethod.InputConnection;
|
|
|
| import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.test.util.CommandLineFlags;
|
| import org.chromium.base.test.util.DisabledTest;
|
| import org.chromium.base.test.util.Feature;
|
| import org.chromium.base.test.util.RetryOnFailure;
|
| import org.chromium.base.test.util.UrlUtils;
|
| -import org.chromium.base.test.util.parameter.Parameter;
|
| -import org.chromium.base.test.util.parameter.ParameterizedTest;
|
| import org.chromium.content.browser.ContentViewCore;
|
| import org.chromium.content.browser.test.util.Criteria;
|
| import org.chromium.content.browser.test.util.CriteriaHelper;
|
| @@ -49,25 +45,8 @@ import java.util.concurrent.ExecutionException;
|
| import java.util.concurrent.TimeoutException;
|
|
|
| /**
|
| - * IME (input method editor) and text input tests. Note that we run each test case twice,
|
| - * once with ImeThread feature and once without it.
|
| + * IME (input method editor) and text input tests.
|
| */
|
| -@ParameterizedTest.Set(tests = {
|
| - @ParameterizedTest(parameters = {
|
| - @Parameter(
|
| - tag = CommandLineFlags.Parameter.PARAMETER_TAG,
|
| - arguments = {
|
| - @Parameter.Argument(
|
| - name = CommandLineFlags.Parameter.ADD_ARG,
|
| - stringArray = {"enable-features=ImeThread"})})}),
|
| - @ParameterizedTest(parameters = {
|
| - @Parameter(
|
| - tag = CommandLineFlags.Parameter.PARAMETER_TAG,
|
| - arguments = {
|
| - @Parameter.Argument(
|
| - name = CommandLineFlags.Parameter.ADD_ARG,
|
| - stringArray = {"disable-features=ImeThread"})})})
|
| - })
|
| public class ImeTest extends ContentShellTestBase {
|
| protected ChromiumBaseInputConnection mConnection;
|
| private TestInputConnectionFactory mConnectionFactory;
|
| @@ -105,10 +84,6 @@ public class ImeTest extends ContentShellTestBase {
|
| mConnection = getInputConnection();
|
| mImeAdapter = getImeAdapter();
|
|
|
| - if (usingReplicaInputConnection()) {
|
| - // This is not needed if onCreateInputConnection() can return correct selection range.
|
| - waitAndVerifyUpdateSelection(0, 0, 0, -1, -1);
|
| - }
|
| waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT});
|
| assertEquals(0, mConnectionFactory.getOutAttrs().initialSelStart);
|
| assertEquals(0, mConnectionFactory.getOutAttrs().initialSelEnd);
|
| @@ -182,7 +157,6 @@ public class ImeTest extends ContentShellTestBase {
|
| @SmallTest
|
| @Feature({"TextInput", "Main"})
|
| public void testCompositionWithNullTextNotCrash() throws Throwable {
|
| - if (usingReplicaInputConnection()) return;
|
| commitText(null, 1);
|
| assertTextsAroundCursor("", null, "");
|
|
|
| @@ -242,10 +216,6 @@ public class ImeTest extends ContentShellTestBase {
|
| @SmallTest
|
| @Feature({"TextInput", "Main"})
|
| public void testSetComposingTextForNewCursorPositions() throws Throwable {
|
| - // When newCursorPosition != 1, setComposingText doesn't work for ReplicaInputConnection
|
| - // because there is a bug in BaseInputConnection.
|
| - if (usingReplicaInputConnection()) return;
|
| -
|
| // Cursor is on the right of composing text when newCursorPosition > 0.
|
| setComposingText("ab", 1);
|
| waitAndVerifyUpdateSelection(0, 2, 2, 0, 2);
|
| @@ -293,10 +263,6 @@ public class ImeTest extends ContentShellTestBase {
|
| @Feature({"TextInput", "Main"})
|
| @RetryOnFailure
|
| public void testCommitTextForNewCursorPositions() throws Throwable {
|
| - // When newCursorPosition != 1, commitText doesn't work for ReplicaInputConnection
|
| - // because there is a bug in BaseInputConnection.
|
| - if (usingReplicaInputConnection()) return;
|
| -
|
| // Cursor is on the left of committing text.
|
| commitText("ab", 0);
|
| waitAndVerifyUpdateSelection(0, 0, 0, -1, -1);
|
| @@ -494,18 +460,8 @@ public class ImeTest extends ContentShellTestBase {
|
| private void assertTextsAroundCursor(
|
| CharSequence before, CharSequence selected, CharSequence after) throws Exception {
|
| assertEquals(before, getTextBeforeCursor(100, 0));
|
| -
|
| - CharSequence actualSelected = getSelectedText(0);
|
| - assertEquals(selected, actualSelected);
|
| -
|
| - if (usingReplicaInputConnection() && after.equals("\n")) {
|
| - // When the text ends with \n, we have a second new line that is not user
|
| - // visible/editable one, it is a side effect of using <br> internally.
|
| - // Replica model simply deviates from the blink editor in this case.
|
| - assertEquals("", getTextAfterCursor(100, 0));
|
| - } else {
|
| - assertEquals(after, getTextAfterCursor(100, 0));
|
| - }
|
| + assertEquals(selected, getSelectedText(0));
|
| + assertEquals(after, getTextAfterCursor(100, 0));
|
| }
|
|
|
| private void waitForKeyboardStates(int show, int hide, int restart, Integer[] history)
|
| @@ -818,15 +774,11 @@ public class ImeTest extends ContentShellTestBase {
|
| assertTextsAroundCursor("blablargblarg", null, "");
|
| }
|
|
|
| + // crbug.com/606059
|
| @MediumTest
|
| @Feature({"TextInput"})
|
| @RetryOnFailure
|
| public void testPasteLongText() throws Exception {
|
| - // Chrome can crash after pasting long text into textarea, becasue there is an overflow bug
|
| - // in SpannableStringBuilder#replace(). This can be avoided by enabling ImeThread.
|
| - // crbug.com/606059
|
| - if (usingReplicaInputConnection()) return;
|
| -
|
| final int textLength = 25000;
|
| final String text = new String(new char[textLength]).replace("\0", "a");
|
| setClip(text);
|
| @@ -1119,10 +1071,6 @@ public class ImeTest extends ContentShellTestBase {
|
| dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_B));
|
| assertEquals("hôˆb", getTextBeforeCursor(9, 0));
|
| int index = 4;
|
| - if (usingReplicaInputConnection()) {
|
| - // A transitional state due to finishComposingText.
|
| - waitAndVerifyUpdateSelection(index++, 3, 3, -1, -1);
|
| - }
|
| waitAndVerifyUpdateSelection(index++, 4, 4, -1, -1);
|
|
|
| // ALT-i
|
| @@ -1138,10 +1086,6 @@ public class ImeTest extends ContentShellTestBase {
|
| assertEquals("hôˆb", getTextBeforeCursor(9, 0));
|
| dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
|
| assertEquals("hôˆb", getTextBeforeCursor(9, 0));
|
| - if (usingReplicaInputConnection()) {
|
| - // A transitional state due to finishComposingText in deleteSurroundingTextImpl.
|
| - waitAndVerifyUpdateSelection(index++, 5, 5, -1, -1);
|
| - }
|
| waitAndVerifyUpdateSelection(index++, 4, 4, -1, -1);
|
| }
|
|
|
| @@ -1225,50 +1169,7 @@ public class ImeTest extends ContentShellTestBase {
|
| dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
|
| dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT));
|
|
|
| - if (usingReplicaInputConnection()) {
|
| - // Ideally getTextBeforeCursor immediately after dispatchKeyEvent should return a
|
| - // correct value, but we have a stop-gap solution in render_widget_input_handler and it
|
| - // make take some round trip time until we get the correct value.
|
| - waitUntilGetCharacterBeforeCursorBecomes("l");
|
| - } else {
|
| - assertTextsAroundCursor("hell", null, "o");
|
| - }
|
| - }
|
| -
|
| - private void waitUntilGetCharacterBeforeCursorBecomes(final String expectedText)
|
| - throws InterruptedException {
|
| - pollForCriteriaOnThread(Criteria.equals(expectedText, new Callable<String>() {
|
| - @Override
|
| - public String call() {
|
| - return (String) mConnection.getTextBeforeCursor(1, 0);
|
| - }
|
| - }));
|
| - }
|
| -
|
| - private void pollForCriteriaOnThread(final Criteria criteria) throws InterruptedException {
|
| - final Callable<Boolean> callable = new Callable<Boolean>() {
|
| - @Override
|
| - public Boolean call() throws Exception {
|
| - return criteria.isSatisfied();
|
| - }
|
| - };
|
| - CriteriaHelper.pollInstrumentationThread(new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - try {
|
| - return runBlockingOnImeThread(callable);
|
| - } catch (Exception e) {
|
| - e.printStackTrace();
|
| - fail();
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public String getFailureReason() {
|
| - return criteria.getFailureReason();
|
| - }
|
| - });
|
| + assertTextsAroundCursor("hell", null, "o");
|
| }
|
|
|
| @SmallTest
|
| @@ -1487,27 +1388,8 @@ public class ImeTest extends ContentShellTestBase {
|
| private void waitForEventLogs(String expectedLogs) throws Exception {
|
| final String code = "getEventLogs()";
|
| final String sanitizedExpectedLogs = "\"" + expectedLogs + "\"";
|
| - if (usingReplicaInputConnection()) {
|
| - // When using replica input connection, update from JavaScript will come at a later
|
| - // time.
|
| - CriteriaHelper.pollInstrumentationThread(new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - try {
|
| - String eventLogs = JavaScriptUtils.executeJavaScriptAndWaitForResult(
|
| - getContentViewCore().getWebContents(), code);
|
| - updateFailureReason(eventLogs);
|
| - return sanitizedExpectedLogs.equals(eventLogs);
|
| - } catch (InterruptedException | TimeoutException e) {
|
| - updateFailureReason(e.getMessage());
|
| - return false;
|
| - }
|
| - }
|
| - });
|
| - } else {
|
| - assertEquals(sanitizedExpectedLogs, JavaScriptUtils.executeJavaScriptAndWaitForResult(
|
| - getContentViewCore().getWebContents(), code));
|
| - }
|
| + assertEquals(sanitizedExpectedLogs, JavaScriptUtils.executeJavaScriptAndWaitForResult(
|
| + getContentViewCore().getWebContents(), code));
|
| }
|
|
|
| // https://crbug.com/604675
|
| @@ -1941,10 +1823,6 @@ public class ImeTest extends ContentShellTestBase {
|
| mConnection = getInputConnection();
|
| }
|
|
|
| - private boolean usingReplicaInputConnection() {
|
| - return mConnectionFactory.getHandler().getLooper() == Looper.getMainLooper();
|
| - }
|
| -
|
| private static class TestInputConnectionFactory implements ChromiumBaseInputConnection.Factory {
|
| private final ChromiumBaseInputConnection.Factory mFactory;
|
|
|
|
|