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

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

Powered by Google App Engine
This is Rietveld 408576698