diff options
-rw-r--r-- | content/browser/web_contents/touch_editable_impl_aura_browsertest.cc | 28 | ||||
-rw-r--r-- | ui/views/touchui/touch_selection_controller_impl.cc | 6 |
2 files changed, 25 insertions, 9 deletions
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 c0fb65c..86b3698 100644 --- a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc +++ b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc @@ -28,6 +28,7 @@ namespace content { +// TODO(mohsen): Remove logs if the test showed no flakiness anymore. class TestTouchEditableImplAura : public TouchEditableImplAura { public: TestTouchEditableImplAura() @@ -37,6 +38,7 @@ class TestTouchEditableImplAura : public TouchEditableImplAura { waiting_for_gesture_ack_callback_(false) {} void Reset() { + LOG(INFO) << "TestTouchEditableImplAura::Reset()"; selection_changed_callback_arrived_ = false; waiting_for_selection_changed_callback_ = false; gesture_ack_callback_arrived_ = false; @@ -45,6 +47,8 @@ class TestTouchEditableImplAura : public TouchEditableImplAura { virtual void OnSelectionOrCursorChanged(const gfx::Rect& anchor, const gfx::Rect& focus) OVERRIDE { + LOG(INFO) << "TestTouchEditableImplAura::OnSelectionOrCursorChanged(" + << anchor.ToString() << ", " << focus.ToString() << ")"; selection_changed_callback_arrived_ = true; TouchEditableImplAura::OnSelectionOrCursorChanged(anchor, focus); if (waiting_for_selection_changed_callback_) @@ -52,6 +56,8 @@ class TestTouchEditableImplAura : public TouchEditableImplAura { } virtual void GestureEventAck(int gesture_event_type) OVERRIDE { + LOG(INFO) << "TestTouchEditableImplAura::GestureEventAck(" + << gesture_event_type << ")"; gesture_ack_callback_arrived_ = true; TouchEditableImplAura::GestureEventAck(gesture_event_type); if (waiting_for_gesture_ack_callback_) @@ -59,6 +65,7 @@ class TestTouchEditableImplAura : public TouchEditableImplAura { } void WaitForSelectionChangeCallback() { + LOG(INFO) << "TestTouchEditableImplAura::WaitForSelectionChangeCallback()"; if (selection_changed_callback_arrived_) return; waiting_for_selection_changed_callback_ = true; @@ -67,6 +74,7 @@ class TestTouchEditableImplAura : public TouchEditableImplAura { } void WaitForGestureAck() { + LOG(INFO) << "TestTouchEditableImplAura::WaitForGestureAck()"; if (gesture_ack_callback_arrived_) return; waiting_for_gesture_ack_callback_ = true; @@ -115,6 +123,7 @@ class TouchEditableImplAuraTest : public ContentBrowserTest { content->GetRootWindow()->SetHostSize(gfx::Size(800, 600)); } + // TODO(mohsen): Remove logs if the test showed no flakiness anymore. void TestTouchSelectionOriginatingFromWebpage() { ASSERT_NO_FATAL_FAILURE( StartTestWithPage("files/touch_selection.html")); @@ -132,23 +141,28 @@ class TouchEditableImplAuraTest : public ContentBrowserTest { aura::test::EventGenerator generator(content->GetRootWindow(), content); gfx::Rect bounds = content->GetBoundsInRootWindow(); + LOG(INFO) << "Select text and wait for selection change."; touch_editable->Reset(); ExecuteSyncJSFunction(view_host, "select_all_text()"); touch_editable->WaitForSelectionChangeCallback(); + LOG(INFO) << "Tap on selection to bring up handles."; // Tap inside selection to bring up selection handles. generator.GestureTapAt(gfx::Point(bounds.x() + 10, bounds.y() + 10)); EXPECT_EQ(touch_editable->rwhva_, rwhva); + LOG(INFO) << "Get selection."; scoped_ptr<base::Value> value = content::ExecuteScriptAndGetValue(view_host, "get_selection()"); std::string selection; value->GetAsString(&selection); + LOG(INFO) << "Test handles and selection."; // Check if selection handles are showing. EXPECT_TRUE(touch_editable->touch_selection_controller_.get()); EXPECT_STREQ("Some text we can select", selection.c_str()); + LOG(INFO) << "Drag handles to modify the selection."; // Lets move the handles a bit to modify the selection touch_editable->Reset(); generator.GestureScrollSequence( @@ -156,6 +170,11 @@ class TouchEditableImplAuraTest : public ContentBrowserTest { gfx::Point(30, 47), base::TimeDelta::FromMilliseconds(20), 1); + LOG(INFO) << "Handle moved. Now, waiting for selection to change."; + touch_editable->WaitForSelectionChangeCallback(); + LOG(INFO) << "Selection changed."; + + LOG(INFO) << "Test selection."; EXPECT_TRUE(touch_editable->touch_selection_controller_.get()); value = content::ExecuteScriptAndGetValue(view_host, "get_selection()"); value->GetAsString(&selection); @@ -333,15 +352,8 @@ class TouchEditableImplAuraTest : public ContentBrowserTest { DISALLOW_COPY_AND_ASSIGN(TouchEditableImplAuraTest); }; -#if defined(OS_CHROMEOS) -#define MAYBE_TouchSelectionOriginatingFromWebpageTest \ - DISABLED_TouchSelectionOriginatingFromWebpageTest -#else -#define MAYBE_TouchSelectionOriginatingFromWebpageTest \ - TouchSelectionOriginatingFromWebpageTest -#endif IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest, - MAYBE_TouchSelectionOriginatingFromWebpageTest) { + TouchSelectionOriginatingFromWebpageTest) { TestTouchSelectionOriginatingFromWebpage(); } diff --git a/ui/views/touchui/touch_selection_controller_impl.cc b/ui/views/touchui/touch_selection_controller_impl.cc index 8b6b351..89f6bdc 100644 --- a/ui/views/touchui/touch_selection_controller_impl.cc +++ b/ui/views/touchui/touch_selection_controller_impl.cc @@ -193,7 +193,7 @@ class TouchSelectionControllerImpl::EditingHandleView case ui::ET_GESTURE_SCROLL_BEGIN: widget_->SetCapture(this); controller_->SetDraggingHandle(this); - drag_offset_ = event->y() - cursor_height() - + drag_offset_ = event->y() - cursor_height() + kSelectionHandleVerticalDragOffset; break; case ui::ET_GESTURE_SCROLL_UPDATE: { @@ -259,6 +259,10 @@ class TouchSelectionControllerImpl::EditingHandleView scoped_ptr<Widget> widget_; TouchSelectionControllerImpl* controller_; gfx::Rect selection_rect_; + + // Vertical offset between the scroll event position and the drag position + // reported to the client view (see the ASCII figure at the top of the file + // and its description for more details). int drag_offset_; // If set to true, the handle will not draw anything, hence providing an empty |