| Index: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
|
| index 319563c4afd0d5f5ba951c9f437210c0bc381e97..fc6995e8fe35477e02163d8223199eae7c880015 100644
|
| --- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
|
| +++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
|
| @@ -30,11 +30,6 @@ const float kWheelScrollX = 10;
|
| const float kWheelScrollY = 12;
|
| const float kWheelScrollGlobalX = 50;
|
| const float kWheelScrollGlobalY = 72;
|
| -const int64_t kScrollEndTimeoutMs = 100;
|
| -
|
| -base::TimeDelta DefaultScrollEndTimeoutDelay() {
|
| - return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs);
|
| -}
|
|
|
| #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \
|
| EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \
|
| @@ -140,13 +135,15 @@ base::TimeDelta DefaultScrollEndTimeoutDelay() {
|
|
|
| } // namespace
|
|
|
| -class MouseWheelEventQueueTest : public testing::Test,
|
| +class MouseWheelEventQueueTest : public testing::TestWithParam<bool>,
|
| public MouseWheelEventQueueClient {
|
| public:
|
| MouseWheelEventQueueTest()
|
| : acked_event_count_(0),
|
| last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {
|
| - queue_.reset(new MouseWheelEventQueue(this, kScrollEndTimeoutMs));
|
| + scroll_latching_enabled_ = GetParam();
|
| + queue_.reset(new MouseWheelEventQueue(this, scroll_latching_enabled_));
|
| + scroll_end_timeout_ms_ = scroll_latching_enabled_ ? 100 : 0;
|
| }
|
|
|
| ~MouseWheelEventQueueTest() override {}
|
| @@ -176,6 +173,12 @@ class MouseWheelEventQueueTest : public testing::Test,
|
| last_acked_event_state_ = ack_result;
|
| }
|
|
|
| + base::TimeDelta DefaultScrollEndTimeoutDelay() {
|
| + return base::TimeDelta::FromMilliseconds(scroll_end_timeout_ms_);
|
| + }
|
| +
|
| + bool scroll_latching_enabled() { return scroll_latching_enabled_; }
|
| +
|
| protected:
|
| size_t queued_event_count() const { return queue_->queued_size(); }
|
|
|
| @@ -396,10 +399,12 @@ class MouseWheelEventQueueTest : public testing::Test,
|
| InputEventAckState last_acked_event_state_;
|
| base::MessageLoopForUI message_loop_;
|
| WebMouseWheelEvent last_acked_event_;
|
| + int64_t scroll_end_timeout_ms_;
|
| + bool scroll_latching_enabled_;
|
| };
|
|
|
| // Tests that mouse wheel events are queued properly.
|
| -TEST_F(MouseWheelEventQueueTest, Basic) {
|
| +TEST_P(MouseWheelEventQueueTest, Basic) {
|
| SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
|
| kWheelScrollGlobalY, 1, 1, 0, false);
|
| EXPECT_EQ(0U, queued_event_count());
|
| @@ -430,24 +435,24 @@ TEST_F(MouseWheelEventQueueTest, Basic) {
|
| EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest, GestureSending) {
|
| +TEST_P(MouseWheelEventQueueTest, GestureSending) {
|
| GestureSendingTest(false);
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
|
| +TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
|
| GestureSendingTest(false);
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
|
| +TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
|
| PhaseGestureSendingTest(false);
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest,
|
| +TEST_P(MouseWheelEventQueueTest,
|
| GestureSendingWithPhaseInformationPrecisePixels) {
|
| PhaseGestureSendingTest(true);
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
|
| +TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
|
| const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
|
|
|
| SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
|
| @@ -509,7 +514,7 @@ TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
|
| EXPECT_EQ(2U, GetAndResetSentEventCount());
|
| }
|
|
|
| -TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
|
| +TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
|
| const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
|
|
|
| SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
|
| @@ -558,4 +563,69 @@ TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
|
| EXPECT_EQ(2U, GetAndResetSentEventCount());
|
| }
|
|
|
| +TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
|
| + const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
|
| + SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
|
| + kWheelScrollGlobalY, 1, 1, 0, false,
|
| + WebInputEvent::RailsModeVertical);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_TRUE(event_in_flight());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| +
|
| + // Receive an ACK for the mouse wheel event.
|
| + SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_FALSE(event_in_flight());
|
| + EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| + EXPECT_EQ(2U, all_sent_events().size());
|
| + EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
|
| + EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
|
| + EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
|
| + EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
|
| + EXPECT_EQ(2U, GetAndResetSentEventCount());
|
| +
|
| + RunTasksAndWait(base::TimeDelta::FromMilliseconds(1));
|
| + if (!scroll_latching_enabled_) {
|
| + EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| + } else {
|
| + EXPECT_EQ(0U, GetAndResetSentEventCount());
|
| + }
|
| + SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
|
| + kWheelScrollGlobalY, 1, 1, 0, false,
|
| + WebInputEvent::RailsModeVertical);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_TRUE(event_in_flight());
|
| + EXPECT_EQ(1U, GetAndResetSentEventCount());
|
| +
|
| + // Receive an ACK for the mouse wheel event.
|
| + SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + EXPECT_EQ(0U, queued_event_count());
|
| + EXPECT_FALSE(event_in_flight());
|
| + EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
|
| + EXPECT_EQ(1U, GetAndResetAckedEventCount());
|
| +
|
| + int updateEventIndex = -1;
|
| + if (!scroll_latching_enabled_) {
|
| + EXPECT_EQ(2U, all_sent_events().size());
|
| + EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
|
| + updateEventIndex = 1;
|
| + } else {
|
| + // Scroll latching: no new scroll begin expected.
|
| + EXPECT_EQ(1U, all_sent_events().size());
|
| + updateEventIndex = 0;
|
| + }
|
| + EXPECT_GE(updateEventIndex, 0);
|
| + EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex));
|
| + EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX);
|
| + EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY);
|
| + EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1),
|
| + GetAndResetSentEventCount());
|
| +}
|
| +
|
| +INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests,
|
| + MouseWheelEventQueueTest,
|
| + testing::Bool());
|
| +
|
| } // namespace content
|
|
|