| 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 14 matching lines...) Expand all  Loading... | 
|   25 using blink::WebMouseWheelEvent; |   25 using blink::WebMouseWheelEvent; | 
|   26  |   26  | 
|   27 namespace content { |   27 namespace content { | 
|   28 namespace { |   28 namespace { | 
|   29  |   29  | 
|   30 const float kWheelScrollX = 10; |   30 const float kWheelScrollX = 10; | 
|   31 const float kWheelScrollY = 12; |   31 const float kWheelScrollY = 12; | 
|   32 const float kWheelScrollGlobalX = 50; |   32 const float kWheelScrollGlobalX = 50; | 
|   33 const float kWheelScrollGlobalY = 72; |   33 const float kWheelScrollGlobalY = 72; | 
|   34  |   34  | 
|   35 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event)              \ |   35 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event)                \ | 
|   36   EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \ |   36   EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type()); \ | 
|   37   EXPECT_EQ(kWheelScrollX, event->x);                        \ |   37   EXPECT_EQ(kWheelScrollX, event->x);                          \ | 
|   38   EXPECT_EQ(kWheelScrollY, event->y);                        \ |   38   EXPECT_EQ(kWheelScrollY, event->y);                          \ | 
|   39   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);            \ |   39   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);              \ | 
|   40   EXPECT_EQ(kWheelScrollGlobalY, event->globalY);            \ |   40   EXPECT_EQ(kWheelScrollGlobalY, event->globalY);              \ | 
|   41   EXPECT_EQ(scroll_units, event->data.scrollBegin.deltaHintUnits); |   41   EXPECT_EQ(scroll_units, event->data.scrollBegin.deltaHintUnits); | 
|   42  |   42  | 
|   43 #define EXPECT_GESTURE_SCROLL_BEGIN(event)         \ |   43 #define EXPECT_GESTURE_SCROLL_BEGIN(event)         \ | 
|   44   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);         \ |   44   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);         \ | 
|   45   EXPECT_FALSE(event->data.scrollBegin.synthetic); \ |   45   EXPECT_FALSE(event->data.scrollBegin.synthetic); \ | 
|   46   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ |   46   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ | 
|   47             event->data.scrollBegin.inertialPhase); |   47             event->data.scrollBegin.inertialPhase); | 
|   48  |   48  | 
|   49 #define EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(event) \ |   49 #define EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(event) \ | 
|   50   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);            \ |   50   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);            \ | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|   64   EXPECT_EQ(WebGestureEvent::MomentumPhase,         \ |   64   EXPECT_EQ(WebGestureEvent::MomentumPhase,         \ | 
|   65             event->data.scrollBegin.inertialPhase); |   65             event->data.scrollBegin.inertialPhase); | 
|   66  |   66  | 
|   67 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ |   67 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ | 
|   68   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                    \ |   68   EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event);                    \ | 
|   69   EXPECT_TRUE(event->data.scrollBegin.synthetic);             \ |   69   EXPECT_TRUE(event->data.scrollBegin.synthetic);             \ | 
|   70   EXPECT_EQ(WebGestureEvent::MomentumPhase,                   \ |   70   EXPECT_EQ(WebGestureEvent::MomentumPhase,                   \ | 
|   71             event->data.scrollBegin.inertialPhase); |   71             event->data.scrollBegin.inertialPhase); | 
|   72  |   72  | 
|   73 #define EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event)                \ |   73 #define EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event)                \ | 
|   74   EXPECT_EQ(WebInputEvent::GestureScrollUpdate, event->type);   \ |   74   EXPECT_EQ(WebInputEvent::GestureScrollUpdate, event->type()); \ | 
|   75   EXPECT_EQ(scroll_units, event->data.scrollUpdate.deltaUnits); \ |   75   EXPECT_EQ(scroll_units, event->data.scrollUpdate.deltaUnits); \ | 
|   76   EXPECT_EQ(kWheelScrollX, event->x);                           \ |   76   EXPECT_EQ(kWheelScrollX, event->x);                           \ | 
|   77   EXPECT_EQ(kWheelScrollY, event->y);                           \ |   77   EXPECT_EQ(kWheelScrollY, event->y);                           \ | 
|   78   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);               \ |   78   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);               \ | 
|   79   EXPECT_EQ(kWheelScrollGlobalY, event->globalY); |   79   EXPECT_EQ(kWheelScrollGlobalY, event->globalY); | 
|   80  |   80  | 
|   81 #define EXPECT_GESTURE_SCROLL_UPDATE(event)        \ |   81 #define EXPECT_GESTURE_SCROLL_UPDATE(event)        \ | 
|   82   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);        \ |   82   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);        \ | 
|   83   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ |   83   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ | 
|   84             event->data.scrollUpdate.inertialPhase); |   84             event->data.scrollUpdate.inertialPhase); | 
|   85  |   85  | 
|   86 #define EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(event) \ |   86 #define EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(event) \ | 
|   87   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);            \ |   87   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);            \ | 
|   88   EXPECT_EQ(WebGestureEvent::NonMomentumPhase,         \ |   88   EXPECT_EQ(WebGestureEvent::NonMomentumPhase,         \ | 
|   89             event->data.scrollUpdate.inertialPhase); |   89             event->data.scrollUpdate.inertialPhase); | 
|   90  |   90  | 
|   91 #define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event) \ |   91 #define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event) \ | 
|   92   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);          \ |   92   EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event);          \ | 
|   93   EXPECT_EQ(WebGestureEvent::MomentumPhase,          \ |   93   EXPECT_EQ(WebGestureEvent::MomentumPhase,          \ | 
|   94             event->data.scrollUpdate.inertialPhase); |   94             event->data.scrollUpdate.inertialPhase); | 
|   95  |   95  | 
|   96 #define EXPECT_GESTURE_SCROLL_END_IMPL(event)                \ |   96 #define EXPECT_GESTURE_SCROLL_END_IMPL(event)                \ | 
|   97   EXPECT_EQ(WebInputEvent::GestureScrollEnd, event->type);   \ |   97   EXPECT_EQ(WebInputEvent::GestureScrollEnd, event->type()); \ | 
|   98   EXPECT_EQ(scroll_units, event->data.scrollEnd.deltaUnits); \ |   98   EXPECT_EQ(scroll_units, event->data.scrollEnd.deltaUnits); \ | 
|   99   EXPECT_EQ(kWheelScrollX, event->x);                        \ |   99   EXPECT_EQ(kWheelScrollX, event->x);                        \ | 
|  100   EXPECT_EQ(kWheelScrollY, event->y);                        \ |  100   EXPECT_EQ(kWheelScrollY, event->y);                        \ | 
|  101   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);            \ |  101   EXPECT_EQ(kWheelScrollGlobalX, event->globalX);            \ | 
|  102   EXPECT_EQ(kWheelScrollGlobalY, event->globalY); |  102   EXPECT_EQ(kWheelScrollGlobalY, event->globalY); | 
|  103  |  103  | 
|  104 #define EXPECT_GESTURE_SCROLL_END(event)           \ |  104 #define EXPECT_GESTURE_SCROLL_END(event)           \ | 
|  105   EXPECT_GESTURE_SCROLL_END_IMPL(event);           \ |  105   EXPECT_GESTURE_SCROLL_END_IMPL(event);           \ | 
|  106   EXPECT_FALSE(event->data.scrollEnd.synthetic);   \ |  106   EXPECT_FALSE(event->data.scrollEnd.synthetic);   \ | 
|  107   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ |  107   EXPECT_EQ(WebGestureEvent::UnknownMomentumPhase, \ | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  125   EXPECT_EQ(WebGestureEvent::MomentumPhase,       \ |  125   EXPECT_EQ(WebGestureEvent::MomentumPhase,       \ | 
|  126             event->data.scrollEnd.inertialPhase); |  126             event->data.scrollEnd.inertialPhase); | 
|  127  |  127  | 
|  128 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(event) \ |  128 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(event) \ | 
|  129   EXPECT_GESTURE_SCROLL_END_IMPL(event);                    \ |  129   EXPECT_GESTURE_SCROLL_END_IMPL(event);                    \ | 
|  130   EXPECT_TRUE(event->data.scrollEnd.synthetic);             \ |  130   EXPECT_TRUE(event->data.scrollEnd.synthetic);             \ | 
|  131   EXPECT_EQ(WebGestureEvent::MomentumPhase,                 \ |  131   EXPECT_EQ(WebGestureEvent::MomentumPhase,                 \ | 
|  132             event->data.scrollEnd.inertialPhase); |  132             event->data.scrollEnd.inertialPhase); | 
|  133  |  133  | 
|  134 #define EXPECT_MOUSE_WHEEL(event) \ |  134 #define EXPECT_MOUSE_WHEEL(event) \ | 
|  135   EXPECT_EQ(WebInputEvent::MouseWheel, event->type); |  135   EXPECT_EQ(WebInputEvent::MouseWheel, event->type()); | 
|  136  |  136  | 
|  137 }  // namespace |  137 }  // namespace | 
|  138  |  138  | 
|  139 class MouseWheelEventQueueTest : public testing::TestWithParam<bool>, |  139 class MouseWheelEventQueueTest : public testing::TestWithParam<bool>, | 
|  140                                  public MouseWheelEventQueueClient { |  140                                  public MouseWheelEventQueueClient { | 
|  141  public: |  141  public: | 
|  142   MouseWheelEventQueueTest() |  142   MouseWheelEventQueueTest() | 
|  143       : acked_event_count_(0), |  143       : acked_event_count_(0), | 
|  144         last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { |  144         last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { | 
|  145     scroll_latching_enabled_ = GetParam(); |  145     scroll_latching_enabled_ = GetParam(); | 
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  288                    kWheelScrollGlobalY, 5, 5, 0, high_precision); |  288                    kWheelScrollGlobalY, 5, 5, 0, high_precision); | 
|  289     EXPECT_EQ(1U, queued_event_count()); |  289     EXPECT_EQ(1U, queued_event_count()); | 
|  290     EXPECT_TRUE(event_in_flight()); |  290     EXPECT_TRUE(event_in_flight()); | 
|  291     EXPECT_EQ(0U, GetAndResetSentEventCount()); |  291     EXPECT_EQ(0U, GetAndResetSentEventCount()); | 
|  292  |  292  | 
|  293     // Receive an ACK for the mouse wheel event and release the next |  293     // Receive an ACK for the mouse wheel event and release the next | 
|  294     // mouse wheel event. |  294     // mouse wheel event. | 
|  295     SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  295     SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  296     EXPECT_EQ(0U, queued_event_count()); |  296     EXPECT_EQ(0U, queued_event_count()); | 
|  297     EXPECT_TRUE(event_in_flight()); |  297     EXPECT_TRUE(event_in_flight()); | 
|  298     EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  298     EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  299     EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  299     EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  300     EXPECT_EQ(3U, all_sent_events().size()); |  300     EXPECT_EQ(3U, all_sent_events().size()); | 
|  301     EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  301     EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  302     EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  302     EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  303     EXPECT_MOUSE_WHEEL(sent_input_event(2)); |  303     EXPECT_MOUSE_WHEEL(sent_input_event(2)); | 
|  304     EXPECT_EQ(3U, GetAndResetSentEventCount()); |  304     EXPECT_EQ(3U, GetAndResetSentEventCount()); | 
|  305  |  305  | 
|  306     RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); |  306     RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); | 
|  307     EXPECT_EQ(1U, all_sent_events().size()); |  307     EXPECT_EQ(1U, all_sent_events().size()); | 
|  308     EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); |  308     EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); | 
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  459   EXPECT_EQ(1U, queued_event_count()); |  459   EXPECT_EQ(1U, queued_event_count()); | 
|  460   EXPECT_TRUE(event_in_flight()); |  460   EXPECT_TRUE(event_in_flight()); | 
|  461   EXPECT_EQ(0U, GetAndResetSentEventCount()); |  461   EXPECT_EQ(0U, GetAndResetSentEventCount()); | 
|  462  |  462  | 
|  463   // Receive an ACK for the first mouse wheel event. |  463   // Receive an ACK for the first mouse wheel event. | 
|  464   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |  464   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 
|  465   EXPECT_EQ(0U, queued_event_count()); |  465   EXPECT_EQ(0U, queued_event_count()); | 
|  466   EXPECT_TRUE(event_in_flight()); |  466   EXPECT_TRUE(event_in_flight()); | 
|  467   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  467   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  468   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  468   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  469   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  469   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  470  |  470  | 
|  471   // Receive an ACK for the second mouse wheel event. |  471   // Receive an ACK for the second mouse wheel event. | 
|  472   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |  472   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 
|  473   EXPECT_EQ(0U, queued_event_count()); |  473   EXPECT_EQ(0U, queued_event_count()); | 
|  474   EXPECT_FALSE(event_in_flight()); |  474   EXPECT_FALSE(event_in_flight()); | 
|  475   EXPECT_EQ(0U, GetAndResetSentEventCount()); |  475   EXPECT_EQ(0U, GetAndResetSentEventCount()); | 
|  476   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  476   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  477   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  477   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  478 } |  478 } | 
|  479  |  479  | 
|  480 TEST_P(MouseWheelEventQueueTest, GestureSending) { |  480 TEST_P(MouseWheelEventQueueTest, GestureSending) { | 
|  481   GestureSendingTest(false); |  481   GestureSendingTest(false); | 
|  482 } |  482 } | 
|  483  |  483  | 
|  484 TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { |  484 TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { | 
|  485   GestureSendingTest(true); |  485   GestureSendingTest(true); | 
|  486 } |  486 } | 
|  487  |  487  | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  500   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  500   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  501                  kWheelScrollGlobalY, 1, 1, 0, false); |  501                  kWheelScrollGlobalY, 1, 1, 0, false); | 
|  502   EXPECT_EQ(0U, queued_event_count()); |  502   EXPECT_EQ(0U, queued_event_count()); | 
|  503   EXPECT_TRUE(event_in_flight()); |  503   EXPECT_TRUE(event_in_flight()); | 
|  504   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  504   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  505  |  505  | 
|  506   // Receive an ACK for the mouse wheel event. |  506   // Receive an ACK for the mouse wheel event. | 
|  507   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  507   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  508   EXPECT_EQ(0U, queued_event_count()); |  508   EXPECT_EQ(0U, queued_event_count()); | 
|  509   EXPECT_FALSE(event_in_flight()); |  509   EXPECT_FALSE(event_in_flight()); | 
|  510   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  510   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  511   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  511   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  512   EXPECT_EQ(2U, all_sent_events().size()); |  512   EXPECT_EQ(2U, all_sent_events().size()); | 
|  513   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  513   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  514   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  514   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  515   EXPECT_EQ(2U, GetAndResetSentEventCount()); |  515   EXPECT_EQ(2U, GetAndResetSentEventCount()); | 
|  516  |  516  | 
|  517   // Ensure that a gesture scroll begin terminates the current scroll event. |  517   // Ensure that a gesture scroll begin terminates the current scroll event. | 
|  518   SendGestureEvent(WebInputEvent::GestureScrollBegin); |  518   SendGestureEvent(WebInputEvent::GestureScrollBegin); | 
|  519   EXPECT_EQ(1U, all_sent_events().size()); |  519   EXPECT_EQ(1U, all_sent_events().size()); | 
|  520   EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); |  520   EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); | 
|  521   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  521   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  522  |  522  | 
|  523   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  523   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  524                  kWheelScrollGlobalY, 1, 1, 0, false); |  524                  kWheelScrollGlobalY, 1, 1, 0, false); | 
|  525   EXPECT_EQ(0U, queued_event_count()); |  525   EXPECT_EQ(0U, queued_event_count()); | 
|  526   EXPECT_TRUE(event_in_flight()); |  526   EXPECT_TRUE(event_in_flight()); | 
|  527   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  527   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  528  |  528  | 
|  529   // New mouse wheel events won't cause gestures because a scroll |  529   // New mouse wheel events won't cause gestures because a scroll | 
|  530   // is already in progress by another device. |  530   // is already in progress by another device. | 
|  531   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  531   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  532   EXPECT_EQ(0U, queued_event_count()); |  532   EXPECT_EQ(0U, queued_event_count()); | 
|  533   EXPECT_FALSE(event_in_flight()); |  533   EXPECT_FALSE(event_in_flight()); | 
|  534   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  534   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  535   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  535   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  536   EXPECT_EQ(0U, all_sent_events().size()); |  536   EXPECT_EQ(0U, all_sent_events().size()); | 
|  537  |  537  | 
|  538   SendGestureEvent(WebInputEvent::GestureScrollEnd); |  538   SendGestureEvent(WebInputEvent::GestureScrollEnd); | 
|  539   EXPECT_EQ(0U, all_sent_events().size()); |  539   EXPECT_EQ(0U, all_sent_events().size()); | 
|  540  |  540  | 
|  541   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  541   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  542                  kWheelScrollGlobalY, 1, 1, 0, false); |  542                  kWheelScrollGlobalY, 1, 1, 0, false); | 
|  543   EXPECT_EQ(0U, queued_event_count()); |  543   EXPECT_EQ(0U, queued_event_count()); | 
|  544   EXPECT_TRUE(event_in_flight()); |  544   EXPECT_TRUE(event_in_flight()); | 
|  545   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  545   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  546  |  546  | 
|  547   // Receive an ACK for the mouse wheel event. |  547   // Receive an ACK for the mouse wheel event. | 
|  548   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  548   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  549   EXPECT_EQ(0U, queued_event_count()); |  549   EXPECT_EQ(0U, queued_event_count()); | 
|  550   EXPECT_FALSE(event_in_flight()); |  550   EXPECT_FALSE(event_in_flight()); | 
|  551   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  551   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  552   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  552   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  553   EXPECT_EQ(2U, all_sent_events().size()); |  553   EXPECT_EQ(2U, all_sent_events().size()); | 
|  554   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  554   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  555   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  555   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  556   EXPECT_EQ(2U, GetAndResetSentEventCount()); |  556   EXPECT_EQ(2U, GetAndResetSentEventCount()); | 
|  557 } |  557 } | 
|  558  |  558  | 
|  559 TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) { |  559 TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) { | 
|  560   const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; |  560   const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | 
|  561  |  561  | 
|  562   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  562   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  563                  kWheelScrollGlobalY, 1, 1, 0, false, |  563                  kWheelScrollGlobalY, 1, 1, 0, false, | 
|  564                  WebInputEvent::RailsModeHorizontal); |  564                  WebInputEvent::RailsModeHorizontal); | 
|  565   EXPECT_EQ(0U, queued_event_count()); |  565   EXPECT_EQ(0U, queued_event_count()); | 
|  566   EXPECT_TRUE(event_in_flight()); |  566   EXPECT_TRUE(event_in_flight()); | 
|  567   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  567   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  568  |  568  | 
|  569   // Receive an ACK for the mouse wheel event. |  569   // Receive an ACK for the mouse wheel event. | 
|  570   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  570   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  571   EXPECT_EQ(0U, queued_event_count()); |  571   EXPECT_EQ(0U, queued_event_count()); | 
|  572   EXPECT_FALSE(event_in_flight()); |  572   EXPECT_FALSE(event_in_flight()); | 
|  573   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  573   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  574   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  574   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  575   EXPECT_EQ(2U, all_sent_events().size()); |  575   EXPECT_EQ(2U, all_sent_events().size()); | 
|  576   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  576   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  577   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  577   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  578   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaX); |  578   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | 
|  579   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaY); |  579   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | 
|  580   EXPECT_EQ(2U, GetAndResetSentEventCount()); |  580   EXPECT_EQ(2U, GetAndResetSentEventCount()); | 
|  581  |  581  | 
|  582   RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); |  582   RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); | 
|  583   EXPECT_EQ(1U, all_sent_events().size()); |  583   EXPECT_EQ(1U, all_sent_events().size()); | 
|  584   EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); |  584   EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); | 
|  585   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  585   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  586  |  586  | 
|  587   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  587   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  588                  kWheelScrollGlobalY, 1, 1, 0, false, |  588                  kWheelScrollGlobalY, 1, 1, 0, false, | 
|  589                  WebInputEvent::RailsModeVertical); |  589                  WebInputEvent::RailsModeVertical); | 
|  590   EXPECT_EQ(0U, queued_event_count()); |  590   EXPECT_EQ(0U, queued_event_count()); | 
|  591   EXPECT_TRUE(event_in_flight()); |  591   EXPECT_TRUE(event_in_flight()); | 
|  592   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  592   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  593  |  593  | 
|  594   // Receive an ACK for the mouse wheel event. |  594   // Receive an ACK for the mouse wheel event. | 
|  595   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  595   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  596   EXPECT_EQ(0U, queued_event_count()); |  596   EXPECT_EQ(0U, queued_event_count()); | 
|  597   EXPECT_FALSE(event_in_flight()); |  597   EXPECT_FALSE(event_in_flight()); | 
|  598   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  598   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  599   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  599   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  600   EXPECT_EQ(2U, all_sent_events().size()); |  600   EXPECT_EQ(2U, all_sent_events().size()); | 
|  601   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  601   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  602   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  602   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  603   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); |  603   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | 
|  604   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); |  604   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | 
|  605   EXPECT_EQ(2U, GetAndResetSentEventCount()); |  605   EXPECT_EQ(2U, GetAndResetSentEventCount()); | 
|  606 } |  606 } | 
|  607  |  607  | 
|  608 TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) { |  608 TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) { | 
|  609   const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; |  609   const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | 
|  610   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  610   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  611                  kWheelScrollGlobalY, 1, 1, 0, false, |  611                  kWheelScrollGlobalY, 1, 1, 0, false, | 
|  612                  WebInputEvent::RailsModeVertical); |  612                  WebInputEvent::RailsModeVertical); | 
|  613   EXPECT_EQ(0U, queued_event_count()); |  613   EXPECT_EQ(0U, queued_event_count()); | 
|  614   EXPECT_TRUE(event_in_flight()); |  614   EXPECT_TRUE(event_in_flight()); | 
|  615   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  615   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  616  |  616  | 
|  617   // Receive an ACK for the mouse wheel event. |  617   // Receive an ACK for the mouse wheel event. | 
|  618   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  618   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  619   EXPECT_EQ(0U, queued_event_count()); |  619   EXPECT_EQ(0U, queued_event_count()); | 
|  620   EXPECT_FALSE(event_in_flight()); |  620   EXPECT_FALSE(event_in_flight()); | 
|  621   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  621   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  622   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  622   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  623   EXPECT_EQ(2U, all_sent_events().size()); |  623   EXPECT_EQ(2U, all_sent_events().size()); | 
|  624   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  624   EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  625   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |  625   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 
|  626   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); |  626   EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | 
|  627   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); |  627   EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | 
|  628   EXPECT_EQ(2U, GetAndResetSentEventCount()); |  628   EXPECT_EQ(2U, GetAndResetSentEventCount()); | 
|  629  |  629  | 
|  630   RunTasksAndWait(base::TimeDelta::FromMilliseconds(1)); |  630   RunTasksAndWait(base::TimeDelta::FromMilliseconds(1)); | 
|  631   if (!scroll_latching_enabled_) { |  631   if (!scroll_latching_enabled_) { | 
|  632     EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); |  632     EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); | 
|  633     EXPECT_EQ(1U, GetAndResetSentEventCount()); |  633     EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  634   } else { |  634   } else { | 
|  635     EXPECT_EQ(0U, GetAndResetSentEventCount()); |  635     EXPECT_EQ(0U, GetAndResetSentEventCount()); | 
|  636   } |  636   } | 
|  637   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |  637   SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 
|  638                  kWheelScrollGlobalY, 1, 1, 0, false, |  638                  kWheelScrollGlobalY, 1, 1, 0, false, | 
|  639                  WebInputEvent::RailsModeVertical); |  639                  WebInputEvent::RailsModeVertical); | 
|  640   EXPECT_EQ(0U, queued_event_count()); |  640   EXPECT_EQ(0U, queued_event_count()); | 
|  641   EXPECT_TRUE(event_in_flight()); |  641   EXPECT_TRUE(event_in_flight()); | 
|  642   EXPECT_EQ(1U, GetAndResetSentEventCount()); |  642   EXPECT_EQ(1U, GetAndResetSentEventCount()); | 
|  643  |  643  | 
|  644   // Receive an ACK for the mouse wheel event. |  644   // Receive an ACK for the mouse wheel event. | 
|  645   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |  645   SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
|  646   EXPECT_EQ(0U, queued_event_count()); |  646   EXPECT_EQ(0U, queued_event_count()); | 
|  647   EXPECT_FALSE(event_in_flight()); |  647   EXPECT_FALSE(event_in_flight()); | 
|  648   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |  648   EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type()); | 
|  649   EXPECT_EQ(1U, GetAndResetAckedEventCount()); |  649   EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 
|  650  |  650  | 
|  651   int updateEventIndex = -1; |  651   int updateEventIndex = -1; | 
|  652   if (!scroll_latching_enabled_) { |  652   if (!scroll_latching_enabled_) { | 
|  653     EXPECT_EQ(2U, all_sent_events().size()); |  653     EXPECT_EQ(2U, all_sent_events().size()); | 
|  654     EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |  654     EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 
|  655     updateEventIndex = 1; |  655     updateEventIndex = 1; | 
|  656   } else { |  656   } else { | 
|  657     // Scroll latching: no new scroll begin expected. |  657     // Scroll latching: no new scroll begin expected. | 
|  658     EXPECT_EQ(1U, all_sent_events().size()); |  658     EXPECT_EQ(1U, all_sent_events().size()); | 
|  659     updateEventIndex = 0; |  659     updateEventIndex = 0; | 
|  660   } |  660   } | 
|  661   EXPECT_GE(updateEventIndex, 0); |  661   EXPECT_GE(updateEventIndex, 0); | 
|  662   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex)); |  662   EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex)); | 
|  663   EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX); |  663   EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX); | 
|  664   EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY); |  664   EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY); | 
|  665   EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1), |  665   EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1), | 
|  666             GetAndResetSentEventCount()); |  666             GetAndResetSentEventCount()); | 
|  667 } |  667 } | 
|  668  |  668  | 
|  669 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, |  669 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, | 
|  670                         MouseWheelEventQueueTest, |  670                         MouseWheelEventQueueTest, | 
|  671                         testing::Bool()); |  671                         testing::Bool()); | 
|  672  |  672  | 
|  673 }  // namespace content |  673 }  // namespace content | 
| OLD | NEW |