Index: content/browser/renderer_host/input/touch_selection_controller_unittest.cc |
diff --git a/content/browser/renderer_host/input/touch_selection_controller_unittest.cc b/content/browser/renderer_host/input/touch_selection_controller_unittest.cc |
index e2b0dcc1f8736a97167fa16cecc42b5f7d8eb35b..f5a53bc80e1269df294d6d1711996e85e47bb964 100644 |
--- a/content/browser/renderer_host/input/touch_selection_controller_unittest.cc |
+++ b/content/browser/renderer_host/input/touch_selection_controller_unittest.cc |
@@ -187,13 +187,14 @@ TEST_F(TouchSelectionControllerTest, InsertionBasic) { |
// Insertion events are ignored until automatic showing is enabled. |
ChangeInsertion(insertion_rect, visible); |
EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
// Insertion events are ignored until the selection region is marked editable. |
ChangeInsertion(insertion_rect, visible); |
EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
- controller().OnSelectionEditable(true); |
+ controller().OnTapEvent(); |
+ controller().OnSelectionEditable(true); |
ChangeInsertion(insertion_rect, visible); |
EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); |
@@ -215,7 +216,7 @@ TEST_F(TouchSelectionControllerTest, InsertionBasic) { |
TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) { |
gfx::RectF insertion_rect(5, 5, 0, 10); |
bool visible = true; |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
controller().OnSelectionEditable(true); |
ChangeInsertion(insertion_rect, visible); |
@@ -226,9 +227,64 @@ TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) { |
EXPECT_EQ(INSERTION_CLEARED, GetLastEventType()); |
} |
+TEST_F(TouchSelectionControllerTest, InsertionStaysHiddenIfEmptyRegionTapped) { |
+ gfx::RectF insertion_rect(5, 5, 0, 10); |
+ bool visible = true; |
+ controller().OnSelectionEditable(true); |
+ |
+ // Taps should be ignored if they're in an empty editable region. |
+ controller().OnTapEvent(); |
+ controller().OnSelectionEmpty(true); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
+ |
+ // Once the region becomes editable, taps should show the insertion handle. |
+ controller().OnTapEvent(); |
+ controller().OnSelectionEmpty(false); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
+ EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); |
+ |
+ // Reset the selection. |
+ controller().HideAndDisallowShowingAutomatically(); |
+ EXPECT_EQ(INSERTION_CLEARED, GetLastEventType()); |
+ |
+ // Long-pressing should show the handle even if the editable region is empty. |
+ insertion_rect.Offset(2, -2); |
+ controller().OnLongPressEvent(); |
+ controller().OnSelectionEmpty(true); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
+ EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); |
+} |
+ |
+TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) { |
+ gfx::RectF insertion_rect(5, 5, 0, 10); |
+ bool visible = true; |
+ |
+ // Simulate the user tapping an empty text field. |
+ controller().OnTapEvent(); |
+ controller().OnSelectionEditable(true); |
+ controller().OnSelectionEmpty(true); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
+ |
+ // Simulate the cursor moving while a user is typing. |
+ insertion_rect.Offset(10, 0); |
+ controller().OnSelectionEmpty(false); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
+ |
+ // If the user taps the *same* position as the cursor at the end of the text |
+ // entry, the handle should appear. |
+ controller().OnTapEvent(); |
+ ChangeInsertion(insertion_rect, visible); |
+ EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
+ EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); |
+} |
+ |
TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { |
- controller().ShowSelectionHandlesAutomatically(); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnLongPressEvent(); |
controller().OnSelectionEditable(true); |
gfx::RectF anchor_rect(5, 5, 0, 10); |
@@ -247,10 +303,10 @@ TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { |
EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
EXPECT_EQ(focus_rect.bottom_left(), GetLastEventAnchor()); |
- controller().HideAndDisallowAutomaticShowing(); |
+ controller().HideAndDisallowShowingAutomatically(); |
EXPECT_EQ(INSERTION_CLEARED, GetLastEventType()); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
ChangeInsertion(focus_rect, visible); |
EXPECT_EQ(INSERTION_SHOWN, GetLastEventType()); |
EXPECT_EQ(focus_rect.bottom_left(), GetLastEventAnchor()); |
@@ -258,7 +314,7 @@ TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { |
TEST_F(TouchSelectionControllerTest, InsertionDragged) { |
base::TimeTicks event_time = base::TimeTicks::Now(); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
controller().OnSelectionEditable(true); |
// The touch sequence should not be handled if insertion is not active. |
@@ -307,7 +363,7 @@ TEST_F(TouchSelectionControllerTest, InsertionDragged) { |
TEST_F(TouchSelectionControllerTest, InsertionTapped) { |
base::TimeTicks event_time = base::TimeTicks::Now(); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
controller().OnSelectionEditable(true); |
SetDraggingEnabled(true); |
@@ -326,7 +382,7 @@ TEST_F(TouchSelectionControllerTest, InsertionTapped) { |
// Reset the insertion. |
ClearInsertion(); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
ChangeInsertion(anchor_rect, visible); |
ASSERT_EQ(INSERTION_SHOWN, GetLastEventType()); |
@@ -342,7 +398,7 @@ TEST_F(TouchSelectionControllerTest, InsertionTapped) { |
// Reset the insertion. |
ClearInsertion(); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
ChangeInsertion(anchor_rect, visible); |
ASSERT_EQ(INSERTION_SHOWN, GetLastEventType()); |
@@ -363,7 +419,7 @@ TEST_F(TouchSelectionControllerTest, SelectionBasic) { |
ChangeSelection(anchor_rect, visible, focus_rect, visible); |
EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); |
- controller().ShowSelectionHandlesAutomatically(); |
+ controller().OnLongPressEvent(); |
ChangeSelection(anchor_rect, visible, focus_rect, visible); |
EXPECT_EQ(SELECTION_SHOWN, GetLastEventType()); |
EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); |
@@ -380,7 +436,7 @@ TEST_F(TouchSelectionControllerTest, SelectionBasic) { |
TEST_F(TouchSelectionControllerTest, SelectionDragged) { |
base::TimeTicks event_time = base::TimeTicks::Now(); |
- controller().ShowSelectionHandlesAutomatically(); |
+ controller().OnLongPressEvent(); |
// The touch sequence should not be handled if selection is not active. |
MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); |
@@ -435,7 +491,7 @@ TEST_F(TouchSelectionControllerTest, SelectionDragged) { |
} |
TEST_F(TouchSelectionControllerTest, Animation) { |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
controller().OnSelectionEditable(true); |
gfx::RectF insertion_rect(5, 5, 0, 10); |
@@ -453,19 +509,19 @@ TEST_F(TouchSelectionControllerTest, Animation) { |
EXPECT_TRUE(GetAndResetNeedsAnimate()); |
// If the handles are explicity hidden, no animation should be triggered. |
- controller().HideAndDisallowAutomaticShowing(); |
+ controller().HideAndDisallowShowingAutomatically(); |
EXPECT_FALSE(GetAndResetNeedsAnimate()); |
// If the client doesn't support animation, no animation should be triggered. |
SetAnimationEnabled(false); |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
visible = true; |
ChangeInsertion(insertion_rect, visible); |
EXPECT_FALSE(GetAndResetNeedsAnimate()); |
} |
TEST_F(TouchSelectionControllerTest, TemporarilyHidden) { |
- controller().ShowInsertionHandleAutomatically(); |
+ controller().OnTapEvent(); |
controller().OnSelectionEditable(true); |
gfx::RectF insertion_rect(5, 5, 0, 10); |