| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/mouse_wheel_event_queue.h" | 5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 const WebGestureEvent::ScrollUnits scroll_units = | 311 const WebGestureEvent::ScrollUnits scroll_units = |
| 312 high_precision ? WebGestureEvent::PrecisePixels | 312 high_precision ? WebGestureEvent::PrecisePixels |
| 313 : WebGestureEvent::Pixels; | 313 : WebGestureEvent::Pixels; |
| 314 | 314 |
| 315 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 315 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 316 kWheelScrollGlobalY, 1, 1, 0, high_precision, | 316 kWheelScrollGlobalY, 1, 1, 0, high_precision, |
| 317 WebMouseWheelEvent::PhaseBegan, | 317 WebMouseWheelEvent::PhaseBegan, |
| 318 WebMouseWheelEvent::PhaseNone); | 318 WebMouseWheelEvent::PhaseNone); |
| 319 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 319 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 320 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 320 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 321 EXPECT_EQ(3U, all_sent_events().size()); | 321 if (scroll_latching_enabled_) { |
| 322 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); | 322 EXPECT_EQ(2U, all_sent_events().size()); |
| 323 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); | 323 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); |
| 324 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); | 324 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); |
| 325 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 325 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 326 } else { |
| 327 EXPECT_EQ(3U, all_sent_events().size()); |
| 328 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); |
| 329 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); |
| 330 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); |
| 331 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 332 } |
| 326 | 333 |
| 327 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 334 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 328 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 335 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
| 329 WebMouseWheelEvent::PhaseChanged, | 336 WebMouseWheelEvent::PhaseChanged, |
| 330 WebMouseWheelEvent::PhaseNone); | 337 WebMouseWheelEvent::PhaseNone); |
| 331 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 338 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 332 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 339 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 333 EXPECT_EQ(3U, all_sent_events().size()); | 340 if (scroll_latching_enabled_) { |
| 334 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 341 EXPECT_EQ(1U, all_sent_events().size()); |
| 335 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); | 342 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0)); |
| 336 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); | 343 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 337 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 344 } else { |
| 345 EXPECT_EQ(3U, all_sent_events().size()); |
| 346 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
| 347 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); |
| 348 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); |
| 349 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 350 } |
| 338 | 351 |
| 339 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 352 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 340 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 353 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
| 341 WebMouseWheelEvent::PhaseEnded, | 354 WebMouseWheelEvent::PhaseEnded, |
| 342 WebMouseWheelEvent::PhaseNone); | 355 WebMouseWheelEvent::PhaseNone); |
| 343 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 356 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 344 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 357 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 345 EXPECT_EQ(2U, all_sent_events().size()); | 358 if (scroll_latching_enabled_) { |
| 346 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 359 // ScrollEnd is not sent right away, a timer starts instead, |
| 347 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); | 360 // to see if a wheel event with momentumPhase arrives or not. |
| 348 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 361 EXPECT_EQ(0U, all_sent_events().size()); |
| 362 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 363 } else { |
| 364 EXPECT_EQ(2U, all_sent_events().size()); |
| 365 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
| 366 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); |
| 367 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 368 } |
| 349 | 369 |
| 350 // Send a double phase end; OSX does it consistently. | 370 // Send a double phase end; OSX does it consistently. |
| 351 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 371 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 352 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 372 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
| 353 WebMouseWheelEvent::PhaseEnded, | 373 WebMouseWheelEvent::PhaseEnded, |
| 354 WebMouseWheelEvent::PhaseNone); | 374 WebMouseWheelEvent::PhaseNone); |
| 355 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 375 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 356 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 376 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 357 EXPECT_EQ(0U, all_sent_events().size()); | 377 EXPECT_EQ(0U, all_sent_events().size()); |
| 358 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 378 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 359 | 379 |
| 360 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 380 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 361 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 381 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
| 362 WebMouseWheelEvent::PhaseNone, | 382 WebMouseWheelEvent::PhaseNone, |
| 363 WebMouseWheelEvent::PhaseBegan); | 383 WebMouseWheelEvent::PhaseBegan); |
| 364 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 384 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 365 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 385 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 366 EXPECT_EQ(3U, all_sent_events().size()); | 386 if (scroll_latching_enabled_) { |
| 367 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 387 // The timer stops and the pending GSE is sent right away before sending |
| 368 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 388 // the GSB. |flingMightHappenNext| is true for the sent GSE. |
| 369 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); | 389 EXPECT_EQ(3U, all_sent_events().size()); |
| 370 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 390 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(0)); |
| 391 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(1)); |
| 392 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(2)); |
| 393 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 394 } else { |
| 395 EXPECT_EQ(3U, all_sent_events().size()); |
| 396 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
| 397 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
| 398 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); |
| 399 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 400 } |
| 371 | 401 |
| 372 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 402 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 373 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 403 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
| 374 WebMouseWheelEvent::PhaseNone, | 404 WebMouseWheelEvent::PhaseNone, |
| 375 WebMouseWheelEvent::PhaseChanged); | 405 WebMouseWheelEvent::PhaseChanged); |
| 376 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 406 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 377 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 407 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 378 EXPECT_EQ(3U, all_sent_events().size()); | 408 if (scroll_latching_enabled_) { |
| 379 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 409 EXPECT_EQ(1U, all_sent_events().size()); |
| 380 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 410 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); |
| 381 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); | 411 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 382 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 412 } else { |
| 413 EXPECT_EQ(3U, all_sent_events().size()); |
| 414 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
| 415 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
| 416 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); |
| 417 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 418 } |
| 383 | 419 |
| 384 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 420 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 385 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 421 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
| 386 WebMouseWheelEvent::PhaseNone, | 422 WebMouseWheelEvent::PhaseNone, |
| 387 WebMouseWheelEvent::PhaseEnded); | 423 WebMouseWheelEvent::PhaseEnded); |
| 388 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 424 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 389 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 425 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 390 EXPECT_EQ(2U, all_sent_events().size()); | 426 if (scroll_latching_enabled_) { |
| 391 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 427 // MomentumPhase is ended, the scroll is done, and GSE is sent |
| 392 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); | 428 // immediately. |
| 393 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 429 EXPECT_EQ(1U, all_sent_events().size()); |
| 430 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(0)); |
| 431 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 432 } else { |
| 433 EXPECT_EQ(2U, all_sent_events().size()); |
| 434 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
| 435 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); |
| 436 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 437 } |
| 394 } | 438 } |
| 395 | 439 |
| 396 std::unique_ptr<MouseWheelEventQueue> queue_; | 440 std::unique_ptr<MouseWheelEventQueue> queue_; |
| 397 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; | 441 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; |
| 398 size_t acked_event_count_; | 442 size_t acked_event_count_; |
| 399 InputEventAckState last_acked_event_state_; | 443 InputEventAckState last_acked_event_state_; |
| 400 base::MessageLoopForUI message_loop_; | 444 base::MessageLoopForUI message_loop_; |
| 401 WebMouseWheelEvent last_acked_event_; | 445 WebMouseWheelEvent last_acked_event_; |
| 402 int64_t scroll_end_timeout_ms_; | 446 int64_t scroll_end_timeout_ms_; |
| 403 bool scroll_latching_enabled_; | 447 bool scroll_latching_enabled_; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 433 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 477 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 434 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 478 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 435 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 479 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
| 436 } | 480 } |
| 437 | 481 |
| 438 TEST_P(MouseWheelEventQueueTest, GestureSending) { | 482 TEST_P(MouseWheelEventQueueTest, GestureSending) { |
| 439 GestureSendingTest(false); | 483 GestureSendingTest(false); |
| 440 } | 484 } |
| 441 | 485 |
| 442 TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { | 486 TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { |
| 443 GestureSendingTest(false); | 487 GestureSendingTest(true); |
| 444 } | 488 } |
| 445 | 489 |
| 446 TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { | 490 TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { |
| 447 PhaseGestureSendingTest(false); | 491 PhaseGestureSendingTest(false); |
| 448 } | 492 } |
| 449 | 493 |
| 450 TEST_P(MouseWheelEventQueueTest, | 494 TEST_P(MouseWheelEventQueueTest, |
| 451 GestureSendingWithPhaseInformationPrecisePixels) { | 495 GestureSendingWithPhaseInformationPrecisePixels) { |
| 452 PhaseGestureSendingTest(true); | 496 PhaseGestureSendingTest(true); |
| 453 } | 497 } |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY); | 666 EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY); |
| 623 EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1), | 667 EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1), |
| 624 GetAndResetSentEventCount()); | 668 GetAndResetSentEventCount()); |
| 625 } | 669 } |
| 626 | 670 |
| 627 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, | 671 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, |
| 628 MouseWheelEventQueueTest, | 672 MouseWheelEventQueueTest, |
| 629 testing::Bool()); | 673 testing::Bool()); |
| 630 | 674 |
| 631 } // namespace content | 675 } // namespace content |
| OLD | NEW |