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 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 16 matching lines...) Expand all Loading... | |
27 const float kWheelScrollX = 10; | 27 const float kWheelScrollX = 10; |
28 const float kWheelScrollY = 12; | 28 const float kWheelScrollY = 12; |
29 const float kWheelScrollGlobalX = 50; | 29 const float kWheelScrollGlobalX = 50; |
30 const float kWheelScrollGlobalY = 72; | 30 const float kWheelScrollGlobalY = 72; |
31 const int64_t kScrollEndTimeoutMs = 100; | 31 const int64_t kScrollEndTimeoutMs = 100; |
32 | 32 |
33 base::TimeDelta DefaultScrollEndTimeoutDelay() { | 33 base::TimeDelta DefaultScrollEndTimeoutDelay() { |
34 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); | 34 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); |
35 } | 35 } |
36 | 36 |
37 struct CombinedEvent { | |
tdresser
2016/03/09 14:30:06
What about just storing a WebInputEvent?
You'd nee
dtapuska
2016/03/09 16:12:29
Done.
| |
38 public: | |
39 explicit CombinedEvent(const WebGestureEvent& event) { data.gesture = event; } | |
40 explicit CombinedEvent(const WebMouseWheelEvent& event) { | |
41 data.mouse_wheel = event; | |
42 } | |
43 union Data { | |
44 WebGestureEvent gesture; | |
45 WebMouseWheelEvent mouse_wheel; | |
46 | |
47 Data() { memset(this, 0, sizeof(Data)); } | |
48 } data; | |
49 }; | |
50 | |
51 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ | |
52 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event.data.gesture.type); \ | |
53 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
54 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
55 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
56 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); \ | |
57 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollBegin.deltaHintUnits); | |
58 | |
59 #define EXPECT_GESTURE_SCROLL_BEGIN(event) \ | |
60 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
61 EXPECT_FALSE(event.data.gesture.data.scrollBegin.synthetic); \ | |
62 EXPECT_FALSE(event.data.gesture.data.scrollBegin.inertial); | |
63 | |
64 #define EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(event) \ | |
65 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
66 EXPECT_TRUE(event.data.gesture.data.scrollBegin.synthetic); \ | |
67 EXPECT_FALSE(event.data.gesture.data.scrollBegin.inertial); | |
68 | |
69 #define EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ | |
70 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
71 EXPECT_FALSE(event.data.gesture.data.scrollBegin.synthetic); \ | |
72 EXPECT_TRUE(event.data.gesture.data.scrollBegin.inertial); | |
73 | |
74 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ | |
75 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
76 EXPECT_TRUE(event.data.gesture.data.scrollBegin.synthetic); \ | |
77 EXPECT_TRUE(event.data.gesture.data.scrollBegin.inertial); | |
78 | |
79 #define EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event) \ | |
80 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, event.data.gesture.type); \ | |
81 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollUpdate.deltaUnits); \ | |
82 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
83 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
84 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
85 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); | |
86 | |
87 #define EXPECT_GESTURE_SCROLL_UPDATE(event) \ | |
88 EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event); \ | |
89 EXPECT_FALSE(event.data.gesture.data.scrollUpdate.inertial); | |
90 | |
91 #define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event) \ | |
92 EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event); \ | |
93 EXPECT_TRUE(event.data.gesture.data.scrollUpdate.inertial); | |
94 | |
95 #define EXPECT_GESTURE_SCROLL_END_IMPL(event) \ | |
96 EXPECT_EQ(WebInputEvent::GestureScrollEnd, event.data.gesture.type); \ | |
97 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollEnd.deltaUnits); \ | |
98 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
99 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
100 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
101 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); | |
102 | |
103 #define EXPECT_GESTURE_SCROLL_END(event) \ | |
104 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
105 EXPECT_FALSE(event.data.gesture.data.scrollEnd.synthetic); \ | |
106 EXPECT_FALSE(event.data.gesture.data.scrollEnd.inertial); | |
107 | |
108 #define EXPECT_SYNTHETIC_GESTURE_SCROLL_END(event) \ | |
109 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
110 EXPECT_TRUE(event.data.gesture.data.scrollEnd.synthetic); \ | |
111 EXPECT_FALSE(event.data.gesture.data.scrollEnd.inertial); | |
112 | |
113 #define EXPECT_INERTIAL_GESTURE_SCROLL_END(event) \ | |
114 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
115 EXPECT_FALSE(event.data.gesture.data.scrollEnd.synthetic); \ | |
116 EXPECT_TRUE(event.data.gesture.data.scrollEnd.inertial); | |
117 | |
118 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(event) \ | |
119 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
120 EXPECT_TRUE(event.data.gesture.data.scrollEnd.synthetic); \ | |
121 EXPECT_TRUE(event.data.gesture.data.scrollEnd.inertial); | |
122 | |
123 #define EXPECT_MOUSE_WHEEL(event) \ | |
124 EXPECT_EQ(WebInputEvent::MouseWheel, event.data.mouse_wheel.type); | |
125 | |
37 } // namespace | 126 } // namespace |
38 | 127 |
39 class MouseWheelEventQueueTest : public testing::Test, | 128 class MouseWheelEventQueueTest : public testing::Test, |
40 public MouseWheelEventQueueClient { | 129 public MouseWheelEventQueueClient { |
41 public: | 130 public: |
42 MouseWheelEventQueueTest() | 131 MouseWheelEventQueueTest() |
43 : acked_event_count_(0), | 132 : acked_event_count_(0), |
44 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { | 133 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { |
45 SetUpForGestureTesting(false); | 134 SetUpForGestureTesting(false); |
46 } | 135 } |
47 | 136 |
48 ~MouseWheelEventQueueTest() override {} | 137 ~MouseWheelEventQueueTest() override {} |
49 | 138 |
50 // MouseWheelEventQueueClient | 139 // MouseWheelEventQueueClient |
51 void SendMouseWheelEventImmediately( | 140 void SendMouseWheelEventImmediately( |
52 const MouseWheelEventWithLatencyInfo& event) override { | 141 const MouseWheelEventWithLatencyInfo& event) override { |
53 sent_events_.push_back(event.event); | 142 sent_events_.push_back(CombinedEvent(event.event)); |
54 } | 143 } |
55 | 144 |
56 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { | 145 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { |
57 sent_events_.push_back(event.event); | 146 sent_events_.push_back(CombinedEvent(event.event)); |
58 sent_gesture_events_.push_back(event.event); | |
59 } | 147 } |
60 | 148 |
61 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, | 149 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, |
62 InputEventAckState ack_result) override { | 150 InputEventAckState ack_result) override { |
63 ++acked_event_count_; | 151 ++acked_event_count_; |
64 last_acked_event_ = event.event; | 152 last_acked_event_ = event.event; |
65 last_acked_event_state_ = ack_result; | 153 last_acked_event_state_ = ack_result; |
66 } | 154 } |
67 | 155 |
68 protected: | 156 protected: |
69 void SetUpForGestureTesting(bool send_gestures) { | 157 void SetUpForGestureTesting(bool send_gestures) { |
70 queue_.reset( | 158 queue_.reset( |
71 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); | 159 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); |
72 } | 160 } |
73 | 161 |
74 size_t queued_event_count() const { return queue_->queued_size(); } | 162 size_t queued_event_count() const { return queue_->queued_size(); } |
75 | 163 |
76 bool event_in_flight() const { return queue_->event_in_flight(); } | 164 bool event_in_flight() const { return queue_->event_in_flight(); } |
77 | 165 |
78 std::vector<WebInputEvent>& all_sent_events() { return sent_events_; } | 166 std::vector<CombinedEvent>& all_sent_events() { return sent_events_; } |
79 | |
80 std::vector<WebGestureEvent>& sent_gesture_events() { | |
81 return sent_gesture_events_; | |
82 } | |
83 | 167 |
84 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } | 168 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } |
85 | 169 |
86 size_t GetAndResetSentEventCount() { | 170 size_t GetAndResetSentEventCount() { |
87 size_t count = sent_events_.size(); | 171 size_t count = sent_events_.size(); |
88 sent_events_.clear(); | 172 sent_events_.clear(); |
89 sent_gesture_events_.clear(); | |
90 return count; | 173 return count; |
91 } | 174 } |
92 | 175 |
93 size_t GetAndResetAckedEventCount() { | 176 size_t GetAndResetAckedEventCount() { |
94 size_t count = acked_event_count_; | 177 size_t count = acked_event_count_; |
95 acked_event_count_ = 0; | 178 acked_event_count_ = 0; |
96 return count; | 179 return count; |
97 } | 180 } |
98 | 181 |
99 void SendMouseWheelEventAck(InputEventAckState ack_result) { | 182 void SendMouseWheelEventAck(InputEventAckState ack_result) { |
100 queue_->ProcessMouseWheelAck(ack_result, ui::LatencyInfo()); | 183 queue_->ProcessMouseWheelAck(ack_result, ui::LatencyInfo()); |
101 } | 184 } |
102 | 185 |
103 void SendMouseWheel(float x, | 186 void SendMouseWheel(float x, |
104 float y, | 187 float y, |
105 float global_x, | 188 float global_x, |
106 float global_y, | 189 float global_y, |
107 float dX, | 190 float dX, |
108 float dY, | 191 float dY, |
109 int modifiers, | 192 int modifiers, |
110 bool high_precision) { | 193 bool high_precision) { |
111 queue_->QueueEvent(MouseWheelEventWithLatencyInfo( | 194 queue_->QueueEvent(MouseWheelEventWithLatencyInfo( |
112 SyntheticWebMouseWheelEventBuilder::Build( | 195 SyntheticWebMouseWheelEventBuilder::Build( |
113 x, y, global_x, global_y, dX, dY, modifiers, high_precision))); | 196 x, y, global_x, global_y, dX, dY, modifiers, high_precision))); |
114 } | 197 } |
115 | 198 |
199 void SendMouseWheelWithPhase( | |
200 float x, | |
201 float y, | |
202 float global_x, | |
203 float global_y, | |
204 float dX, | |
205 float dY, | |
206 int modifiers, | |
207 bool high_precision, | |
208 blink::WebMouseWheelEvent::Phase phase, | |
209 blink::WebMouseWheelEvent::Phase momentum_phase) { | |
210 WebMouseWheelEvent event = SyntheticWebMouseWheelEventBuilder::Build( | |
211 x, y, global_x, global_y, dX, dY, modifiers, high_precision); | |
212 event.phase = phase; | |
213 event.momentumPhase = momentum_phase; | |
214 queue_->QueueEvent(MouseWheelEventWithLatencyInfo(event)); | |
215 } | |
216 | |
116 void SendGestureEvent(WebInputEvent::Type type) { | 217 void SendGestureEvent(WebInputEvent::Type type) { |
117 WebGestureEvent event; | 218 WebGestureEvent event; |
118 event.type = type; | 219 event.type = type; |
119 event.sourceDevice = blink::WebGestureDeviceTouchscreen; | 220 event.sourceDevice = blink::WebGestureDeviceTouchscreen; |
120 queue_->OnGestureScrollEvent( | 221 queue_->OnGestureScrollEvent( |
121 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); | 222 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); |
122 } | 223 } |
123 | 224 |
124 static void RunTasksAndWait(base::TimeDelta delay) { | 225 static void RunTasksAndWait(base::TimeDelta delay) { |
125 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 226 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
(...skipping 19 matching lines...) Expand all Loading... | |
145 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 246 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
146 | 247 |
147 // Receive an ACK for the mouse wheel event and release the next | 248 // Receive an ACK for the mouse wheel event and release the next |
148 // mouse wheel event. | 249 // mouse wheel event. |
149 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 250 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
150 EXPECT_EQ(0U, queued_event_count()); | 251 EXPECT_EQ(0U, queued_event_count()); |
151 EXPECT_TRUE(event_in_flight()); | 252 EXPECT_TRUE(event_in_flight()); |
152 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 253 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
153 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 254 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
154 EXPECT_EQ(3U, all_sent_events().size()); | 255 EXPECT_EQ(3U, all_sent_events().size()); |
155 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 256 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
156 EXPECT_EQ(scroll_units, | 257 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
157 sent_gesture_events()[0].data.scrollBegin.deltaHintUnits); | 258 EXPECT_MOUSE_WHEEL(all_sent_events()[2]); |
158 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[0].x); | |
159 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[0].y); | |
160 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[0].globalX); | |
161 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[0].globalY); | |
162 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | |
163 EXPECT_EQ(scroll_units, | |
164 sent_gesture_events()[1].data.scrollUpdate.deltaUnits); | |
165 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[1].x); | |
166 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[1].y); | |
167 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[1].globalX); | |
168 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[1].globalY); | |
169 EXPECT_EQ(WebInputEvent::MouseWheel, all_sent_events()[2].type); | |
170 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 259 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
171 | 260 |
172 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); | 261 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); |
173 EXPECT_EQ(1U, all_sent_events().size()); | 262 EXPECT_EQ(1U, all_sent_events().size()); |
174 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); | 263 EXPECT_GESTURE_SCROLL_END(all_sent_events()[0]); |
175 EXPECT_EQ(scroll_units, sent_gesture_events()[0].data.scrollEnd.deltaUnits); | 264 } |
176 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[0].x); | 265 |
177 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[0].y); | 266 void PhaseGestureSendingTest(bool high_precision) { |
178 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[0].globalX); | 267 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
179 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[0].globalY); | 268 kWheelScrollGlobalY, 1, 1, 0, high_precision, |
269 WebMouseWheelEvent::PhaseBegan, | |
270 WebMouseWheelEvent::PhaseNone); | |
tdresser
2016/03/09 14:30:06
I still find this difficult to read, as the expect
dtapuska
2016/03/09 16:12:29
Done.
| |
271 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
272 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
273 WebMouseWheelEvent::PhaseChanged, | |
274 WebMouseWheelEvent::PhaseNone); | |
275 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
276 kWheelScrollGlobalY, 0, 0, 0, high_precision, | |
277 WebMouseWheelEvent::PhaseEnded, | |
278 WebMouseWheelEvent::PhaseNone); | |
279 // Send a double phase end; OSX does it consistently; note the modifiers | |
280 // are set differently as to avoid coalescing. | |
281 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
282 kWheelScrollGlobalY, 0, 0, 1, high_precision, | |
283 WebMouseWheelEvent::PhaseEnded, | |
284 WebMouseWheelEvent::PhaseNone); | |
285 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
286 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
287 WebMouseWheelEvent::PhaseNone, | |
288 WebMouseWheelEvent::PhaseBegan); | |
289 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
290 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
291 WebMouseWheelEvent::PhaseNone, | |
292 WebMouseWheelEvent::PhaseChanged); | |
293 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
294 kWheelScrollGlobalY, 0, 0, 0, high_precision, | |
295 WebMouseWheelEvent::PhaseNone, | |
296 WebMouseWheelEvent::PhaseEnded); | |
297 | |
298 EXPECT_EQ(6U, queued_event_count()); | |
299 EXPECT_TRUE(event_in_flight()); | |
300 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
301 | |
302 const WebGestureEvent::ScrollUnits scroll_units = | |
303 high_precision ? WebGestureEvent::PrecisePixels | |
304 : WebGestureEvent::Pixels; | |
305 | |
306 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
307 EXPECT_EQ(4U, all_sent_events().size()); | |
308 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
309 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
310 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(all_sent_events()[2]); | |
311 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
312 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
313 | |
314 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
315 EXPECT_EQ(4U, all_sent_events().size()); | |
316 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
317 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
318 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(all_sent_events()[2]); | |
319 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
320 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
321 | |
322 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
323 EXPECT_EQ(3U, all_sent_events().size()); | |
324 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
325 EXPECT_GESTURE_SCROLL_END(all_sent_events()[1]); | |
326 EXPECT_MOUSE_WHEEL(all_sent_events()[2]); | |
327 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
328 | |
329 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
330 EXPECT_EQ(1U, all_sent_events().size()); | |
331 EXPECT_MOUSE_WHEEL(all_sent_events()[0]); | |
332 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
333 | |
334 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
335 EXPECT_EQ(4U, all_sent_events().size()); | |
336 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
337 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
338 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[2]); | |
339 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
340 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
341 | |
342 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
343 EXPECT_EQ(4U, all_sent_events().size()); | |
344 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
345 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
346 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[2]); | |
347 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
348 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
349 | |
350 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
351 EXPECT_EQ(2U, all_sent_events().size()); | |
352 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
353 EXPECT_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[1]); | |
354 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
180 } | 355 } |
181 | 356 |
182 scoped_ptr<MouseWheelEventQueue> queue_; | 357 scoped_ptr<MouseWheelEventQueue> queue_; |
183 std::vector<WebInputEvent> sent_events_; | 358 std::vector<CombinedEvent> sent_events_; |
184 std::vector<WebGestureEvent> sent_gesture_events_; | |
185 size_t acked_event_count_; | 359 size_t acked_event_count_; |
186 InputEventAckState last_acked_event_state_; | 360 InputEventAckState last_acked_event_state_; |
187 base::MessageLoopForUI message_loop_; | 361 base::MessageLoopForUI message_loop_; |
188 WebMouseWheelEvent last_acked_event_; | 362 WebMouseWheelEvent last_acked_event_; |
189 }; | 363 }; |
190 | 364 |
191 // Tests that mouse wheel events are queued properly. | 365 // Tests that mouse wheel events are queued properly. |
192 TEST_F(MouseWheelEventQueueTest, Basic) { | 366 TEST_F(MouseWheelEventQueueTest, Basic) { |
193 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 367 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
194 kWheelScrollGlobalY, 1, 1, 0, false); | 368 kWheelScrollGlobalY, 1, 1, 0, false); |
(...skipping 28 matching lines...) Expand all Loading... | |
223 TEST_F(MouseWheelEventQueueTest, GestureSending) { | 397 TEST_F(MouseWheelEventQueueTest, GestureSending) { |
224 SetUpForGestureTesting(true); | 398 SetUpForGestureTesting(true); |
225 GestureSendingTest(false); | 399 GestureSendingTest(false); |
226 } | 400 } |
227 | 401 |
228 TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { | 402 TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { |
229 SetUpForGestureTesting(true); | 403 SetUpForGestureTesting(true); |
230 GestureSendingTest(false); | 404 GestureSendingTest(false); |
231 } | 405 } |
232 | 406 |
407 TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { | |
408 SetUpForGestureTesting(true); | |
409 PhaseGestureSendingTest(false); | |
410 } | |
411 | |
412 TEST_F(MouseWheelEventQueueTest, | |
413 GestureSendingWithPhaseInformationPrecisePixels) { | |
414 SetUpForGestureTesting(true); | |
415 PhaseGestureSendingTest(true); | |
416 } | |
417 | |
233 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { | 418 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { |
234 SetUpForGestureTesting(true); | 419 SetUpForGestureTesting(true); |
420 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | |
421 | |
235 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 422 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
236 kWheelScrollGlobalY, 1, 1, 0, false); | 423 kWheelScrollGlobalY, 1, 1, 0, false); |
237 EXPECT_EQ(0U, queued_event_count()); | 424 EXPECT_EQ(0U, queued_event_count()); |
238 EXPECT_TRUE(event_in_flight()); | 425 EXPECT_TRUE(event_in_flight()); |
239 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 426 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
240 | 427 |
241 // Receive an ACK for the mouse wheel event. | 428 // Receive an ACK for the mouse wheel event. |
242 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 429 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
243 EXPECT_EQ(0U, queued_event_count()); | 430 EXPECT_EQ(0U, queued_event_count()); |
244 EXPECT_FALSE(event_in_flight()); | 431 EXPECT_FALSE(event_in_flight()); |
245 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 432 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
246 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 433 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
247 EXPECT_EQ(2U, all_sent_events().size()); | 434 EXPECT_EQ(2U, all_sent_events().size()); |
248 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 435 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
249 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 436 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
250 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 437 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
251 | 438 |
252 // Ensure that a gesture scroll begin terminates the current scroll event. | 439 // Ensure that a gesture scroll begin terminates the current scroll event. |
253 SendGestureEvent(WebInputEvent::GestureScrollBegin); | 440 SendGestureEvent(WebInputEvent::GestureScrollBegin); |
254 EXPECT_EQ(1U, all_sent_events().size()); | 441 EXPECT_EQ(1U, all_sent_events().size()); |
255 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); | 442 EXPECT_GESTURE_SCROLL_END(all_sent_events()[0]); |
256 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 443 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
257 | 444 |
258 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 445 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
259 kWheelScrollGlobalY, 1, 1, 0, false); | 446 kWheelScrollGlobalY, 1, 1, 0, false); |
260 EXPECT_EQ(0U, queued_event_count()); | 447 EXPECT_EQ(0U, queued_event_count()); |
261 EXPECT_TRUE(event_in_flight()); | 448 EXPECT_TRUE(event_in_flight()); |
262 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 449 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
263 | 450 |
264 // New mouse wheel events won't cause gestures because a scroll | 451 // New mouse wheel events won't cause gestures because a scroll |
265 // is already in progress by another device. | 452 // is already in progress by another device. |
(...skipping 13 matching lines...) Expand all Loading... | |
279 EXPECT_TRUE(event_in_flight()); | 466 EXPECT_TRUE(event_in_flight()); |
280 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 467 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
281 | 468 |
282 // Receive an ACK for the mouse wheel event. | 469 // Receive an ACK for the mouse wheel event. |
283 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 470 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
284 EXPECT_EQ(0U, queued_event_count()); | 471 EXPECT_EQ(0U, queued_event_count()); |
285 EXPECT_FALSE(event_in_flight()); | 472 EXPECT_FALSE(event_in_flight()); |
286 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 473 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
287 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 474 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
288 EXPECT_EQ(2U, all_sent_events().size()); | 475 EXPECT_EQ(2U, all_sent_events().size()); |
289 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 476 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
290 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 477 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
291 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 478 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
292 } | 479 } |
293 | 480 |
294 } // namespace content | 481 } // namespace content |
OLD | NEW |