Index: content/browser/web_contents/touch_editable_impl_aura_browsertest.cc |
diff --git a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc |
index 77b7318ba1081d7191ee505935f0a922f9bb6a29..32c03ef60b1ed3a8eaad31667bf440cc01c38e77 100644 |
--- a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc |
+++ b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc |
@@ -338,6 +338,75 @@ IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest, |
} |
IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest, |
+ TestTouchSelectionWhenOverscrolling) { |
+ ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html")); |
+ WebContentsImpl* web_contents = |
+ static_cast<WebContentsImpl*>(shell()->web_contents()); |
+ RenderFrameHost* main_frame = web_contents->GetMainFrame(); |
+ WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>( |
+ web_contents->GetView()); |
+ TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura; |
+ view_aura->SetTouchEditableForTest(touch_editable); |
+ RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>( |
+ web_contents->GetRenderWidgetHostView()); |
+ EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva); |
+ |
+ // Long press to select word. |
+ ui::GestureEvent long_press( |
+ 10, |
+ 10, |
+ 0, |
+ ui::EventTimeForNow(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_LONG_PRESS)); |
+ touch_editable->Reset(); |
+ rwhva->OnGestureEvent(&long_press); |
+ touch_editable->WaitForSelectionChangeCallback(); |
+ |
+ // Check if selection handles are showing. |
+ EXPECT_TRUE(GetTouchSelectionController(touch_editable)); |
+ |
+ scoped_ptr<base::Value> value = |
+ content::ExecuteScriptAndGetValue(main_frame, "get_selection()"); |
+ std::string selection; |
+ value->GetAsString(&selection); |
+ EXPECT_STREQ("Some", selection.c_str()); |
+ |
+ // Overscroll is preceded with a scroll. Handles should get hidden. |
+ ui::GestureEvent scroll_begin( |
+ 10, |
+ 10, |
+ 0, |
+ ui::EventTimeForNow(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0, 0)); |
+ rwhva->OnGestureEvent(&scroll_begin); |
+ EXPECT_FALSE(GetTouchSelectionController(touch_editable)); |
+ |
+ // Then overscroll itself starts. Handles should remain hidden. |
+ touch_editable->OverscrollStarted(); |
+ EXPECT_FALSE(GetTouchSelectionController(touch_editable)); |
+ |
+ // We might have multiple overscroll-starts in one overscroll session. Handles |
+ // should still remain hidden. |
+ touch_editable->OverscrollStarted(); |
+ EXPECT_FALSE(GetTouchSelectionController(touch_editable)); |
+ |
+ // An overscroll session ends with a single overscroll-complete. Handles |
+ // should still remain hidden as the scroll is still in progress. |
+ touch_editable->OverscrollCompleted(); |
+ EXPECT_FALSE(GetTouchSelectionController(touch_editable)); |
+ |
+ // And, finally an scroll-end. Handles should come back. |
+ ui::GestureEvent scroll_end( |
+ 10, |
+ 10, |
+ 0, |
+ ui::EventTimeForNow(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END)); |
+ rwhva->OnGestureEvent(&scroll_end); |
+ EXPECT_TRUE(GetTouchSelectionController(touch_editable)); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest, |
TouchSelectionOnLongPressTest) { |
ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html")); |
WebContentsImpl* web_contents = |