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

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

Issue 2882443002: Tiimer based phase info generated for mouse wheel events. (Closed)
Patch Set: review comments addressed. Created 3 years, 7 months 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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 float y, 236 float y,
237 float global_x, 237 float global_x,
238 float global_y, 238 float global_y,
239 float dX, 239 float dX,
240 float dY, 240 float dY,
241 int modifiers, 241 int modifiers,
242 bool high_precision) { 242 bool high_precision) {
243 SendMouseWheel(x, y, global_x, global_y, dX, dY, modifiers, high_precision, 243 SendMouseWheel(x, y, global_x, global_y, dX, dY, modifiers, high_precision,
244 WebInputEvent::kRailsModeFree); 244 WebInputEvent::kRailsModeFree);
245 } 245 }
246 void SendMouseWheelWithPhase(float x,
247 float y,
248 float global_x,
249 float global_y,
250 float dX,
251 float dY,
252 int modifiers,
253 bool high_precision,
254 blink::WebMouseWheelEvent::Phase phase,
255 blink::WebMouseWheelEvent::Phase momentum_phase,
256 WebInputEvent::RailsMode rails_mode) {
257 WebMouseWheelEvent event = SyntheticWebMouseWheelEventBuilder::Build(
258 x, y, global_x, global_y, dX, dY, modifiers, high_precision);
259 event.phase = phase;
260 event.momentum_phase = momentum_phase;
261 event.rails_mode = rails_mode;
262 queue_->QueueEvent(MouseWheelEventWithLatencyInfo(event));
263 }
246 void SendMouseWheelWithPhase( 264 void SendMouseWheelWithPhase(
247 float x, 265 float x,
248 float y, 266 float y,
249 float global_x, 267 float global_x,
250 float global_y, 268 float global_y,
251 float dX, 269 float dX,
252 float dY, 270 float dY,
253 int modifiers, 271 int modifiers,
254 bool high_precision, 272 bool high_precision,
255 blink::WebMouseWheelEvent::Phase phase, 273 blink::WebMouseWheelEvent::Phase phase,
256 blink::WebMouseWheelEvent::Phase momentum_phase) { 274 blink::WebMouseWheelEvent::Phase momentum_phase) {
257 WebMouseWheelEvent event = SyntheticWebMouseWheelEventBuilder::Build( 275 SendMouseWheelWithPhase(x, y, global_x, global_y, dX, dY, modifiers,
258 x, y, global_x, global_y, dX, dY, modifiers, high_precision); 276 high_precision, phase, momentum_phase,
259 event.phase = phase; 277 WebInputEvent::kRailsModeFree);
260 event.momentum_phase = momentum_phase; 278 }
261 queue_->QueueEvent(MouseWheelEventWithLatencyInfo(event)); 279
280 void SendMouseWheelPossiblyIncludingPhase(
281 bool ignore_phase,
282 float x,
283 float y,
284 float global_x,
285 float global_y,
286 float dX,
287 float dY,
288 int modifiers,
289 bool high_precision,
290 blink::WebMouseWheelEvent::Phase phase,
291 blink::WebMouseWheelEvent::Phase momentum_phase,
292 WebInputEvent::RailsMode rails_mode) {
293 if (ignore_phase) {
294 SendMouseWheel(x, y, global_x, global_y, dX, dY, modifiers,
295 high_precision, rails_mode);
296 } else {
297 SendMouseWheelWithPhase(x, y, global_x, global_y, dX, dY, modifiers,
298 high_precision, phase, momentum_phase,
299 rails_mode);
300 }
301 }
302
303 void SendMouseWheelPossiblyIncludingPhase(
304 bool ignore_phase,
305 float x,
306 float y,
307 float global_x,
308 float global_y,
309 float dX,
310 float dY,
311 int modifiers,
312 bool high_precision,
313 blink::WebMouseWheelEvent::Phase phase,
314 blink::WebMouseWheelEvent::Phase momentum_phase) {
315 SendMouseWheelPossiblyIncludingPhase(
316 ignore_phase, x, y, global_x, global_y, dX, dY, modifiers,
317 high_precision, phase, momentum_phase, WebInputEvent::kRailsModeFree);
262 } 318 }
263 319
264 void SendGestureEvent(WebInputEvent::Type type) { 320 void SendGestureEvent(WebInputEvent::Type type) {
265 WebGestureEvent event(type, WebInputEvent::kNoModifiers, 321 WebGestureEvent event(type, WebInputEvent::kNoModifiers,
266 ui::EventTimeStampToSeconds(ui::EventTimeForNow())); 322 ui::EventTimeStampToSeconds(ui::EventTimeForNow()));
267 event.source_device = blink::kWebGestureDeviceTouchscreen; 323 event.source_device = blink::kWebGestureDeviceTouchscreen;
268 queue_->OnGestureScrollEvent( 324 queue_->OnGestureScrollEvent(
269 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); 325 GestureEventWithLatencyInfo(event, ui::LatencyInfo()));
270 } 326 }
271 327
272 static void RunTasksAndWait(base::TimeDelta delay) { 328 static void RunTasksAndWait(base::TimeDelta delay) {
273 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 329 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
274 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), delay); 330 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), delay);
275 base::RunLoop().Run(); 331 base::RunLoop().Run();
276 } 332 }
277 333
278 void GestureSendingTest(bool high_precision) { 334 void GestureSendingTest(bool high_precision) {
279 const WebGestureEvent::ScrollUnits scroll_units = 335 const WebGestureEvent::ScrollUnits scroll_units =
280 high_precision ? WebGestureEvent::kPrecisePixels 336 high_precision ? WebGestureEvent::kPrecisePixels
281 : WebGestureEvent::kPixels; 337 : WebGestureEvent::kPixels;
282 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 338 SendMouseWheelPossiblyIncludingPhase(
283 kWheelScrollGlobalY, 1, 1, 0, high_precision); 339 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
340 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, high_precision,
341 WebMouseWheelEvent::kPhaseBegan, WebMouseWheelEvent::kPhaseNone);
284 EXPECT_EQ(0U, queued_event_count()); 342 EXPECT_EQ(0U, queued_event_count());
285 EXPECT_TRUE(event_in_flight()); 343 EXPECT_TRUE(event_in_flight());
286 EXPECT_EQ(1U, GetAndResetSentEventCount()); 344 EXPECT_EQ(1U, GetAndResetSentEventCount());
287 345
288 // The second mouse wheel should not be sent since one is already in 346 // The second mouse wheel should not be sent since one is already in
289 // queue. 347 // queue.
290 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 348 SendMouseWheelPossiblyIncludingPhase(
291 kWheelScrollGlobalY, 5, 5, 0, high_precision); 349 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
350 kWheelScrollGlobalX, kWheelScrollGlobalY, 5, 5, 0, high_precision,
351 WebMouseWheelEvent::kPhaseChanged, WebMouseWheelEvent::kPhaseNone);
292 EXPECT_EQ(1U, queued_event_count()); 352 EXPECT_EQ(1U, queued_event_count());
293 EXPECT_TRUE(event_in_flight()); 353 EXPECT_TRUE(event_in_flight());
294 EXPECT_EQ(0U, GetAndResetSentEventCount()); 354 EXPECT_EQ(0U, GetAndResetSentEventCount());
295 355
296 // Receive an ACK for the mouse wheel event and release the next 356 // Receive an ACK for the mouse wheel event and release the next
297 // mouse wheel event. 357 // mouse wheel event.
298 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 358 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
299 EXPECT_EQ(0U, queued_event_count()); 359 EXPECT_EQ(0U, queued_event_count());
300 EXPECT_TRUE(event_in_flight()); 360 EXPECT_TRUE(event_in_flight());
301 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 361 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
302 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 362 EXPECT_EQ(1U, GetAndResetAckedEventCount());
303 if (scroll_latching_enabled_) { 363 if (scroll_latching_enabled_) {
304 EXPECT_EQ(3U, all_sent_events().size()); 364 EXPECT_EQ(3U, all_sent_events().size());
305 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 365 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0));
306 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 366 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
307 EXPECT_MOUSE_WHEEL(sent_input_event(2)); 367 EXPECT_MOUSE_WHEEL(sent_input_event(2));
308 EXPECT_EQ(3U, GetAndResetSentEventCount()); 368 EXPECT_EQ(3U, GetAndResetSentEventCount());
309
310 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
311 EXPECT_EQ(1U, all_sent_events().size());
312 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
313 } else { 369 } else {
314 EXPECT_EQ(4U, all_sent_events().size()); 370 EXPECT_EQ(4U, all_sent_events().size());
315 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 371 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
316 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 372 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
317 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2)); 373 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
318 EXPECT_MOUSE_WHEEL(sent_input_event(3)); 374 EXPECT_MOUSE_WHEEL(sent_input_event(3));
319 EXPECT_EQ(4U, GetAndResetSentEventCount()); 375 EXPECT_EQ(4U, GetAndResetSentEventCount());
320 } 376 }
321 } 377 }
322 378
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0)); 411 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0));
356 EXPECT_EQ(1U, GetAndResetSentEventCount()); 412 EXPECT_EQ(1U, GetAndResetSentEventCount());
357 } else { 413 } else {
358 EXPECT_EQ(3U, all_sent_events().size()); 414 EXPECT_EQ(3U, all_sent_events().size());
359 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 415 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
360 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); 416 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
361 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); 417 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2));
362 EXPECT_EQ(3U, GetAndResetSentEventCount()); 418 EXPECT_EQ(3U, GetAndResetSentEventCount());
363 } 419 }
364 420
365 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 421 // When wheel scroll latching is enabled no wheel event with phase =
366 kWheelScrollGlobalY, 0, 0, 0, high_precision, 422 // |kPhaseEnded| will be sent before a wheel event with momentum_phase =
367 WebMouseWheelEvent::kPhaseEnded, 423 // |kPhaseBegan|.
368 WebMouseWheelEvent::kPhaseNone); 424 if (!scroll_latching_enabled_) {
369 EXPECT_EQ(1U, GetAndResetSentEventCount()); 425 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
370 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 426 kWheelScrollGlobalY, 0, 0, 0, high_precision,
371 if (scroll_latching_enabled_) { 427 WebMouseWheelEvent::kPhaseEnded,
372 // ScrollEnd is not sent right away, a timer starts instead, 428 WebMouseWheelEvent::kPhaseNone);
373 // to see if a wheel event with momentumPhase arrives or not. 429 EXPECT_EQ(1U, GetAndResetSentEventCount());
374 EXPECT_EQ(0U, all_sent_events().size()); 430 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
375 EXPECT_EQ(0U, GetAndResetSentEventCount());
376 } else {
377 EXPECT_EQ(2U, all_sent_events().size()); 431 EXPECT_EQ(2U, all_sent_events().size());
378 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 432 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
379 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); 433 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1));
380 EXPECT_EQ(2U, GetAndResetSentEventCount()); 434 EXPECT_EQ(2U, GetAndResetSentEventCount());
435
436 // Send a double phase end; OSX does it consistently.
437 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
438 kWheelScrollGlobalY, 0, 0, 0, high_precision,
439 WebMouseWheelEvent::kPhaseEnded,
440 WebMouseWheelEvent::kPhaseNone);
441 EXPECT_EQ(1U, GetAndResetSentEventCount());
442 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
443 EXPECT_EQ(0U, all_sent_events().size());
444 EXPECT_EQ(0U, GetAndResetSentEventCount());
381 } 445 }
382 446
383 // Send a double phase end; OSX does it consistently.
384 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
385 kWheelScrollGlobalY, 0, 0, 0, high_precision,
386 WebMouseWheelEvent::kPhaseEnded,
387 WebMouseWheelEvent::kPhaseNone);
388 EXPECT_EQ(1U, GetAndResetSentEventCount());
389 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
390 EXPECT_EQ(0U, all_sent_events().size());
391 EXPECT_EQ(0U, GetAndResetSentEventCount());
392
393 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 447 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
394 kWheelScrollGlobalY, 5, 5, 0, high_precision, 448 kWheelScrollGlobalY, 5, 5, 0, high_precision,
395 WebMouseWheelEvent::kPhaseNone, 449 WebMouseWheelEvent::kPhaseNone,
396 WebMouseWheelEvent::kPhaseBegan); 450 WebMouseWheelEvent::kPhaseBegan);
397 EXPECT_EQ(1U, GetAndResetSentEventCount()); 451 EXPECT_EQ(1U, GetAndResetSentEventCount());
398 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 452 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
399 if (scroll_latching_enabled_) { 453 if (scroll_latching_enabled_) {
400 // A fling has started, no ScrollEnd/ScrollBegin is sent. 454 // A fling has started, no ScrollEnd/ScrollBegin is sent.
401 EXPECT_EQ(1U, all_sent_events().size()); 455 EXPECT_EQ(1U, all_sent_events().size());
402 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); 456 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0));
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 PhaseGestureSendingTest(false); 555 PhaseGestureSendingTest(false);
502 } 556 }
503 557
504 TEST_P(MouseWheelEventQueueTest, 558 TEST_P(MouseWheelEventQueueTest,
505 GestureSendingWithPhaseInformationPrecisePixels) { 559 GestureSendingWithPhaseInformationPrecisePixels) {
506 PhaseGestureSendingTest(true); 560 PhaseGestureSendingTest(true);
507 } 561 }
508 562
509 TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) { 563 TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
510 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels; 564 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels;
511 565 SendMouseWheelPossiblyIncludingPhase(
512 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 566 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
513 kWheelScrollGlobalY, 1, 1, 0, false); 567 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, false,
568 WebMouseWheelEvent::kPhaseBegan, WebMouseWheelEvent::kPhaseNone);
514 EXPECT_EQ(0U, queued_event_count()); 569 EXPECT_EQ(0U, queued_event_count());
515 EXPECT_TRUE(event_in_flight()); 570 EXPECT_TRUE(event_in_flight());
516 EXPECT_EQ(1U, GetAndResetSentEventCount()); 571 EXPECT_EQ(1U, GetAndResetSentEventCount());
517 572
518 // Receive an ACK for the mouse wheel event. 573 // Receive an ACK for the mouse wheel event.
519 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 574 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
520 EXPECT_EQ(0U, queued_event_count()); 575 EXPECT_EQ(0U, queued_event_count());
521 EXPECT_FALSE(event_in_flight()); 576 EXPECT_FALSE(event_in_flight());
522 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 577 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
523 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 578 EXPECT_EQ(1U, GetAndResetAckedEventCount());
524 if (scroll_latching_enabled_) { 579 if (scroll_latching_enabled_) {
525 EXPECT_EQ(2U, all_sent_events().size()); 580 EXPECT_EQ(2U, all_sent_events().size());
526 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 581 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0));
527 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 582 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
528 EXPECT_EQ(2U, GetAndResetSentEventCount()); 583 EXPECT_EQ(2U, GetAndResetSentEventCount());
529 } else { 584 } else {
530 EXPECT_EQ(3U, all_sent_events().size()); 585 EXPECT_EQ(3U, all_sent_events().size());
531 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 586 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
532 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 587 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
533 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2)); 588 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
534 EXPECT_EQ(3U, GetAndResetSentEventCount()); 589 EXPECT_EQ(3U, GetAndResetSentEventCount());
535 } 590 }
536 591
592 // When wheel scroll latching is enabled and a touch based GSB arrives in the
593 // middle of wheel scrolling sequence, a synthetic wheel event with zero
594 // deltas and phase = |kPhaseEnded| will be sent.
595 if (scroll_latching_enabled_) {
596 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
597 kWheelScrollGlobalY, 0, 0, 0, false,
598 WebMouseWheelEvent::kPhaseEnded,
599 WebMouseWheelEvent::kPhaseNone);
600 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
601 EXPECT_EQ(1U, GetAndResetAckedEventCount());
602 }
537 // Ensure that a gesture scroll begin terminates the current scroll event. 603 // Ensure that a gesture scroll begin terminates the current scroll event.
538 SendGestureEvent(WebInputEvent::kGestureScrollBegin); 604 SendGestureEvent(WebInputEvent::kGestureScrollBegin);
605
539 if (scroll_latching_enabled_) { 606 if (scroll_latching_enabled_) {
540 EXPECT_EQ(1U, all_sent_events().size()); 607 EXPECT_EQ(2U, all_sent_events().size());
541 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); 608 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1));
542 EXPECT_EQ(1U, GetAndResetSentEventCount()); 609 EXPECT_EQ(2U, GetAndResetSentEventCount());
543 } else { 610 } else {
544 // ScrollEnd has already been sent. 611 // ScrollEnd has already been sent.
545 EXPECT_EQ(0U, all_sent_events().size()); 612 EXPECT_EQ(0U, all_sent_events().size());
546 } 613 }
547 614
548 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 615 SendMouseWheelPossiblyIncludingPhase(
549 kWheelScrollGlobalY, 1, 1, 0, false); 616 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
617 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, false,
618 WebMouseWheelEvent::kPhaseBegan, WebMouseWheelEvent::kPhaseNone);
619
550 EXPECT_EQ(0U, queued_event_count()); 620 EXPECT_EQ(0U, queued_event_count());
551 EXPECT_TRUE(event_in_flight()); 621 EXPECT_TRUE(event_in_flight());
552 EXPECT_EQ(1U, GetAndResetSentEventCount()); 622 EXPECT_EQ(1U, GetAndResetSentEventCount());
553 623
554 // New mouse wheel events won't cause gestures because a scroll 624 // New mouse wheel events won't cause gestures because a scroll
555 // is already in progress by another device. 625 // is already in progress by another device.
556 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 626 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
557 EXPECT_EQ(0U, queued_event_count()); 627 EXPECT_EQ(0U, queued_event_count());
558 EXPECT_FALSE(event_in_flight()); 628 EXPECT_FALSE(event_in_flight());
559 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 629 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
560 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 630 EXPECT_EQ(1U, GetAndResetAckedEventCount());
561 EXPECT_EQ(0U, all_sent_events().size()); 631 EXPECT_EQ(0U, all_sent_events().size());
562 632
563 SendGestureEvent(WebInputEvent::kGestureScrollEnd); 633 SendGestureEvent(WebInputEvent::kGestureScrollEnd);
564 EXPECT_EQ(0U, all_sent_events().size()); 634 EXPECT_EQ(0U, all_sent_events().size());
565 635
566 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 636 SendMouseWheelPossiblyIncludingPhase(
567 kWheelScrollGlobalY, 1, 1, 0, false); 637 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
638 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, false,
639 WebMouseWheelEvent::kPhaseBegan, WebMouseWheelEvent::kPhaseNone);
640
568 EXPECT_EQ(0U, queued_event_count()); 641 EXPECT_EQ(0U, queued_event_count());
569 EXPECT_TRUE(event_in_flight()); 642 EXPECT_TRUE(event_in_flight());
570 EXPECT_EQ(1U, GetAndResetSentEventCount()); 643 EXPECT_EQ(1U, GetAndResetSentEventCount());
571 644
572 // Receive an ACK for the mouse wheel event. 645 // Receive an ACK for the mouse wheel event.
573 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 646 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
574 EXPECT_EQ(0U, queued_event_count()); 647 EXPECT_EQ(0U, queued_event_count());
575 EXPECT_FALSE(event_in_flight()); 648 EXPECT_FALSE(event_in_flight());
576 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 649 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
577 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 650 EXPECT_EQ(1U, GetAndResetAckedEventCount());
578 if (scroll_latching_enabled_) { 651 if (scroll_latching_enabled_) {
579 EXPECT_EQ(2U, all_sent_events().size()); 652 EXPECT_EQ(2U, all_sent_events().size());
580 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 653 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0));
581 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 654 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
582 EXPECT_EQ(2U, GetAndResetSentEventCount()); 655 EXPECT_EQ(2U, GetAndResetSentEventCount());
583 } else { 656 } else {
584 EXPECT_EQ(3U, all_sent_events().size()); 657 EXPECT_EQ(3U, all_sent_events().size());
585 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 658 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
586 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 659 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
587 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2)); 660 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
588 EXPECT_EQ(3U, GetAndResetSentEventCount()); 661 EXPECT_EQ(3U, GetAndResetSentEventCount());
589 } 662 }
590 } 663 }
591 664
592 TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) { 665 TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
593 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels; 666 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels;
594 667
595 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 668 SendMouseWheelPossiblyIncludingPhase(
596 kWheelScrollGlobalY, 1, 1, 0, false, 669 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
597 WebInputEvent::kRailsModeHorizontal); 670 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, false,
671 WebMouseWheelEvent::kPhaseBegan, WebMouseWheelEvent::kPhaseNone,
672 WebInputEvent::kRailsModeHorizontal);
598 EXPECT_EQ(0U, queued_event_count()); 673 EXPECT_EQ(0U, queued_event_count());
599 EXPECT_TRUE(event_in_flight()); 674 EXPECT_TRUE(event_in_flight());
600 EXPECT_EQ(1U, GetAndResetSentEventCount()); 675 EXPECT_EQ(1U, GetAndResetSentEventCount());
601 676
602 // Receive an ACK for the mouse wheel event. 677 // Receive an ACK for the mouse wheel event.
603 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 678 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
604 EXPECT_EQ(0U, queued_event_count()); 679 EXPECT_EQ(0U, queued_event_count());
605 EXPECT_FALSE(event_in_flight()); 680 EXPECT_FALSE(event_in_flight());
606 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 681 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
607 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 682 EXPECT_EQ(1U, GetAndResetAckedEventCount());
608 if (scroll_latching_enabled_) { 683 if (scroll_latching_enabled_) {
609 EXPECT_EQ(2U, all_sent_events().size()); 684 EXPECT_EQ(2U, all_sent_events().size());
610 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 685 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0));
611 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 686 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
612 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_x); 687 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_x);
613 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_y); 688 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_y);
614 EXPECT_EQ(2U, GetAndResetSentEventCount()); 689 EXPECT_EQ(2U, GetAndResetSentEventCount());
615 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
616 EXPECT_EQ(1U, all_sent_events().size());
617 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
618 EXPECT_EQ(1U, GetAndResetSentEventCount());
619 } else { 690 } else {
620 EXPECT_EQ(3U, all_sent_events().size()); 691 EXPECT_EQ(3U, all_sent_events().size());
621 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 692 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
622 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 693 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
623 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2)); 694 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
624 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_x); 695 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_x);
625 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_y); 696 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_y);
626 EXPECT_EQ(3U, GetAndResetSentEventCount()); 697 EXPECT_EQ(3U, GetAndResetSentEventCount());
627 } 698 }
699 SendMouseWheelPossiblyIncludingPhase(
700 !scroll_latching_enabled_, kWheelScrollX, kWheelScrollY,
701 kWheelScrollGlobalX, kWheelScrollGlobalY, 1, 1, 0, false,
702 WebMouseWheelEvent::kPhaseChanged, WebMouseWheelEvent::kPhaseNone,
703 WebInputEvent::kRailsModeVertical);
628 704
629 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
630 kWheelScrollGlobalY, 1, 1, 0, false,
631 WebInputEvent::kRailsModeVertical);
632 EXPECT_EQ(0U, queued_event_count()); 705 EXPECT_EQ(0U, queued_event_count());
633 EXPECT_TRUE(event_in_flight()); 706 EXPECT_TRUE(event_in_flight());
634 EXPECT_EQ(1U, GetAndResetSentEventCount()); 707 EXPECT_EQ(1U, GetAndResetSentEventCount());
635 708
636 // Receive an ACK for the mouse wheel event. 709 // Receive an ACK for the mouse wheel event.
637 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 710 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
638 EXPECT_EQ(0U, queued_event_count()); 711 EXPECT_EQ(0U, queued_event_count());
639 EXPECT_FALSE(event_in_flight()); 712 EXPECT_FALSE(event_in_flight());
640 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 713 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
641 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 714 EXPECT_EQ(1U, GetAndResetAckedEventCount());
715 size_t scroll_update_index = 0;
642 if (scroll_latching_enabled_) { 716 if (scroll_latching_enabled_) {
643 EXPECT_EQ(2U, all_sent_events().size()); 717 EXPECT_EQ(1U, all_sent_events().size());
644 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 718 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0));
645 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
646 } else { 719 } else {
647 EXPECT_EQ(3U, all_sent_events().size()); 720 EXPECT_EQ(3U, all_sent_events().size());
648 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 721 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
649 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 722 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
650 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2)); 723 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
724 scroll_update_index = 1;
651 } 725 }
652 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_x); 726 EXPECT_EQ(
653 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_y); 727 0U, sent_gesture_event(scroll_update_index)->data.scroll_update.delta_x);
728 EXPECT_EQ(
729 1U, sent_gesture_event(scroll_update_index)->data.scroll_update.delta_y);
654 if (scroll_latching_enabled_) 730 if (scroll_latching_enabled_)
655 EXPECT_EQ(2U, GetAndResetSentEventCount()); 731 EXPECT_EQ(1U, GetAndResetSentEventCount());
656 else 732 else
657 EXPECT_EQ(3U, GetAndResetSentEventCount()); 733 EXPECT_EQ(3U, GetAndResetSentEventCount());
658 } 734 }
659 735
660 TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) { 736 TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
661 if (!scroll_latching_enabled_) 737 if (!scroll_latching_enabled_)
662 return; 738 return;
663 739
664 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels; 740 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::kPixels;
665 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 741 SendMouseWheelWithPhase(
666 kWheelScrollGlobalY, 1, 1, 0, false, 742 kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 1,
667 WebInputEvent::kRailsModeVertical); 743 1, 0, false, WebMouseWheelEvent::kPhaseBegan,
744 WebMouseWheelEvent::kPhaseNone, WebInputEvent::kRailsModeVertical);
668 EXPECT_EQ(0U, queued_event_count()); 745 EXPECT_EQ(0U, queued_event_count());
669 EXPECT_TRUE(event_in_flight()); 746 EXPECT_TRUE(event_in_flight());
670 EXPECT_EQ(1U, GetAndResetSentEventCount()); 747 EXPECT_EQ(1U, GetAndResetSentEventCount());
671 748
672 // Receive an ACK for the mouse wheel event. 749 // Receive an ACK for the mouse wheel event.
673 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 750 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
674 EXPECT_EQ(0U, queued_event_count()); 751 EXPECT_EQ(0U, queued_event_count());
675 EXPECT_FALSE(event_in_flight()); 752 EXPECT_FALSE(event_in_flight());
676 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 753 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
677 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 754 EXPECT_EQ(1U, GetAndResetAckedEventCount());
678 EXPECT_EQ(2U, all_sent_events().size()); 755 EXPECT_EQ(2U, all_sent_events().size());
679 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); 756 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0));
680 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); 757 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1));
681 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_x); 758 EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_x);
682 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_y); 759 EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_y);
683 EXPECT_EQ(2U, GetAndResetSentEventCount()); 760 EXPECT_EQ(2U, GetAndResetSentEventCount());
684 761
685 RunTasksAndWait(DefaultScrollEndTimeoutDelay() / 2); 762 SendMouseWheelWithPhase(
686 EXPECT_EQ(0U, GetAndResetSentEventCount()); 763 kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 1,
687 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, 764 1, 0, false, WebMouseWheelEvent::kPhaseChanged,
688 kWheelScrollGlobalY, 1, 1, 0, false, 765 WebMouseWheelEvent::kPhaseNone, WebInputEvent::kRailsModeVertical);
689 WebInputEvent::kRailsModeVertical);
690 EXPECT_EQ(0U, queued_event_count()); 766 EXPECT_EQ(0U, queued_event_count());
691 EXPECT_TRUE(event_in_flight()); 767 EXPECT_TRUE(event_in_flight());
692 EXPECT_EQ(1U, GetAndResetSentEventCount()); 768 EXPECT_EQ(1U, GetAndResetSentEventCount());
693 769
694 // Receive an ACK for the mouse wheel event. 770 // Receive an ACK for the mouse wheel event.
695 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 771 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
696 EXPECT_EQ(0U, queued_event_count()); 772 EXPECT_EQ(0U, queued_event_count());
697 EXPECT_FALSE(event_in_flight()); 773 EXPECT_FALSE(event_in_flight());
698 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType()); 774 EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
699 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 775 EXPECT_EQ(1U, GetAndResetAckedEventCount());
700 776
701 // Scroll latching: no new scroll begin expected. 777 // Scroll latching: no new scroll begin expected.
702 EXPECT_EQ(1U, all_sent_events().size()); 778 EXPECT_EQ(1U, all_sent_events().size());
703 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); 779 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0));
704 EXPECT_EQ(0U, sent_gesture_event(0)->data.scroll_update.delta_x); 780 EXPECT_EQ(0U, sent_gesture_event(0)->data.scroll_update.delta_x);
705 EXPECT_EQ(1U, sent_gesture_event(0)->data.scroll_update.delta_y); 781 EXPECT_EQ(1U, sent_gesture_event(0)->data.scroll_update.delta_y);
706 EXPECT_EQ(1U, GetAndResetSentEventCount()); 782 EXPECT_EQ(1U, GetAndResetSentEventCount());
707 } 783 }
708 784
709 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, 785 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests,
710 MouseWheelEventQueueTest, 786 MouseWheelEventQueueTest,
711 testing::Bool()); 787 testing::Bool());
712 788
713 } // namespace content 789 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698