Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(767)

Side by Side Diff: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc

Issue 2486673008: Touchpad scroll latching enabled for Mac behind flag. (Closed)
Patch Set: merge conflicts resolved. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698