| 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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 #define EXPECT_MOUSE_WHEEL(event) \ | 134 #define EXPECT_MOUSE_WHEEL(event) \ |
| 135 EXPECT_EQ(WebInputEvent::kMouseWheel, event->GetType()); | 135 EXPECT_EQ(WebInputEvent::kMouseWheel, event->GetType()); |
| 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 is_in_gesture_scroll_(false) { |
| 145 scroll_latching_enabled_ = GetParam(); | 146 scroll_latching_enabled_ = GetParam(); |
| 146 queue_.reset(new MouseWheelEventQueue(this, scroll_latching_enabled_)); | 147 queue_.reset(new MouseWheelEventQueue(this, scroll_latching_enabled_)); |
| 147 scroll_end_timeout_ms_ = scroll_latching_enabled_ ? 100 : 0; | 148 scroll_end_timeout_ms_ = scroll_latching_enabled_ ? 100 : 0; |
| 148 } | 149 } |
| 149 | 150 |
| 150 ~MouseWheelEventQueueTest() override {} | 151 ~MouseWheelEventQueueTest() override {} |
| 151 | 152 |
| 152 // MouseWheelEventQueueClient | 153 // MouseWheelEventQueueClient |
| 153 void SendMouseWheelEventImmediately( | 154 void SendMouseWheelEventImmediately( |
| 154 const MouseWheelEventWithLatencyInfo& event) override { | 155 const MouseWheelEventWithLatencyInfo& event) override { |
| 155 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); | 156 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); |
| 156 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); | 157 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); |
| 157 *cloned_event = event.event; | 158 *cloned_event = event.event; |
| 158 sent_events_.push_back(std::move(cloned_event_holder)); | 159 sent_events_.push_back(std::move(cloned_event_holder)); |
| 159 } | 160 } |
| 160 | 161 |
| 161 void ForwardGestureEventWithLatencyInfo( | 162 void ForwardGestureEventWithLatencyInfo( |
| 162 const blink::WebGestureEvent& event, | 163 const blink::WebGestureEvent& event, |
| 163 const ui::LatencyInfo& latency_info) override { | 164 const ui::LatencyInfo& latency_info) override { |
| 164 WebGestureEvent* cloned_event = new WebGestureEvent(); | 165 WebGestureEvent* cloned_event = new WebGestureEvent(); |
| 165 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); | 166 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); |
| 166 *cloned_event = event; | 167 *cloned_event = event; |
| 167 sent_events_.push_back(std::move(cloned_event_holder)); | 168 sent_events_.push_back(std::move(cloned_event_holder)); |
| 169 |
| 170 if (event.GetType() == blink::WebInputEvent::kGestureScrollBegin && |
| 171 !event.data.scroll_begin.synthetic) { |
| 172 is_in_gesture_scroll_ = true; |
| 173 } else if (event.GetType() == blink::WebInputEvent::kGestureScrollEnd && |
| 174 !event.data.scroll_end.synthetic) { |
| 175 is_in_gesture_scroll_ = false; |
| 176 } |
| 168 } | 177 } |
| 169 | 178 |
| 179 bool is_in_gesture_scroll() override { return is_in_gesture_scroll_; } |
| 180 |
| 170 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, | 181 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, |
| 171 InputEventAckState ack_result) override { | 182 InputEventAckState ack_result) override { |
| 172 ++acked_event_count_; | 183 ++acked_event_count_; |
| 173 last_acked_event_ = event.event; | 184 last_acked_event_ = event.event; |
| 174 last_acked_event_state_ = ack_result; | 185 last_acked_event_state_ = ack_result; |
| 175 } | 186 } |
| 176 | 187 |
| 177 base::TimeDelta DefaultScrollEndTimeoutDelay() { | 188 base::TimeDelta DefaultScrollEndTimeoutDelay() { |
| 178 return base::TimeDelta::FromMilliseconds(scroll_end_timeout_ms_); | 189 return base::TimeDelta::FromMilliseconds(scroll_end_timeout_ms_); |
| 179 } | 190 } |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 } | 456 } |
| 446 | 457 |
| 447 std::unique_ptr<MouseWheelEventQueue> queue_; | 458 std::unique_ptr<MouseWheelEventQueue> queue_; |
| 448 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; | 459 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; |
| 449 size_t acked_event_count_; | 460 size_t acked_event_count_; |
| 450 InputEventAckState last_acked_event_state_; | 461 InputEventAckState last_acked_event_state_; |
| 451 base::MessageLoopForUI message_loop_; | 462 base::MessageLoopForUI message_loop_; |
| 452 WebMouseWheelEvent last_acked_event_; | 463 WebMouseWheelEvent last_acked_event_; |
| 453 int64_t scroll_end_timeout_ms_; | 464 int64_t scroll_end_timeout_ms_; |
| 454 bool scroll_latching_enabled_; | 465 bool scroll_latching_enabled_; |
| 466 bool is_in_gesture_scroll_; |
| 455 }; | 467 }; |
| 456 | 468 |
| 457 // Tests that mouse wheel events are queued properly. | 469 // Tests that mouse wheel events are queued properly. |
| 458 TEST_P(MouseWheelEventQueueTest, Basic) { | 470 TEST_P(MouseWheelEventQueueTest, Basic) { |
| 459 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 471 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 460 kWheelScrollGlobalY, 1, 1, 0, false); | 472 kWheelScrollGlobalY, 1, 1, 0, false); |
| 461 EXPECT_EQ(0U, queued_event_count()); | 473 EXPECT_EQ(0U, queued_event_count()); |
| 462 EXPECT_TRUE(event_in_flight()); | 474 EXPECT_TRUE(event_in_flight()); |
| 463 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 475 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 464 | 476 |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 701 EXPECT_EQ(0U, sent_gesture_event(0)->data.scroll_update.delta_x); | 713 EXPECT_EQ(0U, sent_gesture_event(0)->data.scroll_update.delta_x); |
| 702 EXPECT_EQ(1U, sent_gesture_event(0)->data.scroll_update.delta_y); | 714 EXPECT_EQ(1U, sent_gesture_event(0)->data.scroll_update.delta_y); |
| 703 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 715 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 704 } | 716 } |
| 705 | 717 |
| 706 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, | 718 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, |
| 707 MouseWheelEventQueueTest, | 719 MouseWheelEventQueueTest, |
| 708 testing::Bool()); | 720 testing::Bool()); |
| 709 | 721 |
| 710 } // namespace content | 722 } // namespace content |
| OLD | NEW |