Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc

Issue 1749343004: Implement Wheel Gesture Scrolling on OSX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix up tdresser's comments from patch 5 Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698