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 |