| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/input/touch_selection_controller_client_
aura.h" | 5 #include "content/browser/renderer_host/input/touch_selection_controller_client_
aura.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 | 145 |
| 146 bool GetPointInsideTextfield(gfx::PointF* point) { | 146 bool GetPointInsideTextfield(gfx::PointF* point) { |
| 147 std::string str; | 147 std::string str; |
| 148 if (ExecuteScriptAndExtractString(shell(), "get_point_inside_textfield()", | 148 if (ExecuteScriptAndExtractString(shell(), "get_point_inside_textfield()", |
| 149 &str)) { | 149 &str)) { |
| 150 return JSONToPoint(str, point); | 150 return JSONToPoint(str, point); |
| 151 } | 151 } |
| 152 return false; | 152 return false; |
| 153 } | 153 } |
| 154 | 154 |
| 155 bool ClearTextfield() { return ExecuteScript(shell(), "clear_textfield()"); } | |
| 156 | |
| 157 RenderWidgetHostViewAura* GetRenderWidgetHostViewAura() { | 155 RenderWidgetHostViewAura* GetRenderWidgetHostViewAura() { |
| 158 return static_cast<RenderWidgetHostViewAura*>( | 156 return static_cast<RenderWidgetHostViewAura*>( |
| 159 shell()->web_contents()->GetRenderWidgetHostView()); | 157 shell()->web_contents()->GetRenderWidgetHostView()); |
| 160 } | 158 } |
| 161 | 159 |
| 162 TestTouchSelectionControllerClientAura* selection_controller_client() { | 160 TestTouchSelectionControllerClientAura* selection_controller_client() { |
| 163 return selection_controller_client_; | 161 return selection_controller_client_; |
| 164 } | 162 } |
| 165 | 163 |
| 166 void InitSelectionController() { | 164 void InitSelectionController() { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 rwhva->selection_controller()->GetStartHandleRect().CenterPoint()); | 264 rwhva->selection_controller()->GetStartHandleRect().CenterPoint()); |
| 267 generator_delegate->ConvertPointFromTarget(native_view, &handle_center); | 265 generator_delegate->ConvertPointFromTarget(native_view, &handle_center); |
| 268 generator.GestureTapAt(handle_center); | 266 generator.GestureTapAt(handle_center); |
| 269 EXPECT_TRUE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | 267 EXPECT_TRUE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); |
| 270 | 268 |
| 271 // Tap once more on the insertion handle; the quick menu should disappear. | 269 // Tap once more on the insertion handle; the quick menu should disappear. |
| 272 generator.GestureTapAt(handle_center); | 270 generator.GestureTapAt(handle_center); |
| 273 EXPECT_FALSE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | 271 EXPECT_FALSE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); |
| 274 } | 272 } |
| 275 | 273 |
| 276 // Tests that tapping in an empty textfield does not bring up the insertion | |
| 277 // handle. | |
| 278 IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraTest, | |
| 279 EmptyTextfieldInsertionOnTap) { | |
| 280 // Set the test page up. | |
| 281 ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); | |
| 282 InitSelectionController(); | |
| 283 | |
| 284 RenderWidgetHostViewAura* rwhva = GetRenderWidgetHostViewAura(); | |
| 285 | |
| 286 // Clear textfield contents. | |
| 287 ASSERT_TRUE(ClearTextfield()); | |
| 288 | |
| 289 EXPECT_EQ(ui::TouchSelectionController::INACTIVE, | |
| 290 rwhva->selection_controller()->active_status()); | |
| 291 EXPECT_FALSE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | |
| 292 | |
| 293 // Tap inside the textfield and wait for the insertion cursor. | |
| 294 selection_controller_client()->InitWaitForSelectionEvent( | |
| 295 ui::SELECTION_ESTABLISHED); | |
| 296 | |
| 297 gfx::PointF point; | |
| 298 ASSERT_TRUE(GetPointInsideTextfield(&point)); | |
| 299 ui::GestureEventDetails tap_details(ui::ET_GESTURE_TAP); | |
| 300 tap_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN); | |
| 301 tap_details.set_tap_count(1); | |
| 302 ui::GestureEvent tap(point.x(), point.y(), 0, ui::EventTimeForNow(), | |
| 303 tap_details); | |
| 304 rwhva->OnGestureEvent(&tap); | |
| 305 | |
| 306 selection_controller_client()->Wait(); | |
| 307 | |
| 308 // Check that insertion is not active and the quick menu is not showing. | |
| 309 EXPECT_EQ(ui::TouchSelectionController::INACTIVE, | |
| 310 rwhva->selection_controller()->active_status()); | |
| 311 EXPECT_FALSE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | |
| 312 } | |
| 313 | |
| 314 // Tests that long-pressing on an empty textfield brings up the insertion handle | |
| 315 // and the quick menu. | |
| 316 IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraTest, | |
| 317 EmptyTextfieldInsertionOnLongPress) { | |
| 318 // Set the test page up. | |
| 319 ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); | |
| 320 InitSelectionController(); | |
| 321 | |
| 322 RenderWidgetHostViewAura* rwhva = GetRenderWidgetHostViewAura(); | |
| 323 | |
| 324 // Clear textfield contents. | |
| 325 ASSERT_TRUE(ClearTextfield()); | |
| 326 | |
| 327 EXPECT_EQ(ui::TouchSelectionController::INACTIVE, | |
| 328 rwhva->selection_controller()->active_status()); | |
| 329 EXPECT_FALSE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | |
| 330 | |
| 331 // Long-press inside the textfield and wait for the insertion handle. | |
| 332 selection_controller_client()->InitWaitForSelectionEvent( | |
| 333 ui::INSERTION_HANDLE_SHOWN); | |
| 334 | |
| 335 gfx::PointF point; | |
| 336 ASSERT_TRUE(GetPointInsideTextfield(&point)); | |
| 337 ui::GestureEventDetails long_press_details(ui::ET_GESTURE_LONG_PRESS); | |
| 338 long_press_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN); | |
| 339 ui::GestureEvent long_press(point.x(), point.y(), 0, ui::EventTimeForNow(), | |
| 340 long_press_details); | |
| 341 rwhva->OnGestureEvent(&long_press); | |
| 342 | |
| 343 selection_controller_client()->Wait(); | |
| 344 | |
| 345 // Check that insertion is active and the quick menu is showing. | |
| 346 EXPECT_EQ(ui::TouchSelectionController::INSERTION_ACTIVE, | |
| 347 rwhva->selection_controller()->active_status()); | |
| 348 EXPECT_TRUE(ui::TouchSelectionMenuRunner::GetInstance()->IsRunning()); | |
| 349 } | |
| 350 | |
| 351 // Tests that the quick menu is hidden whenever a touch point is active. | 274 // Tests that the quick menu is hidden whenever a touch point is active. |
| 352 IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraTest, | 275 IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraTest, |
| 353 QuickMenuHiddenOnTouch) { | 276 QuickMenuHiddenOnTouch) { |
| 354 // Set the test page up. | 277 // Set the test page up. |
| 355 ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); | 278 ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); |
| 356 InitSelectionController(); | 279 InitSelectionController(); |
| 357 | 280 |
| 358 RenderWidgetHostViewAura* rwhva = GetRenderWidgetHostViewAura(); | 281 RenderWidgetHostViewAura* rwhva = GetRenderWidgetHostViewAura(); |
| 359 EXPECT_EQ(ui::TouchSelectionController::INACTIVE, | 282 EXPECT_EQ(ui::TouchSelectionController::INACTIVE, |
| 360 rwhva->selection_controller()->active_status()); | 283 rwhva->selection_controller()->active_status()); |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 | 636 |
| 714 // The handle should have moved to right. | 637 // The handle should have moved to right. |
| 715 EXPECT_EQ(initial_handle_rect.y(), moved_handle_rect.y()); | 638 EXPECT_EQ(initial_handle_rect.y(), moved_handle_rect.y()); |
| 716 EXPECT_LT(initial_handle_rect.x(), moved_handle_rect.x()); | 639 EXPECT_LT(initial_handle_rect.x(), moved_handle_rect.x()); |
| 717 | 640 |
| 718 EXPECT_EQ(ui::TouchSelectionController::INSERTION_ACTIVE, | 641 EXPECT_EQ(ui::TouchSelectionController::INSERTION_ACTIVE, |
| 719 rwhva->selection_controller()->active_status()); | 642 rwhva->selection_controller()->active_status()); |
| 720 } | 643 } |
| 721 | 644 |
| 722 } // namespace content | 645 } // namespace content |
| OLD | NEW |