summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java363
-rw-r--r--content/test/data/android/device_files/insertion_handle/editable_long_text.html14
-rw-r--r--content/test/data/android/device_files/insertion_handle/input_text.html9
3 files changed, 199 insertions, 187 deletions
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java
index b0a50d5..6e03eee 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java
@@ -7,7 +7,8 @@ package org.chromium.content.browser;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
-import android.test.FlakyTest;
+import android.graphics.Rect;
+import android.test.suitebuilder.annotation.MediumTest;
import android.text.Editable;
import android.text.Selection;
@@ -17,248 +18,138 @@ 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.content.browser.test.util.TestTouchUtils;
+import org.chromium.content.browser.test.util.TouchCommon;
import org.chromium.content_shell.ContentShellTestBase;
public class InsertionHandleTest extends ContentShellTestBase {
- private static final String FILENAME = "content/insertion_handle/editable_long_text.html";
+ private static final String TEXTAREA_FILENAME =
+ "content/insertion_handle/editable_long_text.html";
+ private static final String TEXTAREA_ID = "textarea";
private static final String INPUT_TEXT_FILENAME = "content/insertion_handle/input_text.html";
private static final String INPUT_TEXT_ID = "input_text";
// Offset to compensate for the fact that the handle is below the text.
private static final int VERTICAL_OFFSET = 10;
- // These positions should both be in the text area and not within
- // HANDLE_POSITON_TOLERANCE of each other in either coordinate.
- private static final int INITIAL_CLICK_X = 100;
- private static final int INITIAL_CLICK_Y = 100;
- private static final int DRAG_TO_X = 287;
- private static final int DRAG_TO_Y = 199;
- private static final int HANDLE_POSITION_TOLERANCE = 40;
+ private static final int HANDLE_POSITION_TOLERANCE = 20;
private static final String PASTE_TEXT = "**test text to paste**";
- private void dragHandleTo(int dragToX, int dragToY, int steps) throws Throwable {
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
- HandleView handle = ihc.getHandleViewForTest();
- int initialX = handle.getPositionX();
- int initialY = handle.getPositionY() + VERTICAL_OFFSET;
- ContentView view = getContentView();
-
- int fromLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, initialX,
- initialY);
- int toLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, dragToX,
- dragToY);
-
- long downTime = TestTouchUtils.dragStart(getInstrumentation(), fromLocation[0],
- fromLocation[1]);
- assertWaitForHandleDraggingEquals(true);
- TestTouchUtils.dragTo(getInstrumentation(), fromLocation[0], toLocation[0],
- fromLocation[1], toLocation[1], steps, downTime);
- TestTouchUtils.dragEnd(getInstrumentation(), toLocation[0], toLocation[1], downTime);
- assertWaitForHandleDraggingEquals(false);
- }
-
- private void dragHandleTo(int dragToX, int dragToY) throws Throwable {
- dragHandleTo(dragToX, dragToY, 5);
- }
-
- private void assertWaitForHandleDraggingEquals(final boolean expected) throws Throwable {
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
- final HandleView handle = ihc.getHandleViewForTest();
+ // TODO(cjhopman): Due to http://crbug.com/179511, these tests must wait for the ContentViewCore
+ // to have the correct page scale factor (otherwise clicks will be sent to the wrong
+ // coordinates). This workaround should be removed when that bug is fixed.
+ private void assertWaitForPageScaleFactor(final float scale) throws InterruptedException {
assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
@Override
public boolean isSatisfied() {
- return handle.isDragging() == expected;
+ return getContentViewCore().getScale() == scale;
}
}));
}
- // @MediumTest
- // http://crbug.com/169648
- @FlakyTest
- @Feature({"TextSelection", "TextInput", "Main"})
- public void testDragInsertionHandle() throws Throwable {
- startActivityWithTestUrl(FILENAME);
-
- clickToShowInsertionHandle();
+ @Override
+ public void startActivityWithTestUrl(String filename) throws Throwable {
+ super.startActivityWithTestUrl(filename);
+ assertWaitForPageScaleFactor(1);
+ }
- dragHandleTo(DRAG_TO_X, DRAG_TO_Y);
- assertWaitForHandleNear(DRAG_TO_X, DRAG_TO_Y);
+ @MediumTest
+ @Feature({"TextSelection", "TextInput", "Main"})
+ public void testUnselectHidesHandle() throws Throwable {
+ startActivityWithTestUrl(TEXTAREA_FILENAME);
+ clickNodeToShowInsertionHandle(TEXTAREA_ID);
// Unselecting should cause the handle to disappear.
getImeAdapter().unselect();
assertTrue(waitForHandleShowingEquals(false));
}
- private static boolean isHandleNear(HandleView handle, int x, int y) {
- return (Math.abs(handle.getPositionX() - x) < HANDLE_POSITION_TOLERANCE) &&
- (Math.abs(handle.getPositionY() - y) < HANDLE_POSITION_TOLERANCE);
- }
+ @MediumTest
+ @Feature({"TextSelection", "TextInput", "Main"})
+ public void testDragInsertionHandle() throws Throwable {
+ startActivityWithTestUrl(TEXTAREA_FILENAME);
+
+ clickNodeToShowInsertionHandle(TEXTAREA_ID);
- private void assertWaitForHandleNear(final int x, final int y) throws Throwable {
InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
- final HandleView handle = ihc.getHandleViewForTest();
- assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- return isHandleNear(handle, x, y);
- }
- }));
- }
+ HandleView handle = ihc.getHandleViewForTest();
- private boolean waitForHandleShowingEquals(final boolean shouldBeShowing)
- throws Throwable {
- return CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- InsertionHandleController ihc =
- getContentViewCore().getInsertionHandleControllerForTest();
- boolean isShowing = ihc != null && ihc.isShowing();
- return isShowing == shouldBeShowing;
- }
- });
+ int initialX = handle.getPositionX();
+ int initialY = handle.getPositionY();
+ int dragToX = initialX + 120;
+ int dragToY = initialY + 120;
+
+ dragHandleTo(dragToX, dragToY);
+ assertWaitForHandleNear(dragToX, dragToY);
}
- // @MediumTest
- // http://crbug.com/169648
- @FlakyTest
+ @MediumTest
@Feature({"TextSelection", "TextInput"})
public void testPasteAtInsertionHandle() throws Throwable {
- startActivityWithTestUrl(FILENAME);
-
- clickToShowInsertionHandle();
+ startActivityWithTestUrl(TEXTAREA_FILENAME);
- assertTrue(waitForHasSelectionPosition());
+ clickNodeToShowInsertionHandle(TEXTAREA_ID);
- // See below. Removed assignments to satisfy findbugs.
- // int offset = getSelectionStart();
- // String initialText = getEditableText();
+ int offset = getSelectionStart();
+ String initialText = getEditableText();
saveToClipboard(PASTE_TEXT);
pasteOnMainSync();
- // TODO(aurimas): The ImeAdapter is often not receiving the correct update from the paste,
- // and so the editableText is never equal to the expectedText. Enable this check when fixed.
- // http://crbug.com/163966
- // String expectedText =
- // initialText.substring(0, offset) + PASTE_TEXT + initialText.substring(offset);
- // assertTrue(waitForEditableTextEquals(expectedText));
-
+ String expectedText =
+ initialText.substring(0, offset) + PASTE_TEXT + initialText.substring(offset);
+ assertTrue(waitForEditableTextEquals(expectedText));
assertTrue(waitForHandleShowingEquals(false));
}
- private boolean waitForEditableTextEquals(final String expectedText)
- throws Throwable {
- return CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- return getEditableText().trim().equals(expectedText.trim());
- }
- });
- }
-
- private boolean waitForHasSelectionPosition()
- throws Throwable {
- return CriteriaHelper.pollForCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- int start = getSelectionStart();
- int end = getSelectionEnd();
- return start > 0 && start == end;
- }
- });
- }
-
- private void pasteOnMainSync() {
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- getContentViewCore().getInsertionHandleControllerForTest().paste();
- }
- });
- }
-
- // @MediumTest
- // http://crbug.com/169648
- @FlakyTest
+ @MediumTest
@Feature({"TextSelection", "TextInput", "Main"})
public void testDragInsertionHandleInputText() throws Throwable {
startActivityWithTestUrl(INPUT_TEXT_FILENAME);
- DOMUtils.clickNode(this, getContentView(),
- new TestCallbackHelperContainer(getContentView()), INPUT_TEXT_ID);
- TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
- DOMUtils.clickNode(this, getContentView(),
- new TestCallbackHelperContainer(getContentView()), INPUT_TEXT_ID);
-
- assertTrue(waitForHandleShowingEquals(true));
- assertWaitForZoomFinished();
- assertTrue(waitForHandleViewStopped());
+ clickNodeToShowInsertionHandle(INPUT_TEXT_ID);
InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
HandleView handle = ihc.getHandleViewForTest();
int initialX = handle.getPositionX();
- int initialY = handle.getPositionY() + VERTICAL_OFFSET;
+ int initialY = handle.getPositionY();
int dragToX = initialX + 120;
int dragToY = initialY;
dragHandleTo(dragToX, dragToY);
-
- assertTrue(waitForHandleViewStopped());
assertWaitForHandleNear(dragToX, initialY);
TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
initialX = handle.getPositionX();
- initialY = handle.getPositionY() + VERTICAL_OFFSET;
- dragToX = initialX - 120;
- dragToY = initialY;
- dragHandleTo(dragToX, dragToY);
-
- assertTrue(waitForHandleViewStopped());
+ initialY = handle.getPositionY();
+ dragToY = initialY + 120;
+ dragHandleTo(initialX, dragToY);
// Vertical drag should not change the y-position.
- assertWaitForHandleNear(dragToX, initialY);
+ assertWaitForHandleNear(initialX, initialY);
}
- // @MediumTest
- // http://crbug.com/169648
- @FlakyTest
+ @MediumTest
@Feature({"TextSelection", "TextInput", "Main"})
public void testDragInsertionHandleInputTextOutsideBounds() throws Throwable {
startActivityWithTestUrl(INPUT_TEXT_FILENAME);
- DOMUtils.clickNode(this, getContentView(),
- new TestCallbackHelperContainer(getContentView()), INPUT_TEXT_ID);
- TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
- DOMUtils.clickNode(this, getContentView(),
- new TestCallbackHelperContainer(getContentView()), INPUT_TEXT_ID);
-
- assertTrue(waitForHandleShowingEquals(true));
- assertWaitForZoomFinished();
+ clickNodeToShowInsertionHandle(INPUT_TEXT_ID);
InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
HandleView handle = ihc.getHandleViewForTest();
- getContentView().zoomReset();
- assertWaitForZoomFinished();
-
- // Quickly (i.e. few move events) drag the handle down and to the right. When this happens,
- // the handle should stay vertically aligned with the drag position.
int initialX = handle.getPositionX();
- int initialY = handle.getPositionY() + VERTICAL_OFFSET;
+ int initialY = handle.getPositionY();
int dragToX = initialX;
int dragToY = initialY + 150;
// A vertical drag should not move the insertion handle.
dragHandleTo(dragToX, dragToY);
- assertTrue(waitForHandleViewStopped());
- // TODO(cjhopman): This currently does not work, dragging above or below will snap to the
- // beginning/end of the editable. See http://crbug.com/169055
- //assertWaitForHandleNear(initialX, initialY);
+ assertWaitForHandleNear(initialX, initialY);
// The input box does not go to the edge of the screen, and neither should the insertion
// handle.
dragToX = getContentView().getWidth();
dragHandleTo(dragToX, dragToY);
- assertTrue(waitForHandleViewStopped());
assertTrue(handle.getPositionX() < dragToX - 100);
}
@@ -269,32 +160,37 @@ public class InsertionHandleTest extends ContentShellTestBase {
saveToClipboard("");
}
- private void clickToShowInsertionHandle() throws Throwable {
- TestTouchUtils.singleClickView(getInstrumentation(), getContentView(), INITIAL_CLICK_X,
- INITIAL_CLICK_Y);
+ private void clickNodeToShowInsertionHandle(String nodeId) throws Throwable {
+ // On the first click the keyboard will be displayed but no insertion handles. On the second
+ // click (only if it changes the selection), the insertion handle is displayed. So that the
+ // second click changes the selection, the two clicks should be in sufficiently different
+ // locations.
+ Rect nodeBounds = DOMUtils.getNodeBounds(getContentView(),
+ new TestCallbackHelperContainer(getContentView()), nodeId);
+
+ RenderCoordinates renderCoordinates = getContentView().getRenderCoordinates();
+ float left = renderCoordinates.fromLocalCssToPix(nodeBounds.left);
+ float right = renderCoordinates.fromLocalCssToPix(nodeBounds.right);
+ float top = renderCoordinates.fromLocalCssToPix(nodeBounds.top);
+ float bottom = renderCoordinates.fromLocalCssToPix(nodeBounds.bottom);
+
+ TouchCommon touchCommon = new TouchCommon(this);
+ touchCommon.singleClickView(getContentView(),
+ (int)(left + 3 * (right - left) / 4), (int)(top + (bottom - top) / 2));
+
+
TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
- TestTouchUtils.singleClickView(getInstrumentation(), getContentView(), INITIAL_CLICK_X,
- INITIAL_CLICK_Y);
- assertTrue(waitForHandleShowingEquals(true));
- assertWaitForZoomFinished();
- }
+ assertTrue(waitForHasSelectionPosition());
- private void assertWaitForZoomFinished() throws Throwable {
- // If the polling interval is too short, slowly zooming may be detected as not zooming.
- final int POLLING_INTERVAL = 200;
- assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
- float mScale = -1;
- @Override
- public boolean isSatisfied() {
- float lastScale = mScale;
- mScale = getContentView().getScale();
- return mScale == lastScale;
- }
- }, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL, POLLING_INTERVAL));
+ // TODO(cjhopman): Wait for keyboard display finished?
+ touchCommon.singleClickView(getContentView(),
+ (int)(left + (right - left) / 4), (int)(top + (bottom - top) / 2));
+ assertTrue(waitForHandleShowingEquals(true));
+ assertTrue(waitForHandleViewStopped());
}
private boolean waitForHandleViewStopped() throws Throwable {
- // If the polling interval is too short, slowly zooming may be detected as not zooming.
+ // If the polling interval is too short, slowly moving may be detected as not moving.
final int POLLING_INTERVAL = 200;
return CriteriaHelper.pollForCriteria(new Criteria() {
int mPositionX = -1;
@@ -314,6 +210,103 @@ public class InsertionHandleTest extends ContentShellTestBase {
}, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL, POLLING_INTERVAL);
}
+ private boolean waitForEditableTextEquals(final String expectedText)
+ throws Throwable {
+ return CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return getEditableText().trim().equals(expectedText.trim());
+ }
+ });
+ }
+
+ private boolean waitForHasSelectionPosition()
+ throws Throwable {
+ return CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ int start = getSelectionStart();
+ int end = getSelectionEnd();
+ return start > 0 && start == end;
+ }
+ });
+ }
+
+ private void dragHandleTo(int dragToX, int dragToY, int steps) throws Throwable {
+ InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
+ HandleView handle = ihc.getHandleViewForTest();
+ int initialX = handle.getPositionX();
+ int initialY = handle.getPositionY();
+ ContentView view = getContentView();
+
+ int fromLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, initialX,
+ initialY + VERTICAL_OFFSET);
+ int toLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, dragToX,
+ dragToY + VERTICAL_OFFSET);
+
+ long downTime = TestTouchUtils.dragStart(getInstrumentation(), fromLocation[0],
+ fromLocation[1]);
+ assertWaitForHandleDraggingEquals(true);
+ TestTouchUtils.dragTo(getInstrumentation(), fromLocation[0], toLocation[0],
+ fromLocation[1], toLocation[1], steps, downTime);
+ TestTouchUtils.dragEnd(getInstrumentation(), toLocation[0], toLocation[1], downTime);
+ assertWaitForHandleDraggingEquals(false);
+ assertTrue(waitForHandleViewStopped());
+ }
+
+ private void dragHandleTo(int dragToX, int dragToY) throws Throwable {
+ dragHandleTo(dragToX, dragToY, 5);
+ }
+
+ private void assertWaitForHandleDraggingEquals(final boolean expected) throws Throwable {
+ InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
+ final HandleView handle = ihc.getHandleViewForTest();
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return handle.isDragging() == expected;
+ }
+ }));
+ }
+
+ private static boolean isHandleNear(HandleView handle, int x, int y) {
+ return (Math.abs(handle.getPositionX() - x) < HANDLE_POSITION_TOLERANCE) &&
+ (Math.abs(handle.getPositionY() - VERTICAL_OFFSET - y) < HANDLE_POSITION_TOLERANCE);
+ }
+
+ private void assertWaitForHandleNear(final int x, final int y) throws Throwable {
+ InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
+ final HandleView handle = ihc.getHandleViewForTest();
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return isHandleNear(handle, x, y);
+ }
+ }));
+ }
+
+ private boolean waitForHandleShowingEquals(final boolean shouldBeShowing)
+ throws Throwable {
+ return CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ InsertionHandleController ihc =
+ getContentViewCore().getInsertionHandleControllerForTest();
+ boolean isShowing = ihc != null && ihc.isShowing();
+ return isShowing == shouldBeShowing;
+ }
+ });
+ }
+
+ private void pasteOnMainSync() {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ getContentViewCore().getInsertionHandleControllerForTest().paste();
+ }
+ });
+ }
+
private int getSelectionStart() {
return Selection.getSelectionStart(getEditable());
}
diff --git a/content/test/data/android/device_files/insertion_handle/editable_long_text.html b/content/test/data/android/device_files/insertion_handle/editable_long_text.html
index 72ed71a..2b0f17d 100644
--- a/content/test/data/android/device_files/insertion_handle/editable_long_text.html
+++ b/content/test/data/android/device_files/insertion_handle/editable_long_text.html
@@ -1,9 +1,19 @@
<html>
<head>
<title>Test file for textarea-related tests.</title>
+ <meta name="viewport" content="
+ height = device-height,
+ width = device-width,
+ initial-scale = 1.0,
+ minimum-scale = 1.0,
+ maximum-scale = 1.0,
+ user-scalable = no,
+ target-densitydpi = device-dpi
+ " />
</head>
<body>
-<textarea cols="140" rows="100">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ <textarea id="textarea" cols="20" rows="10">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</textarea>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/content/test/data/android/device_files/insertion_handle/input_text.html b/content/test/data/android/device_files/insertion_handle/input_text.html
index 772d312..86aa4d0 100644
--- a/content/test/data/android/device_files/insertion_handle/input_text.html
+++ b/content/test/data/android/device_files/insertion_handle/input_text.html
@@ -1,6 +1,15 @@
<html>
<head>
<title>Test file for input-text-related tests.</title>
+ <meta name="viewport" content="
+ height = device-height,
+ width = device-width,
+ initial-scale = 1.0,
+ minimum-scale = 1.0,
+ maximum-scale = 1.0,
+ user-scalable = no,
+ target-densitydpi = device-dpi
+ " />
</head>
<body>
<input id="input_text" type="text" value="T0D0(cjhopman): put amusing sample text here. Make sure it is at least 100 characters. 123456789012345678901234567890" size=20></input>