| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ui/events/blink/input_handler_proxy.h" | 5 #include "ui/events/blink/input_handler_proxy.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/test/histogram_tester.h" | 10 #include "base/test/histogram_tester.h" |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 EXPECT_EQ(expected_disposition_, | 378 EXPECT_EQ(expected_disposition_, |
| 379 input_handler_->HandleInputEvent(gesture_)); | 379 input_handler_->HandleInputEvent(gesture_)); |
| 380 | 380 |
| 381 VERIFY_AND_RESET_MOCKS(); | 381 VERIFY_AND_RESET_MOCKS(); |
| 382 } | 382 } |
| 383 | 383 |
| 384 void SetSmoothScrollEnabled(bool value) { | 384 void SetSmoothScrollEnabled(bool value) { |
| 385 input_handler_->smooth_scroll_enabled_ = value; | 385 input_handler_->smooth_scroll_enabled_ = value; |
| 386 } | 386 } |
| 387 | 387 |
| 388 void SetMouseWheelGesturesOn(bool value) { | |
| 389 input_handler_->set_use_gesture_events_for_mouse_wheel(value); | |
| 390 } | |
| 391 | |
| 392 base::HistogramTester& histogram_tester() { | 388 base::HistogramTester& histogram_tester() { |
| 393 return histogram_tester_; | 389 return histogram_tester_; |
| 394 } | 390 } |
| 395 | 391 |
| 396 protected: | 392 protected: |
| 397 const bool synchronous_root_scroll_; | 393 const bool synchronous_root_scroll_; |
| 398 const bool install_synchronous_handler_; | 394 const bool install_synchronous_handler_; |
| 399 testing::StrictMock<MockInputHandler> mock_input_handler_; | 395 testing::StrictMock<MockInputHandler> mock_input_handler_; |
| 400 testing::StrictMock<MockSynchronousInputHandler> | 396 testing::StrictMock<MockSynchronousInputHandler> |
| 401 mock_synchronous_input_handler_; | 397 mock_synchronous_input_handler_; |
| 402 std::unique_ptr<TestInputHandlerProxy> input_handler_; | 398 std::unique_ptr<TestInputHandlerProxy> input_handler_; |
| 403 testing::StrictMock<MockInputHandlerProxyClient> mock_client_; | 399 testing::StrictMock<MockInputHandlerProxyClient> mock_client_; |
| 404 WebGestureEvent gesture_; | 400 WebGestureEvent gesture_; |
| 405 InputHandlerProxy::EventDisposition expected_disposition_; | 401 InputHandlerProxy::EventDisposition expected_disposition_; |
| 406 base::HistogramTester histogram_tester_; | 402 base::HistogramTester histogram_tester_; |
| 407 cc::InputHandlerScrollResult scroll_result_did_scroll_; | 403 cc::InputHandlerScrollResult scroll_result_did_scroll_; |
| 408 cc::InputHandlerScrollResult scroll_result_did_not_scroll_; | 404 cc::InputHandlerScrollResult scroll_result_did_not_scroll_; |
| 409 }; | 405 }; |
| 410 | 406 |
| 411 TEST_P(InputHandlerProxyTest, MouseWheelByPageMainThread) { | |
| 412 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; | |
| 413 SetMouseWheelGesturesOn(false); | |
| 414 WebMouseWheelEvent wheel; | |
| 415 wheel.type = WebInputEvent::MouseWheel; | |
| 416 wheel.scrollByPage = true; | |
| 417 | |
| 418 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | |
| 419 VERIFY_AND_RESET_MOCKS(); | |
| 420 } | |
| 421 | |
| 422 TEST_P(InputHandlerProxyTest, MouseWheelWithCtrlNotScroll) { | |
| 423 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; | |
| 424 SetMouseWheelGesturesOn(false); | |
| 425 WebMouseWheelEvent wheel; | |
| 426 wheel.type = WebInputEvent::MouseWheel; | |
| 427 wheel.modifiers = WebInputEvent::ControlKey; | |
| 428 wheel.canScroll = false; | |
| 429 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | |
| 430 VERIFY_AND_RESET_MOCKS(); | |
| 431 } | |
| 432 | |
| 433 TEST_P(InputHandlerProxyTest, MouseWheelNoListener) { | 407 TEST_P(InputHandlerProxyTest, MouseWheelNoListener) { |
| 434 expected_disposition_ = InputHandlerProxy::DROP_EVENT; | 408 expected_disposition_ = InputHandlerProxy::DROP_EVENT; |
| 435 EXPECT_CALL(mock_input_handler_, | 409 EXPECT_CALL(mock_input_handler_, |
| 436 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | 410 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) |
| 437 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); | 411 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); |
| 438 | 412 |
| 439 WebMouseWheelEvent wheel; | 413 WebMouseWheelEvent wheel; |
| 440 wheel.type = WebInputEvent::MouseWheel; | 414 wheel.type = WebInputEvent::MouseWheel; |
| 441 wheel.modifiers = WebInputEvent::ControlKey; | 415 wheel.modifiers = WebInputEvent::ControlKey; |
| 442 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | 416 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 462 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) | 436 GetEventListenerProperties(cc::EventListenerClass::kMouseWheel)) |
| 463 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); | 437 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); |
| 464 | 438 |
| 465 WebMouseWheelEvent wheel; | 439 WebMouseWheelEvent wheel; |
| 466 wheel.type = WebInputEvent::MouseWheel; | 440 wheel.type = WebInputEvent::MouseWheel; |
| 467 wheel.modifiers = WebInputEvent::ControlKey; | 441 wheel.modifiers = WebInputEvent::ControlKey; |
| 468 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | 442 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); |
| 469 VERIFY_AND_RESET_MOCKS(); | 443 VERIFY_AND_RESET_MOCKS(); |
| 470 } | 444 } |
| 471 | 445 |
| 472 // Mac does not smooth scroll wheel events (crbug.com/574283). | |
| 473 #if !defined(OS_MACOSX) | |
| 474 TEST_P(InputHandlerProxyTest, MouseWheelWithPreciseScrollingDeltas) { | |
| 475 #else | |
| 476 TEST_P(InputHandlerProxyTest, DISABLED_MouseWheelWithPreciseScrollingDeltas) { | |
| 477 #endif | |
| 478 SetSmoothScrollEnabled(true); | |
| 479 SetMouseWheelGesturesOn(false); | |
| 480 expected_disposition_ = InputHandlerProxy::DID_HANDLE; | |
| 481 WebMouseWheelEvent wheel; | |
| 482 wheel.type = WebInputEvent::MouseWheel; | |
| 483 | |
| 484 VERIFY_AND_RESET_MOCKS(); | |
| 485 | |
| 486 // Smooth scroll because hasPreciseScrollingDeltas is set to false. | |
| 487 wheel.hasPreciseScrollingDeltas = false; | |
| 488 EXPECT_CALL(mock_input_handler_, ScrollAnimated(::testing::_, ::testing::_)) | |
| 489 .WillOnce(testing::Return(kImplThreadScrollState)); | |
| 490 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | |
| 491 | |
| 492 VERIFY_AND_RESET_MOCKS(); | |
| 493 | |
| 494 // No smooth scroll because hasPreciseScrollingDeltas is set to true. | |
| 495 wheel.hasPreciseScrollingDeltas = true; | |
| 496 EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_)) | |
| 497 .WillOnce(testing::Return(kImplThreadScrollState)); | |
| 498 EXPECT_CALL(mock_input_handler_, ScrollBy(::testing::_)) | |
| 499 .WillOnce(testing::Return(scroll_result_did_scroll_)); | |
| 500 EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)); | |
| 501 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | |
| 502 | |
| 503 VERIFY_AND_RESET_MOCKS(); | |
| 504 } | |
| 505 | |
| 506 // Mac does not smooth scroll wheel events (crbug.com/574283). | |
| 507 #if !defined(OS_MACOSX) | |
| 508 TEST_P(InputHandlerProxyTest, MouseWheelScrollIgnored) { | |
| 509 #else | |
| 510 TEST_P(InputHandlerProxyTest, DISABLED_MouseWheelScrollIgnored) { | |
| 511 #endif | |
| 512 SetSmoothScrollEnabled(true); | |
| 513 SetMouseWheelGesturesOn(false); | |
| 514 expected_disposition_ = InputHandlerProxy::DROP_EVENT; | |
| 515 WebMouseWheelEvent wheel; | |
| 516 wheel.type = WebInputEvent::MouseWheel; | |
| 517 | |
| 518 EXPECT_CALL(mock_input_handler_, ScrollAnimated(testing::_, testing::_)) | |
| 519 .WillOnce(testing::Return(kScrollIgnoredScrollState)); | |
| 520 | |
| 521 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(wheel)); | |
| 522 VERIFY_AND_RESET_MOCKS(); | |
| 523 } | |
| 524 | |
| 525 TEST_P(InputHandlerProxyTest, GestureScrollStarted) { | 446 TEST_P(InputHandlerProxyTest, GestureScrollStarted) { |
| 526 // We shouldn't send any events to the widget for this gesture. | 447 // We shouldn't send any events to the widget for this gesture. |
| 527 expected_disposition_ = InputHandlerProxy::DID_HANDLE; | 448 expected_disposition_ = InputHandlerProxy::DID_HANDLE; |
| 528 VERIFY_AND_RESET_MOCKS(); | 449 VERIFY_AND_RESET_MOCKS(); |
| 529 | 450 |
| 530 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) | 451 EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
| 531 .WillOnce(testing::Return(kImplThreadScrollState)); | 452 .WillOnce(testing::Return(kImplThreadScrollState)); |
| 532 | 453 |
| 533 gesture_.type = WebInputEvent::GestureScrollBegin; | 454 gesture_.type = WebInputEvent::GestureScrollBegin; |
| 534 EXPECT_EQ(expected_disposition_,input_handler_->HandleInputEvent(gesture_)); | 455 EXPECT_EQ(expected_disposition_,input_handler_->HandleInputEvent(gesture_)); |
| (...skipping 2324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2859 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1), | 2780 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1), |
| 2860 base::Bucket(5, 1), base::Bucket(14, 1))); | 2781 base::Bucket(5, 1), base::Bucket(14, 1))); |
| 2861 } | 2782 } |
| 2862 | 2783 |
| 2863 | 2784 |
| 2864 INSTANTIATE_TEST_CASE_P(AnimateInput, | 2785 INSTANTIATE_TEST_CASE_P(AnimateInput, |
| 2865 InputHandlerProxyTest, | 2786 InputHandlerProxyTest, |
| 2866 testing::ValuesIn(test_types)); | 2787 testing::ValuesIn(test_types)); |
| 2867 } // namespace test | 2788 } // namespace test |
| 2868 } // namespace ui | 2789 } // namespace ui |
| OLD | NEW |