OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "content/browser/renderer_host/input/gesture_event_filter.h" | 8 #include "content/browser/renderer_host/input/gesture_event_filter.h" |
9 #include "content/browser/renderer_host/input/immediate_input_router.h" | 9 #include "content/browser/renderer_host/input/immediate_input_router.h" |
10 #include "content/browser/renderer_host/input/input_router_client.h" | 10 #include "content/browser/renderer_host/input/input_router_client.h" |
| 11 #include "content/browser/renderer_host/input/input_router_unittest.h" |
| 12 #include "content/browser/renderer_host/input/mock_input_router_client.h" |
11 #include "content/common/content_constants_internal.h" | 13 #include "content/common/content_constants_internal.h" |
12 #include "content/common/edit_command.h" | 14 #include "content/common/edit_command.h" |
13 #include "content/common/input_messages.h" | 15 #include "content/common/input_messages.h" |
14 #include "content/common/view_messages.h" | 16 #include "content/common/view_messages.h" |
15 #include "content/public/test/mock_render_process_host.h" | 17 #include "content/public/test/mock_render_process_host.h" |
16 #include "content/public/test/test_browser_context.h" | 18 #include "content/public/test/test_browser_context.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "ui/base/keycodes/keyboard_codes.h" | 20 #include "ui/base/keycodes/keyboard_codes.h" |
19 | 21 |
20 #if defined(OS_WIN) || defined(USE_AURA) | 22 #if defined(OS_WIN) || defined(USE_AURA) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 if (!equivalent) | 95 if (!equivalent) |
94 return false; | 96 return false; |
95 } | 97 } |
96 | 98 |
97 return true; | 99 return true; |
98 } | 100 } |
99 #endif // defined(OS_WIN) || defined(USE_AURA) | 101 #endif // defined(OS_WIN) || defined(USE_AURA) |
100 | 102 |
101 } // namespace | 103 } // namespace |
102 | 104 |
103 class MockInputRouterClient : public InputRouterClient { | 105 class ImmediateInputRouterTest : public InputRouterTest { |
104 public: | 106 public: |
105 MockInputRouterClient() | 107 ImmediateInputRouterTest() {} |
106 : input_router_(NULL), | 108 virtual ~ImmediateInputRouterTest() {} |
107 in_flight_event_count_(0), | 109 |
108 has_touch_handler_(false), | 110 protected: |
109 ack_count_(0), | 111 // InputRouterTest |
110 unexpected_event_ack_called_(false), | 112 virtual scoped_ptr<InputRouter> CreateInputRouter(RenderProcessHost* process, |
111 ack_state_(INPUT_EVENT_ACK_STATE_UNKNOWN), | 113 InputRouterClient* client, |
112 filter_state_(INPUT_EVENT_ACK_STATE_NOT_CONSUMED), | 114 InputAckHandler* handler, |
113 is_shortcut_(false), | 115 int routing_id) OVERRIDE { |
114 allow_send_key_event_(true), | 116 return scoped_ptr<InputRouter>( |
115 send_called_(false), | 117 new ImmediateInputRouter(process, client, handler, routing_id)); |
116 send_immediately_called_(false) { | |
117 } | |
118 virtual ~MockInputRouterClient() { | |
119 } | 118 } |
120 | 119 |
121 // InputRouterClient | 120 void SendInputEventACK(WebKit::WebInputEvent::Type type, |
122 virtual InputEventAckState FilterInputEvent( | |
123 const WebInputEvent& input_event, | |
124 const ui::LatencyInfo& latency_info) OVERRIDE { | |
125 return filter_state_; | |
126 } | |
127 | |
128 // Called each time a WebInputEvent IPC is sent. | |
129 virtual void IncrementInFlightEventCount() OVERRIDE { | |
130 ++in_flight_event_count_; | |
131 } | |
132 | |
133 // Called each time a WebInputEvent ACK IPC is received. | |
134 virtual void DecrementInFlightEventCount() OVERRIDE { | |
135 --in_flight_event_count_; | |
136 } | |
137 | |
138 // Called when the renderer notifies that it has touch event handlers. | |
139 virtual void OnHasTouchEventHandlers(bool has_handlers) OVERRIDE { | |
140 has_touch_handler_ = has_handlers; | |
141 } | |
142 | |
143 virtual bool OnSendKeyboardEvent( | |
144 const NativeWebKeyboardEvent& key_event, | |
145 const ui::LatencyInfo& latency_info, | |
146 bool* is_shortcut) OVERRIDE { | |
147 send_called_ = true; | |
148 sent_key_event_ = key_event; | |
149 *is_shortcut = is_shortcut_; | |
150 | |
151 return allow_send_key_event_; | |
152 } | |
153 | |
154 virtual bool OnSendWheelEvent( | |
155 const MouseWheelEventWithLatencyInfo& wheel_event) OVERRIDE { | |
156 send_called_ = true; | |
157 sent_wheel_event_ = wheel_event; | |
158 | |
159 return true; | |
160 } | |
161 | |
162 virtual bool OnSendMouseEvent( | |
163 const MouseEventWithLatencyInfo& mouse_event) OVERRIDE { | |
164 send_called_ = true; | |
165 sent_mouse_event_ = mouse_event; | |
166 | |
167 return true; | |
168 } | |
169 | |
170 virtual bool OnSendTouchEvent( | |
171 const TouchEventWithLatencyInfo& touch_event) OVERRIDE { | |
172 send_called_ = true; | |
173 sent_touch_event_ = touch_event; | |
174 | |
175 return true; | |
176 } | |
177 | |
178 virtual bool OnSendGestureEvent( | |
179 const GestureEventWithLatencyInfo& gesture_event) OVERRIDE { | |
180 send_called_ = true; | |
181 sent_gesture_event_ = gesture_event; | |
182 | |
183 return input_router_->ShouldForwardGestureEvent(gesture_event); | |
184 } | |
185 | |
186 virtual bool OnSendMouseEventImmediately( | |
187 const MouseEventWithLatencyInfo& mouse_event) OVERRIDE { | |
188 send_immediately_called_ = true; | |
189 immediately_sent_mouse_event_ = mouse_event; | |
190 | |
191 return true; | |
192 } | |
193 | |
194 virtual bool OnSendTouchEventImmediately( | |
195 const TouchEventWithLatencyInfo& touch_event) OVERRIDE { | |
196 send_immediately_called_ = true; | |
197 immediately_sent_touch_event_ = touch_event; | |
198 | |
199 return true; | |
200 } | |
201 | |
202 virtual bool OnSendGestureEventImmediately( | |
203 const GestureEventWithLatencyInfo& gesture_event) OVERRIDE { | |
204 send_immediately_called_ = true; | |
205 immediately_sent_gesture_event_ = gesture_event; | |
206 | |
207 return true; | |
208 } | |
209 | |
210 // Called upon event ack receipt from the renderer. | |
211 virtual void OnKeyboardEventAck(const NativeWebKeyboardEvent& event, | |
212 InputEventAckState ack_result) OVERRIDE { | |
213 VLOG(1) << __FUNCTION__ << " called!"; | |
214 acked_key_event_ = event; | |
215 RecordAckCalled(ack_result); | |
216 } | |
217 virtual void OnWheelEventAck(const WebMouseWheelEvent& event, | |
218 InputEventAckState ack_result) OVERRIDE { | |
219 VLOG(1) << __FUNCTION__ << " called!"; | |
220 acked_wheel_event_ = event; | |
221 RecordAckCalled(ack_result); | |
222 } | |
223 virtual void OnTouchEventAck(const TouchEventWithLatencyInfo& event, | |
224 InputEventAckState ack_result) OVERRIDE { | |
225 VLOG(1) << __FUNCTION__ << " called!"; | |
226 acked_touch_event_ = event; | |
227 RecordAckCalled(ack_result); | |
228 } | |
229 virtual void OnGestureEventAck(const WebGestureEvent& event, | |
230 InputEventAckState ack_result) OVERRIDE { | |
231 VLOG(1) << __FUNCTION__ << " called!"; | |
232 RecordAckCalled(ack_result); | |
233 } | |
234 virtual void OnUnexpectedEventAck(bool bad_message) OVERRIDE { | |
235 VLOG(1) << __FUNCTION__ << " called!"; | |
236 unexpected_event_ack_called_ = true; | |
237 } | |
238 | |
239 void ExpectSendCalled(bool called) { | |
240 EXPECT_EQ(called, send_called_); | |
241 send_called_ = false; | |
242 } | |
243 void ExpectSendImmediatelyCalled(bool called) { | |
244 EXPECT_EQ(called, send_immediately_called_); | |
245 send_immediately_called_ = false; | |
246 } | |
247 void ExpectAckCalled(int times) { | |
248 EXPECT_EQ(times, ack_count_); | |
249 ack_count_ = 0; | |
250 } | |
251 | |
252 void set_input_router(InputRouter* input_router) { | |
253 input_router_ = input_router; | |
254 } | |
255 bool has_touch_handler() const { return has_touch_handler_; } | |
256 InputEventAckState ack_state() const { return ack_state_; } | |
257 void set_filter_state(InputEventAckState filter_state) { | |
258 filter_state_ = filter_state; | |
259 } | |
260 bool unexpected_event_ack_called() const { | |
261 return unexpected_event_ack_called_; | |
262 } | |
263 const NativeWebKeyboardEvent& acked_keyboard_event() { | |
264 return acked_key_event_; | |
265 } | |
266 const WebMouseWheelEvent& acked_wheel_event() { | |
267 return acked_wheel_event_; | |
268 } | |
269 const TouchEventWithLatencyInfo& acked_touch_event() { | |
270 return acked_touch_event_; | |
271 } | |
272 void set_is_shortcut(bool is_shortcut) { | |
273 is_shortcut_ = is_shortcut; | |
274 } | |
275 void set_allow_send_key_event(bool allow) { | |
276 allow_send_key_event_ = allow; | |
277 } | |
278 const NativeWebKeyboardEvent& sent_key_event() { | |
279 return sent_key_event_; | |
280 } | |
281 const MouseWheelEventWithLatencyInfo& sent_wheel_event() { | |
282 return sent_wheel_event_; | |
283 } | |
284 const MouseEventWithLatencyInfo& sent_mouse_event() { | |
285 return sent_mouse_event_; | |
286 } | |
287 const GestureEventWithLatencyInfo& sent_gesture_event() { | |
288 return sent_gesture_event_; | |
289 } | |
290 const MouseEventWithLatencyInfo& immediately_sent_mouse_event() { | |
291 return immediately_sent_mouse_event_; | |
292 } | |
293 const TouchEventWithLatencyInfo& immediately_sent_touch_event() { | |
294 return immediately_sent_touch_event_; | |
295 } | |
296 const GestureEventWithLatencyInfo& immediately_sent_gesture_event() { | |
297 return immediately_sent_gesture_event_; | |
298 } | |
299 | |
300 private: | |
301 void RecordAckCalled(InputEventAckState ack_result) { | |
302 ++ack_count_; | |
303 ack_state_ = ack_result; | |
304 } | |
305 | |
306 InputRouter* input_router_; | |
307 int in_flight_event_count_; | |
308 bool has_touch_handler_; | |
309 | |
310 int ack_count_; | |
311 bool unexpected_event_ack_called_; | |
312 InputEventAckState ack_state_; | |
313 InputEventAckState filter_state_; | |
314 NativeWebKeyboardEvent acked_key_event_; | |
315 WebMouseWheelEvent acked_wheel_event_; | |
316 TouchEventWithLatencyInfo acked_touch_event_; | |
317 | |
318 bool is_shortcut_; | |
319 bool allow_send_key_event_; | |
320 bool send_called_; | |
321 NativeWebKeyboardEvent sent_key_event_; | |
322 MouseWheelEventWithLatencyInfo sent_wheel_event_; | |
323 MouseEventWithLatencyInfo sent_mouse_event_; | |
324 TouchEventWithLatencyInfo sent_touch_event_; | |
325 GestureEventWithLatencyInfo sent_gesture_event_; | |
326 | |
327 bool send_immediately_called_; | |
328 MouseEventWithLatencyInfo immediately_sent_mouse_event_; | |
329 TouchEventWithLatencyInfo immediately_sent_touch_event_; | |
330 GestureEventWithLatencyInfo immediately_sent_gesture_event_; | |
331 }; | |
332 | |
333 class ImmediateInputRouterTest : public testing::Test { | |
334 public: | |
335 ImmediateInputRouterTest() { | |
336 } | |
337 virtual ~ImmediateInputRouterTest() { | |
338 } | |
339 | |
340 protected: | |
341 // testing::Test | |
342 virtual void SetUp() { | |
343 browser_context_.reset(new TestBrowserContext()); | |
344 process_.reset(new MockRenderProcessHost(browser_context_.get())); | |
345 client_.reset(new MockInputRouterClient()); | |
346 input_router_.reset(new ImmediateInputRouter( | |
347 process_.get(), | |
348 client_.get(), | |
349 MSG_ROUTING_NONE)); | |
350 client_->set_input_router(input_router_.get()); | |
351 } | |
352 virtual void TearDown() { | |
353 // Process all pending tasks to avoid leaks. | |
354 base::MessageLoop::current()->RunUntilIdle(); | |
355 | |
356 input_router_.reset(); | |
357 client_.reset(); | |
358 process_.reset(); | |
359 browser_context_.reset(); | |
360 } | |
361 | |
362 void SendInputEventACK(WebInputEvent::Type type, | |
363 InputEventAckState ack_result) { | 121 InputEventAckState ack_result) { |
364 scoped_ptr<IPC::Message> response( | 122 scoped_ptr<IPC::Message> response( |
365 new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result, | 123 new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result, |
366 ui::LatencyInfo())); | 124 ui::LatencyInfo())); |
367 input_router_->OnMessageReceived(*response); | 125 input_router_->OnMessageReceived(*response); |
368 } | 126 } |
369 | 127 |
370 void SimulateKeyboardEvent(WebInputEvent::Type type) { | 128 ImmediateInputRouter* input_router() const { |
371 NativeWebKeyboardEvent key_event; | 129 return static_cast<ImmediateInputRouter*>(input_router_.get()); |
372 key_event.type = type; | |
373 key_event.windowsKeyCode = ui::VKEY_L; // non-null made up value. | |
374 input_router_->SendKeyboardEvent(key_event, ui::LatencyInfo()); | |
375 client_->ExpectSendCalled(true); | |
376 EXPECT_EQ(type, client_->sent_key_event().type); | |
377 EXPECT_EQ(key_event.windowsKeyCode, | |
378 client_->sent_key_event().windowsKeyCode); | |
379 } | |
380 | |
381 void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) { | |
382 WebMouseWheelEvent wheel_event; | |
383 wheel_event.type = WebInputEvent::MouseWheel; | |
384 wheel_event.deltaX = dX; | |
385 wheel_event.deltaY = dY; | |
386 wheel_event.modifiers = modifiers; | |
387 wheel_event.hasPreciseScrollingDeltas = precise; | |
388 input_router_->SendWheelEvent( | |
389 MouseWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo())); | |
390 client_->ExpectSendCalled(true); | |
391 EXPECT_EQ(wheel_event.type, client_->sent_wheel_event().event.type); | |
392 EXPECT_EQ(dX, client_->sent_wheel_event().event.deltaX); | |
393 } | |
394 | |
395 void SimulateMouseMove(int x, int y, int modifiers) { | |
396 WebMouseEvent mouse_event; | |
397 mouse_event.type = WebInputEvent::MouseMove; | |
398 mouse_event.x = mouse_event.windowX = x; | |
399 mouse_event.y = mouse_event.windowY = y; | |
400 mouse_event.modifiers = modifiers; | |
401 input_router_->SendMouseEvent( | |
402 MouseEventWithLatencyInfo(mouse_event, ui::LatencyInfo())); | |
403 client_->ExpectSendCalled(true); | |
404 client_->ExpectSendImmediatelyCalled(true); | |
405 EXPECT_EQ(mouse_event.type, client_->sent_mouse_event().event.type); | |
406 EXPECT_EQ(x, client_->sent_mouse_event().event.x); | |
407 EXPECT_EQ(mouse_event.type, | |
408 client_->immediately_sent_mouse_event().event.type); | |
409 EXPECT_EQ(x, client_->immediately_sent_mouse_event().event.x); | |
410 } | |
411 | |
412 void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) { | |
413 WebMouseWheelEvent wheel_event; | |
414 wheel_event.type = WebInputEvent::MouseWheel; | |
415 wheel_event.phase = phase; | |
416 input_router_->SendWheelEvent( | |
417 MouseWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo())); | |
418 client_->ExpectSendCalled(true); | |
419 EXPECT_EQ(wheel_event.type, client_->sent_wheel_event().event.type); | |
420 EXPECT_EQ(phase, client_->sent_wheel_event().event.phase); | |
421 } | |
422 | |
423 // Inject provided synthetic WebGestureEvent instance. | |
424 void SimulateGestureEventCore(WebInputEvent::Type type, | |
425 WebGestureEvent::SourceDevice sourceDevice, | |
426 WebGestureEvent* gesture_event) { | |
427 gesture_event->type = type; | |
428 gesture_event->sourceDevice = sourceDevice; | |
429 GestureEventWithLatencyInfo gesture_with_latency( | |
430 *gesture_event, ui::LatencyInfo()); | |
431 input_router_->SendGestureEvent(gesture_with_latency); | |
432 client_->ExpectSendCalled(true); | |
433 EXPECT_EQ(type, client_->sent_gesture_event().event.type); | |
434 EXPECT_EQ(sourceDevice, client_->sent_gesture_event().event.sourceDevice); | |
435 } | |
436 | |
437 // Inject simple synthetic WebGestureEvent instances. | |
438 void SimulateGestureEvent(WebInputEvent::Type type, | |
439 WebGestureEvent::SourceDevice sourceDevice) { | |
440 WebGestureEvent gesture_event; | |
441 SimulateGestureEventCore(type, sourceDevice, &gesture_event); | |
442 } | |
443 | |
444 void SimulateGestureScrollUpdateEvent(float dX, float dY, int modifiers) { | |
445 WebGestureEvent gesture_event; | |
446 gesture_event.data.scrollUpdate.deltaX = dX; | |
447 gesture_event.data.scrollUpdate.deltaY = dY; | |
448 gesture_event.modifiers = modifiers; | |
449 SimulateGestureEventCore(WebInputEvent::GestureScrollUpdate, | |
450 WebGestureEvent::Touchscreen, &gesture_event); | |
451 } | |
452 | |
453 void SimulateGesturePinchUpdateEvent(float scale, | |
454 float anchorX, | |
455 float anchorY, | |
456 int modifiers) { | |
457 WebGestureEvent gesture_event; | |
458 gesture_event.data.pinchUpdate.scale = scale; | |
459 gesture_event.x = anchorX; | |
460 gesture_event.y = anchorY; | |
461 gesture_event.modifiers = modifiers; | |
462 SimulateGestureEventCore(WebInputEvent::GesturePinchUpdate, | |
463 WebGestureEvent::Touchscreen, &gesture_event); | |
464 } | |
465 | |
466 // Inject synthetic GestureFlingStart events. | |
467 void SimulateGestureFlingStartEvent( | |
468 float velocityX, | |
469 float velocityY, | |
470 WebGestureEvent::SourceDevice sourceDevice) { | |
471 WebGestureEvent gesture_event; | |
472 gesture_event.data.flingStart.velocityX = velocityX; | |
473 gesture_event.data.flingStart.velocityY = velocityY; | |
474 SimulateGestureEventCore(WebInputEvent::GestureFlingStart, sourceDevice, | |
475 &gesture_event); | |
476 } | |
477 | |
478 // Set the timestamp for the touch-event. | |
479 void SetTouchTimestamp(base::TimeDelta timestamp) { | |
480 touch_event_.timeStampSeconds = timestamp.InSecondsF(); | |
481 } | |
482 | |
483 // Sends a touch event (irrespective of whether the page has a touch-event | |
484 // handler or not). | |
485 void SendTouchEvent() { | |
486 input_router_->SendTouchEvent( | |
487 TouchEventWithLatencyInfo(touch_event_, ui::LatencyInfo())); | |
488 | |
489 // Mark all the points as stationary. And remove the points that have been | |
490 // released. | |
491 int point = 0; | |
492 for (unsigned int i = 0; i < touch_event_.touchesLength; ++i) { | |
493 if (touch_event_.touches[i].state == WebTouchPoint::StateReleased) | |
494 continue; | |
495 | |
496 touch_event_.touches[point] = touch_event_.touches[i]; | |
497 touch_event_.touches[point].state = | |
498 WebTouchPoint::StateStationary; | |
499 ++point; | |
500 } | |
501 touch_event_.touchesLength = point; | |
502 touch_event_.type = WebInputEvent::Undefined; | |
503 } | |
504 | |
505 int PressTouchPoint(int x, int y) { | |
506 if (touch_event_.touchesLength == touch_event_.touchesLengthCap) | |
507 return -1; | |
508 WebTouchPoint& point = | |
509 touch_event_.touches[touch_event_.touchesLength]; | |
510 point.id = touch_event_.touchesLength; | |
511 point.position.x = point.screenPosition.x = x; | |
512 point.position.y = point.screenPosition.y = y; | |
513 point.state = WebTouchPoint::StatePressed; | |
514 point.radiusX = point.radiusY = 1.f; | |
515 ++touch_event_.touchesLength; | |
516 touch_event_.type = WebInputEvent::TouchStart; | |
517 return point.id; | |
518 } | |
519 | |
520 void MoveTouchPoint(int index, int x, int y) { | |
521 CHECK(index >= 0 && index < touch_event_.touchesLengthCap); | |
522 WebTouchPoint& point = touch_event_.touches[index]; | |
523 point.position.x = point.screenPosition.x = x; | |
524 point.position.y = point.screenPosition.y = y; | |
525 touch_event_.touches[index].state = WebTouchPoint::StateMoved; | |
526 touch_event_.type = WebInputEvent::TouchMove; | |
527 } | |
528 | |
529 void ReleaseTouchPoint(int index) { | |
530 CHECK(index >= 0 && index < touch_event_.touchesLengthCap); | |
531 touch_event_.touches[index].state = WebTouchPoint::StateReleased; | |
532 touch_event_.type = WebInputEvent::TouchEnd; | |
533 } | 130 } |
534 | 131 |
535 void set_debounce_interval_time_ms(int ms) { | 132 void set_debounce_interval_time_ms(int ms) { |
536 input_router_->gesture_event_filter()->debounce_interval_time_ms_ = ms; | 133 input_router()->gesture_event_filter()->debounce_interval_time_ms_ = ms; |
537 } | 134 } |
538 | 135 |
539 void set_maximum_tap_gap_time_ms(int delay_ms) { | 136 void set_maximum_tap_gap_time_ms(int delay_ms) { |
540 input_router_->gesture_event_filter()->maximum_tap_gap_time_ms_ = delay_ms; | 137 input_router()->gesture_event_filter()->maximum_tap_gap_time_ms_ = delay_ms; |
541 } | 138 } |
542 | 139 |
543 size_t TouchEventQueueSize() { | 140 size_t TouchEventQueueSize() { |
544 return touch_event_queue()->GetQueueSize(); | 141 return touch_event_queue()->GetQueueSize(); |
545 } | 142 } |
546 | 143 |
547 const WebTouchEvent& latest_event() const { | 144 const WebTouchEvent& latest_event() const { |
548 return touch_event_queue()->GetLatestEvent().event; | 145 return touch_event_queue()->GetLatestEvent().event; |
549 } | 146 } |
550 | 147 |
551 void EnableNoTouchToRendererWhileScrolling() { | 148 void EnableNoTouchToRendererWhileScrolling() { |
552 input_router_->enable_no_touch_to_renderer_while_scrolling_ = true; | 149 input_router()->enable_no_touch_to_renderer_while_scrolling_ = true; |
553 } | 150 } |
554 | 151 |
555 bool no_touch_move_to_renderer() { | 152 bool no_touch_move_to_renderer() { |
556 return touch_event_queue()->no_touch_move_to_renderer_; | 153 return touch_event_queue()->no_touch_move_to_renderer_; |
557 } | 154 } |
558 | 155 |
559 TouchEventQueue* touch_event_queue() const { | 156 TouchEventQueue* touch_event_queue() const { |
560 return input_router_->touch_event_queue(); | 157 return input_router()->touch_event_queue(); |
561 } | 158 } |
562 | 159 |
563 unsigned GestureEventLastQueueEventSize() { | 160 unsigned GestureEventLastQueueEventSize() { |
564 return gesture_event_filter()->coalesced_gesture_events_.size(); | 161 return gesture_event_filter()->coalesced_gesture_events_.size(); |
565 } | 162 } |
566 | 163 |
567 WebGestureEvent GestureEventSecondFromLastQueueEvent() { | 164 WebGestureEvent GestureEventSecondFromLastQueueEvent() { |
568 return gesture_event_filter()->coalesced_gesture_events_.at( | 165 return gesture_event_filter()->coalesced_gesture_events_.at( |
569 GestureEventLastQueueEventSize() - 2).event; | 166 GestureEventLastQueueEventSize() - 2).event; |
570 } | 167 } |
(...skipping 20 matching lines...) Expand all Loading... |
591 | 188 |
592 bool FlingInProgress() { | 189 bool FlingInProgress() { |
593 return gesture_event_filter()->fling_in_progress_; | 190 return gesture_event_filter()->fling_in_progress_; |
594 } | 191 } |
595 | 192 |
596 bool WillIgnoreNextACK() { | 193 bool WillIgnoreNextACK() { |
597 return gesture_event_filter()->ignore_next_ack_; | 194 return gesture_event_filter()->ignore_next_ack_; |
598 } | 195 } |
599 | 196 |
600 GestureEventFilter* gesture_event_filter() const { | 197 GestureEventFilter* gesture_event_filter() const { |
601 return input_router_->gesture_event_filter(); | 198 return input_router()->gesture_event_filter(); |
602 } | 199 } |
603 | |
604 scoped_ptr<MockRenderProcessHost> process_; | |
605 scoped_ptr<MockInputRouterClient> client_; | |
606 scoped_ptr<ImmediateInputRouter> input_router_; | |
607 | |
608 private: | |
609 base::MessageLoopForUI message_loop_; | |
610 WebTouchEvent touch_event_; | |
611 | |
612 scoped_ptr<TestBrowserContext> browser_context_; | |
613 }; | 200 }; |
614 | 201 |
615 #if GTEST_HAS_PARAM_TEST | 202 #if GTEST_HAS_PARAM_TEST |
616 // This is for tests that are to be run for all source devices. | 203 // This is for tests that are to be run for all source devices. |
617 class ImmediateInputRouterWithSourceTest | 204 class ImmediateInputRouterWithSourceTest |
618 : public ImmediateInputRouterTest, | 205 : public ImmediateInputRouterTest, |
619 public testing::WithParamInterface<WebGestureEvent::SourceDevice> { | 206 public testing::WithParamInterface<WebGestureEvent::SourceDevice> { |
620 }; | 207 }; |
621 #endif // GTEST_HAS_PARAM_TEST | 208 #endif // GTEST_HAS_PARAM_TEST |
622 | 209 |
623 TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) { | 210 TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) { |
624 input_router_->SendInput( | 211 input_router_->SendInput(scoped_ptr<IPC::Message>( |
625 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4))); | 212 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4)))); |
626 EXPECT_EQ(1u, process_->sink().message_count()); | 213 EXPECT_EQ(1u, process_->sink().message_count()); |
627 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( | 214 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( |
628 process_->sink().GetMessageAt(0), | 215 process_->sink().GetMessageAt(0), |
629 gfx::Point(1, 2), | 216 gfx::Point(1, 2), |
630 gfx::Point(3, 4)); | 217 gfx::Point(3, 4)); |
631 process_->sink().ClearMessages(); | 218 process_->sink().ClearMessages(); |
632 | 219 |
633 // Send two more messages without acking. | 220 // Send two more messages without acking. |
634 input_router_->SendInput( | 221 input_router_->SendInput(scoped_ptr<IPC::Message>( |
635 new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8))); | 222 new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8)))); |
636 EXPECT_EQ(0u, process_->sink().message_count()); | 223 EXPECT_EQ(0u, process_->sink().message_count()); |
637 | 224 |
638 input_router_->SendInput( | 225 input_router_->SendInput(scoped_ptr<IPC::Message>( |
639 new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12))); | 226 new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12)))); |
640 EXPECT_EQ(0u, process_->sink().message_count()); | 227 EXPECT_EQ(0u, process_->sink().message_count()); |
641 | 228 |
642 // Now ack the first message. | 229 // Now ack the first message. |
643 { | 230 { |
644 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); | 231 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); |
645 input_router_->OnMessageReceived(*response); | 232 input_router_->OnMessageReceived(*response); |
646 } | 233 } |
647 | 234 |
648 // Verify that the two messages are coalesced into one message. | 235 // Verify that the two messages are coalesced into one message. |
649 EXPECT_EQ(1u, process_->sink().message_count()); | 236 EXPECT_EQ(1u, process_->sink().message_count()); |
650 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( | 237 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( |
651 process_->sink().GetMessageAt(0), | 238 process_->sink().GetMessageAt(0), |
652 gfx::Point(9, 10), | 239 gfx::Point(9, 10), |
653 gfx::Point(11, 12)); | 240 gfx::Point(11, 12)); |
654 process_->sink().ClearMessages(); | 241 process_->sink().ClearMessages(); |
655 | 242 |
656 // Acking the coalesced msg should not send any more msg. | 243 // Acking the coalesced msg should not send any more msg. |
657 { | 244 { |
658 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); | 245 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); |
659 input_router_->OnMessageReceived(*response); | 246 input_router_->OnMessageReceived(*response); |
660 } | 247 } |
661 EXPECT_EQ(0u, process_->sink().message_count()); | 248 EXPECT_EQ(0u, process_->sink().message_count()); |
662 } | 249 } |
663 | 250 |
664 TEST_F(ImmediateInputRouterTest, CoalescesCaretMove) { | 251 TEST_F(ImmediateInputRouterTest, CoalescesCaretMove) { |
665 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(1, 2))); | 252 input_router_->SendInput( |
| 253 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(1, 2)))); |
666 EXPECT_EQ(1u, process_->sink().message_count()); | 254 EXPECT_EQ(1u, process_->sink().message_count()); |
667 ExpectIPCMessageWithArg1<InputMsg_MoveCaret>( | 255 ExpectIPCMessageWithArg1<InputMsg_MoveCaret>( |
668 process_->sink().GetMessageAt(0), gfx::Point(1, 2)); | 256 process_->sink().GetMessageAt(0), gfx::Point(1, 2)); |
669 process_->sink().ClearMessages(); | 257 process_->sink().ClearMessages(); |
670 | 258 |
671 // Send two more messages without acking. | 259 // Send two more messages without acking. |
672 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(5, 6))); | 260 input_router_->SendInput( |
| 261 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(5, 6)))); |
673 EXPECT_EQ(0u, process_->sink().message_count()); | 262 EXPECT_EQ(0u, process_->sink().message_count()); |
674 | 263 |
675 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(9, 10))); | 264 input_router_->SendInput( |
| 265 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(9, 10)))); |
676 EXPECT_EQ(0u, process_->sink().message_count()); | 266 EXPECT_EQ(0u, process_->sink().message_count()); |
677 | 267 |
678 // Now ack the first message. | 268 // Now ack the first message. |
679 { | 269 { |
680 scoped_ptr<IPC::Message> response(new ViewHostMsg_MoveCaret_ACK(0)); | 270 scoped_ptr<IPC::Message> response(new ViewHostMsg_MoveCaret_ACK(0)); |
681 input_router_->OnMessageReceived(*response); | 271 input_router_->OnMessageReceived(*response); |
682 } | 272 } |
683 | 273 |
684 // Verify that the two messages are coalesced into one message. | 274 // Verify that the two messages are coalesced into one message. |
685 EXPECT_EQ(1u, process_->sink().message_count()); | 275 EXPECT_EQ(1u, process_->sink().message_count()); |
(...skipping 12 matching lines...) Expand all Loading... |
698 TEST_F(ImmediateInputRouterTest, HandledInputEvent) { | 288 TEST_F(ImmediateInputRouterTest, HandledInputEvent) { |
699 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); | 289 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); |
700 | 290 |
701 // Simulate a keyboard event. | 291 // Simulate a keyboard event. |
702 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 292 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
703 | 293 |
704 // Make sure no input event is sent to the renderer. | 294 // Make sure no input event is sent to the renderer. |
705 EXPECT_EQ(0u, process_->sink().message_count()); | 295 EXPECT_EQ(0u, process_->sink().message_count()); |
706 | 296 |
707 // OnKeyboardEventAck should be triggered without actual ack. | 297 // OnKeyboardEventAck should be triggered without actual ack. |
708 client_->ExpectAckCalled(1); | 298 ack_handler_->ExpectAckCalled(1); |
709 | 299 |
710 // As the event was acked already, keyboard event queue should be | 300 // As the event was acked already, keyboard event queue should be |
711 // empty. | 301 // empty. |
712 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent()); | 302 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent()); |
713 } | 303 } |
714 | 304 |
715 TEST_F(ImmediateInputRouterTest, ClientCanceledKeyboardEvent) { | 305 TEST_F(ImmediateInputRouterTest, ClientCanceledKeyboardEvent) { |
716 client_->set_allow_send_key_event(false); | 306 client_->set_allow_send_event(false); |
717 | 307 |
718 // Simulate a keyboard event. | 308 // Simulate a keyboard event. |
719 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 309 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
720 | 310 |
721 // Make sure no input event is sent to the renderer. | 311 // Make sure no input event is sent to the renderer. |
722 EXPECT_EQ(0u, process_->sink().message_count()); | 312 EXPECT_EQ(0u, process_->sink().message_count()); |
723 client_->ExpectAckCalled(0); | 313 ack_handler_->ExpectAckCalled(0); |
724 } | 314 } |
725 | 315 |
726 TEST_F(ImmediateInputRouterTest, ShortcutKeyboardEvent) { | 316 TEST_F(ImmediateInputRouterTest, ShortcutKeyboardEvent) { |
727 client_->set_is_shortcut(true); | 317 client_->set_is_shortcut(true); |
728 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 318 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
729 EXPECT_TRUE(GetIsShortcutFromHandleInputEventMessage( | 319 EXPECT_TRUE(GetIsShortcutFromHandleInputEventMessage( |
730 process_->sink().GetMessageAt(0))); | 320 process_->sink().GetMessageAt(0))); |
731 | 321 |
732 process_->sink().ClearMessages(); | 322 process_->sink().ClearMessages(); |
733 | 323 |
734 client_->set_is_shortcut(false); | 324 client_->set_is_shortcut(false); |
735 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 325 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
736 EXPECT_FALSE(GetIsShortcutFromHandleInputEventMessage( | 326 EXPECT_FALSE(GetIsShortcutFromHandleInputEventMessage( |
737 process_->sink().GetMessageAt(0))); | 327 process_->sink().GetMessageAt(0))); |
738 } | 328 } |
739 | 329 |
740 TEST_F(ImmediateInputRouterTest, NoncorrespondingKeyEvents) { | 330 TEST_F(ImmediateInputRouterTest, NoncorrespondingKeyEvents) { |
741 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 331 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
742 | 332 |
743 SendInputEventACK(WebInputEvent::KeyUp, | 333 SendInputEventACK(WebInputEvent::KeyUp, |
744 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 334 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
745 EXPECT_TRUE(client_->unexpected_event_ack_called()); | 335 EXPECT_TRUE(ack_handler_->unexpected_event_ack_called()); |
746 } | 336 } |
747 | 337 |
748 // Tests ported from RenderWidgetHostTest -------------------------------------- | 338 // Tests ported from RenderWidgetHostTest -------------------------------------- |
749 | 339 |
750 TEST_F(ImmediateInputRouterTest, HandleKeyEventsWeSent) { | 340 TEST_F(ImmediateInputRouterTest, HandleKeyEventsWeSent) { |
751 // Simulate a keyboard event. | 341 // Simulate a keyboard event. |
752 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 342 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
753 ASSERT_TRUE(input_router_->GetLastKeyboardEvent()); | 343 ASSERT_TRUE(input_router_->GetLastKeyboardEvent()); |
754 EXPECT_EQ(WebInputEvent::RawKeyDown, | 344 EXPECT_EQ(WebInputEvent::RawKeyDown, |
755 input_router_->GetLastKeyboardEvent()->type); | 345 input_router_->GetLastKeyboardEvent()->type); |
756 | 346 |
757 // Make sure we sent the input event to the renderer. | 347 // Make sure we sent the input event to the renderer. |
758 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 348 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
759 InputMsg_HandleInputEvent::ID)); | 349 InputMsg_HandleInputEvent::ID)); |
760 process_->sink().ClearMessages(); | 350 process_->sink().ClearMessages(); |
761 | 351 |
762 // Send the simulated response from the renderer back. | 352 // Send the simulated response from the renderer back. |
763 SendInputEventACK(WebInputEvent::RawKeyDown, | 353 SendInputEventACK(WebInputEvent::RawKeyDown, |
764 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 354 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
765 client_->ExpectAckCalled(1); | 355 ack_handler_->ExpectAckCalled(1); |
766 EXPECT_EQ(WebInputEvent::RawKeyDown, client_->acked_keyboard_event().type); | 356 EXPECT_EQ(WebInputEvent::RawKeyDown, |
| 357 ack_handler_->acked_keyboard_event().type); |
767 } | 358 } |
768 | 359 |
769 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) { | 360 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) { |
770 // Send a simulated, unrequested key response. We should ignore this. | 361 // Send a simulated, unrequested key response. We should ignore this. |
771 SendInputEventACK(WebInputEvent::RawKeyDown, | 362 SendInputEventACK(WebInputEvent::RawKeyDown, |
772 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 363 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
773 | 364 |
774 client_->ExpectAckCalled(0); | 365 ack_handler_->ExpectAckCalled(0); |
775 } | 366 } |
776 | 367 |
777 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) { | 368 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) { |
778 // Simulate wheel events. | 369 // Simulate wheel events. |
779 SimulateWheelEvent(0, -5, 0, false); // sent directly | 370 SimulateWheelEvent(0, -5, 0, false); // sent directly |
780 SimulateWheelEvent(0, -10, 0, false); // enqueued | 371 SimulateWheelEvent(0, -10, 0, false); // enqueued |
781 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event | 372 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event |
782 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers | 373 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers |
783 | 374 |
784 // Check that only the first event was sent. | 375 // Check that only the first event was sent. |
785 EXPECT_EQ(1U, process_->sink().message_count()); | 376 EXPECT_EQ(1U, process_->sink().message_count()); |
786 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 377 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
787 InputMsg_HandleInputEvent::ID)); | 378 InputMsg_HandleInputEvent::ID)); |
788 process_->sink().ClearMessages(); | 379 process_->sink().ClearMessages(); |
789 | 380 |
790 // Check that the ACK sends the second message via ImmediateInputForwarder | 381 // Check that the ACK sends the second message via ImmediateInputForwarder |
791 SendInputEventACK(WebInputEvent::MouseWheel, | 382 SendInputEventACK(WebInputEvent::MouseWheel, |
792 INPUT_EVENT_ACK_STATE_CONSUMED); | 383 INPUT_EVENT_ACK_STATE_CONSUMED); |
793 // The coalesced events can queue up a delayed ack | 384 // The coalesced events can queue up a delayed ack |
794 // so that additional input events can be processed before | 385 // so that additional input events can be processed before |
795 // we turn off coalescing. | 386 // we turn off coalescing. |
796 base::MessageLoop::current()->RunUntilIdle(); | 387 base::MessageLoop::current()->RunUntilIdle(); |
797 client_->ExpectAckCalled(1); | 388 ack_handler_->ExpectAckCalled(1); |
798 EXPECT_EQ(1U, process_->sink().message_count()); | 389 EXPECT_EQ(1U, process_->sink().message_count()); |
799 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 390 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
800 InputMsg_HandleInputEvent::ID)); | 391 InputMsg_HandleInputEvent::ID)); |
801 process_->sink().ClearMessages(); | 392 process_->sink().ClearMessages(); |
802 | 393 |
803 // One more time. | 394 // One more time. |
804 SendInputEventACK(WebInputEvent::MouseWheel, | 395 SendInputEventACK(WebInputEvent::MouseWheel, |
805 INPUT_EVENT_ACK_STATE_CONSUMED); | 396 INPUT_EVENT_ACK_STATE_CONSUMED); |
806 base::MessageLoop::current()->RunUntilIdle(); | 397 base::MessageLoop::current()->RunUntilIdle(); |
807 client_->ExpectAckCalled(1); | 398 ack_handler_->ExpectAckCalled(1); |
808 EXPECT_EQ(1U, process_->sink().message_count()); | 399 EXPECT_EQ(1U, process_->sink().message_count()); |
809 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 400 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
810 InputMsg_HandleInputEvent::ID)); | 401 InputMsg_HandleInputEvent::ID)); |
811 process_->sink().ClearMessages(); | 402 process_->sink().ClearMessages(); |
812 | 403 |
813 // After the final ack, the queue should be empty. | 404 // After the final ack, the queue should be empty. |
814 SendInputEventACK(WebInputEvent::MouseWheel, | 405 SendInputEventACK(WebInputEvent::MouseWheel, |
815 INPUT_EVENT_ACK_STATE_CONSUMED); | 406 INPUT_EVENT_ACK_STATE_CONSUMED); |
816 base::MessageLoop::current()->RunUntilIdle(); | 407 base::MessageLoop::current()->RunUntilIdle(); |
817 client_->ExpectAckCalled(1); | 408 ack_handler_->ExpectAckCalled(1); |
818 EXPECT_EQ(0U, process_->sink().message_count()); | 409 EXPECT_EQ(0U, process_->sink().message_count()); |
819 | 410 |
820 // FIXME(kouhei): Below is testing gesture event filter. Maybe separate test? | 411 // FIXME(kouhei): Below is testing gesture event filter. Maybe separate test? |
821 { | 412 { |
822 WebGestureEvent gesture_event; | 413 WebGestureEvent gesture_event; |
823 gesture_event.type = WebInputEvent::GestureFlingStart; | 414 gesture_event.type = WebInputEvent::GestureFlingStart; |
824 gesture_event.sourceDevice = WebGestureEvent::Touchpad; | 415 gesture_event.sourceDevice = WebGestureEvent::Touchpad; |
825 gesture_event.data.flingStart.velocityX = 0.f; | 416 gesture_event.data.flingStart.velocityX = 0.f; |
826 gesture_event.data.flingStart.velocityY = 0.f; | 417 gesture_event.data.flingStart.velocityY = 0.f; |
827 EXPECT_FALSE(input_router_->ShouldForwardGestureEvent( | 418 EXPECT_FALSE(input_router_->ShouldForwardGestureEvent( |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 // Check that only the first event was sent. | 501 // Check that only the first event was sent. |
911 EXPECT_EQ(1U, process_->sink().message_count()); | 502 EXPECT_EQ(1U, process_->sink().message_count()); |
912 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 503 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
913 InputMsg_HandleInputEvent::ID)); | 504 InputMsg_HandleInputEvent::ID)); |
914 process_->sink().ClearMessages(); | 505 process_->sink().ClearMessages(); |
915 | 506 |
916 // Check that the ACK sends the second message. | 507 // Check that the ACK sends the second message. |
917 SendInputEventACK(WebInputEvent::GestureScrollBegin, | 508 SendInputEventACK(WebInputEvent::GestureScrollBegin, |
918 INPUT_EVENT_ACK_STATE_CONSUMED); | 509 INPUT_EVENT_ACK_STATE_CONSUMED); |
919 base::MessageLoop::current()->RunUntilIdle(); | 510 base::MessageLoop::current()->RunUntilIdle(); |
920 client_->ExpectAckCalled(1); | 511 ack_handler_->ExpectAckCalled(1); |
921 EXPECT_EQ(1U, process_->sink().message_count()); | 512 EXPECT_EQ(1U, process_->sink().message_count()); |
922 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 513 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
923 InputMsg_HandleInputEvent::ID)); | 514 InputMsg_HandleInputEvent::ID)); |
924 process_->sink().ClearMessages(); | 515 process_->sink().ClearMessages(); |
925 | 516 |
926 // Ack for queued coalesced event. | 517 // Ack for queued coalesced event. |
927 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | 518 SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
928 INPUT_EVENT_ACK_STATE_CONSUMED); | 519 INPUT_EVENT_ACK_STATE_CONSUMED); |
929 base::MessageLoop::current()->RunUntilIdle(); | 520 base::MessageLoop::current()->RunUntilIdle(); |
930 client_->ExpectAckCalled(1); | 521 ack_handler_->ExpectAckCalled(1); |
931 EXPECT_EQ(1U, process_->sink().message_count()); | 522 EXPECT_EQ(1U, process_->sink().message_count()); |
932 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 523 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
933 InputMsg_HandleInputEvent::ID)); | 524 InputMsg_HandleInputEvent::ID)); |
934 process_->sink().ClearMessages(); | 525 process_->sink().ClearMessages(); |
935 | 526 |
936 // Ack for queued uncoalesced event. | 527 // Ack for queued uncoalesced event. |
937 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | 528 SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
938 INPUT_EVENT_ACK_STATE_CONSUMED); | 529 INPUT_EVENT_ACK_STATE_CONSUMED); |
939 base::MessageLoop::current()->RunUntilIdle(); | 530 base::MessageLoop::current()->RunUntilIdle(); |
940 client_->ExpectAckCalled(1); | 531 ack_handler_->ExpectAckCalled(1); |
941 EXPECT_EQ(1U, process_->sink().message_count()); | 532 EXPECT_EQ(1U, process_->sink().message_count()); |
942 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 533 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
943 InputMsg_HandleInputEvent::ID)); | 534 InputMsg_HandleInputEvent::ID)); |
944 process_->sink().ClearMessages(); | 535 process_->sink().ClearMessages(); |
945 | 536 |
946 // After the final ack, the queue should be empty. | 537 // After the final ack, the queue should be empty. |
947 SendInputEventACK(WebInputEvent::GestureScrollEnd, | 538 SendInputEventACK(WebInputEvent::GestureScrollEnd, |
948 INPUT_EVENT_ACK_STATE_CONSUMED); | 539 INPUT_EVENT_ACK_STATE_CONSUMED); |
949 base::MessageLoop::current()->RunUntilIdle(); | 540 base::MessageLoop::current()->RunUntilIdle(); |
950 client_->ExpectAckCalled(1); | 541 ack_handler_->ExpectAckCalled(1); |
951 EXPECT_EQ(0U, process_->sink().message_count()); | 542 EXPECT_EQ(0U, process_->sink().message_count()); |
952 } | 543 } |
953 | 544 |
954 TEST_F(ImmediateInputRouterTest, CoalescesScrollAndPinchEvents) { | 545 TEST_F(ImmediateInputRouterTest, CoalescesScrollAndPinchEvents) { |
955 // Turn off debounce handling for test isolation. | 546 // Turn off debounce handling for test isolation. |
956 set_debounce_interval_time_ms(0); | 547 set_debounce_interval_time_ms(0); |
957 | 548 |
958 // Test coalescing of only GestureScrollUpdate events. | 549 // Test coalescing of only GestureScrollUpdate events. |
959 // Simulate gesture events. | 550 // Simulate gesture events. |
960 | 551 |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1193 EXPECT_EQ(0U, process_->sink().message_count()); | 784 EXPECT_EQ(0U, process_->sink().message_count()); |
1194 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 785 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
1195 | 786 |
1196 // GFC after previous GFS is dispatched and acked. | 787 // GFC after previous GFS is dispatched and acked. |
1197 process_->sink().ClearMessages(); | 788 process_->sink().ClearMessages(); |
1198 SimulateGestureFlingStartEvent(0, -10, source_device); | 789 SimulateGestureFlingStartEvent(0, -10, source_device); |
1199 EXPECT_TRUE(FlingInProgress()); | 790 EXPECT_TRUE(FlingInProgress()); |
1200 SendInputEventACK(WebInputEvent::GestureFlingStart, | 791 SendInputEventACK(WebInputEvent::GestureFlingStart, |
1201 INPUT_EVENT_ACK_STATE_CONSUMED); | 792 INPUT_EVENT_ACK_STATE_CONSUMED); |
1202 base::MessageLoop::current()->RunUntilIdle(); | 793 base::MessageLoop::current()->RunUntilIdle(); |
1203 client_->ExpectAckCalled(1); | 794 ack_handler_->ExpectAckCalled(1); |
1204 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 795 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1205 EXPECT_FALSE(FlingInProgress()); | 796 EXPECT_FALSE(FlingInProgress()); |
1206 EXPECT_EQ(2U, process_->sink().message_count()); | 797 EXPECT_EQ(2U, process_->sink().message_count()); |
1207 SendInputEventACK(WebInputEvent::GestureFlingCancel, | 798 SendInputEventACK(WebInputEvent::GestureFlingCancel, |
1208 INPUT_EVENT_ACK_STATE_CONSUMED); | 799 INPUT_EVENT_ACK_STATE_CONSUMED); |
1209 base::MessageLoop::current()->RunUntilIdle(); | 800 base::MessageLoop::current()->RunUntilIdle(); |
1210 client_->ExpectAckCalled(1); | 801 ack_handler_->ExpectAckCalled(1); |
1211 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 802 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
1212 | 803 |
1213 // GFC before previous GFS is acked. | 804 // GFC before previous GFS is acked. |
1214 process_->sink().ClearMessages(); | 805 process_->sink().ClearMessages(); |
1215 SimulateGestureFlingStartEvent(0, -10, source_device); | 806 SimulateGestureFlingStartEvent(0, -10, source_device); |
1216 EXPECT_TRUE(FlingInProgress()); | 807 EXPECT_TRUE(FlingInProgress()); |
1217 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); | 808 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); |
1218 EXPECT_FALSE(FlingInProgress()); | 809 EXPECT_FALSE(FlingInProgress()); |
1219 EXPECT_EQ(1U, process_->sink().message_count()); | 810 EXPECT_EQ(1U, process_->sink().message_count()); |
1220 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 811 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); |
1221 | 812 |
1222 // Advance state realistically. | 813 // Advance state realistically. |
1223 SendInputEventACK(WebInputEvent::GestureFlingStart, | 814 SendInputEventACK(WebInputEvent::GestureFlingStart, |
1224 INPUT_EVENT_ACK_STATE_CONSUMED); | 815 INPUT_EVENT_ACK_STATE_CONSUMED); |
1225 base::MessageLoop::current()->RunUntilIdle(); | 816 base::MessageLoop::current()->RunUntilIdle(); |
1226 SendInputEventACK(WebInputEvent::GestureFlingCancel, | 817 SendInputEventACK(WebInputEvent::GestureFlingCancel, |
1227 INPUT_EVENT_ACK_STATE_CONSUMED); | 818 INPUT_EVENT_ACK_STATE_CONSUMED); |
1228 base::MessageLoop::current()->RunUntilIdle(); | 819 base::MessageLoop::current()->RunUntilIdle(); |
1229 client_->ExpectAckCalled(2); | 820 ack_handler_->ExpectAckCalled(2); |
1230 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); | 821 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); |
1231 | 822 |
1232 // GFS is added to the queue if another event is pending | 823 // GFS is added to the queue if another event is pending |
1233 process_->sink().ClearMessages(); | 824 process_->sink().ClearMessages(); |
1234 SimulateGestureScrollUpdateEvent(8, -7, 0); | 825 SimulateGestureScrollUpdateEvent(8, -7, 0); |
1235 SimulateGestureFlingStartEvent(0, -10, source_device); | 826 SimulateGestureFlingStartEvent(0, -10, source_device); |
1236 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); | 827 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); |
1237 EXPECT_EQ(1U, process_->sink().message_count()); | 828 EXPECT_EQ(1U, process_->sink().message_count()); |
1238 WebGestureEvent merged_event = GestureEventLastQueueEvent(); | 829 WebGestureEvent merged_event = GestureEventLastQueueEvent(); |
1239 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); | 830 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1564 SendTouchEvent(); | 1155 SendTouchEvent(); |
1565 client_->ExpectSendImmediatelyCalled(false); | 1156 client_->ExpectSendImmediatelyCalled(false); |
1566 EXPECT_EQ(0U, process_->sink().message_count()); | 1157 EXPECT_EQ(0U, process_->sink().message_count()); |
1567 | 1158 |
1568 EXPECT_EQ(2U, TouchEventQueueSize()); | 1159 EXPECT_EQ(2U, TouchEventQueueSize()); |
1569 | 1160 |
1570 // Receive an ACK for the first touch-event. | 1161 // Receive an ACK for the first touch-event. |
1571 SendInputEventACK(WebInputEvent::TouchStart, | 1162 SendInputEventACK(WebInputEvent::TouchStart, |
1572 INPUT_EVENT_ACK_STATE_CONSUMED); | 1163 INPUT_EVENT_ACK_STATE_CONSUMED); |
1573 EXPECT_EQ(1U, TouchEventQueueSize()); | 1164 EXPECT_EQ(1U, TouchEventQueueSize()); |
1574 client_->ExpectAckCalled(1); | 1165 ack_handler_->ExpectAckCalled(1); |
1575 EXPECT_EQ(WebInputEvent::TouchStart, | 1166 EXPECT_EQ(WebInputEvent::TouchStart, |
1576 client_->acked_touch_event().event.type); | 1167 ack_handler_->acked_touch_event().event.type); |
1577 EXPECT_EQ(1U, process_->sink().message_count()); | 1168 EXPECT_EQ(1U, process_->sink().message_count()); |
1578 process_->sink().ClearMessages(); | 1169 process_->sink().ClearMessages(); |
1579 | 1170 |
1580 SendInputEventACK(WebInputEvent::TouchMove, | 1171 SendInputEventACK(WebInputEvent::TouchMove, |
1581 INPUT_EVENT_ACK_STATE_CONSUMED); | 1172 INPUT_EVENT_ACK_STATE_CONSUMED); |
1582 EXPECT_EQ(0U, TouchEventQueueSize()); | 1173 EXPECT_EQ(0U, TouchEventQueueSize()); |
1583 client_->ExpectAckCalled(1); | 1174 ack_handler_->ExpectAckCalled(1); |
1584 EXPECT_EQ(WebInputEvent::TouchMove, | 1175 EXPECT_EQ(WebInputEvent::TouchMove, |
1585 client_->acked_touch_event().event.type); | 1176 ack_handler_->acked_touch_event().event.type); |
1586 EXPECT_EQ(0U, process_->sink().message_count()); | 1177 EXPECT_EQ(0U, process_->sink().message_count()); |
1587 } | 1178 } |
1588 | 1179 |
1589 // Tests that the touch-queue is emptied if a page stops listening for touch | 1180 // Tests that the touch-queue is emptied if a page stops listening for touch |
1590 // events. | 1181 // events. |
1591 TEST_F(ImmediateInputRouterTest, TouchEventQueueFlush) { | 1182 TEST_F(ImmediateInputRouterTest, TouchEventQueueFlush) { |
1592 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); | 1183 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
1593 EXPECT_TRUE(client_->has_touch_handler()); | 1184 EXPECT_TRUE(client_->has_touch_handler()); |
1594 EXPECT_EQ(0U, process_->sink().message_count()); | 1185 EXPECT_EQ(0U, process_->sink().message_count()); |
1595 EXPECT_EQ(0U, TouchEventQueueSize()); | 1186 EXPECT_EQ(0U, TouchEventQueueSize()); |
(...skipping 20 matching lines...) Expand all Loading... |
1616 } | 1207 } |
1617 EXPECT_EQ(0U, process_->sink().message_count()); | 1208 EXPECT_EQ(0U, process_->sink().message_count()); |
1618 EXPECT_EQ(32U, TouchEventQueueSize()); | 1209 EXPECT_EQ(32U, TouchEventQueueSize()); |
1619 | 1210 |
1620 // Receive an ACK for the first touch-event. One of the queued touch-event | 1211 // Receive an ACK for the first touch-event. One of the queued touch-event |
1621 // should be forwarded. | 1212 // should be forwarded. |
1622 SendInputEventACK(WebInputEvent::TouchStart, | 1213 SendInputEventACK(WebInputEvent::TouchStart, |
1623 INPUT_EVENT_ACK_STATE_CONSUMED); | 1214 INPUT_EVENT_ACK_STATE_CONSUMED); |
1624 EXPECT_EQ(31U, TouchEventQueueSize()); | 1215 EXPECT_EQ(31U, TouchEventQueueSize()); |
1625 EXPECT_EQ(WebInputEvent::TouchStart, | 1216 EXPECT_EQ(WebInputEvent::TouchStart, |
1626 client_->acked_touch_event().event.type); | 1217 ack_handler_->acked_touch_event().event.type); |
1627 client_->ExpectAckCalled(1); | 1218 ack_handler_->ExpectAckCalled(1); |
1628 EXPECT_EQ(1U, process_->sink().message_count()); | 1219 EXPECT_EQ(1U, process_->sink().message_count()); |
1629 process_->sink().ClearMessages(); | 1220 process_->sink().ClearMessages(); |
1630 | 1221 |
1631 // The page stops listening for touch-events. The touch-event queue should now | 1222 // The page stops listening for touch-events. The touch-event queue should now |
1632 // be emptied, but none of the queued touch-events should be sent to the | 1223 // be emptied, but none of the queued touch-events should be sent to the |
1633 // renderer. | 1224 // renderer. |
1634 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); | 1225 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); |
1635 EXPECT_FALSE(client_->has_touch_handler()); | 1226 EXPECT_FALSE(client_->has_touch_handler()); |
1636 EXPECT_EQ(0U, process_->sink().message_count()); | 1227 EXPECT_EQ(0U, process_->sink().message_count()); |
1637 EXPECT_EQ(0U, TouchEventQueueSize()); | 1228 EXPECT_EQ(0U, TouchEventQueueSize()); |
(...skipping 26 matching lines...) Expand all Loading... |
1664 EXPECT_EQ(0U, process_->sink().message_count()); | 1255 EXPECT_EQ(0U, process_->sink().message_count()); |
1665 EXPECT_EQ(3U, TouchEventQueueSize()); | 1256 EXPECT_EQ(3U, TouchEventQueueSize()); |
1666 client_->ExpectSendImmediatelyCalled(false); | 1257 client_->ExpectSendImmediatelyCalled(false); |
1667 | 1258 |
1668 // ACK the press. | 1259 // ACK the press. |
1669 SendInputEventACK(WebInputEvent::TouchStart, | 1260 SendInputEventACK(WebInputEvent::TouchStart, |
1670 INPUT_EVENT_ACK_STATE_CONSUMED); | 1261 INPUT_EVENT_ACK_STATE_CONSUMED); |
1671 EXPECT_EQ(1U, process_->sink().message_count()); | 1262 EXPECT_EQ(1U, process_->sink().message_count()); |
1672 EXPECT_EQ(2U, TouchEventQueueSize()); | 1263 EXPECT_EQ(2U, TouchEventQueueSize()); |
1673 EXPECT_EQ(WebInputEvent::TouchStart, | 1264 EXPECT_EQ(WebInputEvent::TouchStart, |
1674 client_->acked_touch_event().event.type); | 1265 ack_handler_->acked_touch_event().event.type); |
1675 client_->ExpectAckCalled(1); | 1266 ack_handler_->ExpectAckCalled(1); |
1676 process_->sink().ClearMessages(); | 1267 process_->sink().ClearMessages(); |
1677 | 1268 |
1678 // Coalesced touch-move events should be sent. | 1269 // Coalesced touch-move events should be sent. |
1679 client_->ExpectSendImmediatelyCalled(true); | 1270 client_->ExpectSendImmediatelyCalled(true); |
1680 EXPECT_EQ(WebInputEvent::TouchMove, | 1271 EXPECT_EQ(WebInputEvent::TouchMove, |
1681 client_->immediately_sent_touch_event().event.type); | 1272 client_->immediately_sent_touch_event().event.type); |
1682 | 1273 |
1683 // ACK the moves. | 1274 // ACK the moves. |
1684 SendInputEventACK(WebInputEvent::TouchMove, | 1275 SendInputEventACK(WebInputEvent::TouchMove, |
1685 INPUT_EVENT_ACK_STATE_CONSUMED); | 1276 INPUT_EVENT_ACK_STATE_CONSUMED); |
1686 EXPECT_EQ(1U, process_->sink().message_count()); | 1277 EXPECT_EQ(1U, process_->sink().message_count()); |
1687 EXPECT_EQ(1U, TouchEventQueueSize()); | 1278 EXPECT_EQ(1U, TouchEventQueueSize()); |
1688 EXPECT_EQ(WebInputEvent::TouchMove, | 1279 EXPECT_EQ(WebInputEvent::TouchMove, |
1689 client_->acked_touch_event().event.type); | 1280 ack_handler_->acked_touch_event().event.type); |
1690 client_->ExpectAckCalled(10); | 1281 ack_handler_->ExpectAckCalled(10); |
1691 process_->sink().ClearMessages(); | 1282 process_->sink().ClearMessages(); |
1692 | 1283 |
1693 // ACK the release. | 1284 // ACK the release. |
1694 SendInputEventACK(WebInputEvent::TouchEnd, | 1285 SendInputEventACK(WebInputEvent::TouchEnd, |
1695 INPUT_EVENT_ACK_STATE_CONSUMED); | 1286 INPUT_EVENT_ACK_STATE_CONSUMED); |
1696 EXPECT_EQ(0U, process_->sink().message_count()); | 1287 EXPECT_EQ(0U, process_->sink().message_count()); |
1697 EXPECT_EQ(0U, TouchEventQueueSize()); | 1288 EXPECT_EQ(0U, TouchEventQueueSize()); |
1698 EXPECT_EQ(WebInputEvent::TouchEnd, | 1289 EXPECT_EQ(WebInputEvent::TouchEnd, |
1699 client_->acked_touch_event().event.type); | 1290 ack_handler_->acked_touch_event().event.type); |
1700 client_->ExpectAckCalled(1); | 1291 ack_handler_->ExpectAckCalled(1); |
1701 } | 1292 } |
1702 | 1293 |
1703 // Tests that an event that has already been sent but hasn't been ack'ed yet | 1294 // Tests that an event that has already been sent but hasn't been ack'ed yet |
1704 // doesn't get coalesced with newer events. | 1295 // doesn't get coalesced with newer events. |
1705 TEST_F(ImmediateInputRouterTest, SentTouchEventDoesNotCoalesce) { | 1296 TEST_F(ImmediateInputRouterTest, SentTouchEventDoesNotCoalesce) { |
1706 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); | 1297 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
1707 EXPECT_EQ(0U, process_->sink().message_count()); | 1298 EXPECT_EQ(0U, process_->sink().message_count()); |
1708 EXPECT_EQ(0U, TouchEventQueueSize()); | 1299 EXPECT_EQ(0U, TouchEventQueueSize()); |
1709 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent()); | 1300 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent()); |
1710 | 1301 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1845 SendTouchEvent(); | 1436 SendTouchEvent(); |
1846 EXPECT_EQ(0U, process_->sink().message_count()); | 1437 EXPECT_EQ(0U, process_->sink().message_count()); |
1847 EXPECT_EQ(2U, TouchEventQueueSize()); | 1438 EXPECT_EQ(2U, TouchEventQueueSize()); |
1848 | 1439 |
1849 // Receive an ACK for the first touch-event. This should release the queued | 1440 // Receive an ACK for the first touch-event. This should release the queued |
1850 // touch-event, but it should not be sent to the renderer. | 1441 // touch-event, but it should not be sent to the renderer. |
1851 SendInputEventACK(WebInputEvent::TouchStart, | 1442 SendInputEventACK(WebInputEvent::TouchStart, |
1852 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1443 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
1853 EXPECT_EQ(0U, TouchEventQueueSize()); | 1444 EXPECT_EQ(0U, TouchEventQueueSize()); |
1854 EXPECT_EQ(WebInputEvent::TouchMove, | 1445 EXPECT_EQ(WebInputEvent::TouchMove, |
1855 client_->acked_touch_event().event.type); | 1446 ack_handler_->acked_touch_event().event.type); |
1856 client_->ExpectAckCalled(2); | 1447 ack_handler_->ExpectAckCalled(2); |
1857 EXPECT_EQ(0U, process_->sink().message_count()); | 1448 EXPECT_EQ(0U, process_->sink().message_count()); |
1858 process_->sink().ClearMessages(); | 1449 process_->sink().ClearMessages(); |
1859 | 1450 |
1860 // Send a release event. This should not reach the renderer. | 1451 // Send a release event. This should not reach the renderer. |
1861 ReleaseTouchPoint(0); | 1452 ReleaseTouchPoint(0); |
1862 SendTouchEvent(); | 1453 SendTouchEvent(); |
1863 EXPECT_EQ(0U, process_->sink().message_count()); | 1454 EXPECT_EQ(0U, process_->sink().message_count()); |
1864 EXPECT_EQ(WebInputEvent::TouchEnd, | 1455 EXPECT_EQ(WebInputEvent::TouchEnd, |
1865 client_->acked_touch_event().event.type); | 1456 ack_handler_->acked_touch_event().event.type); |
1866 client_->ExpectAckCalled(1); | 1457 ack_handler_->ExpectAckCalled(1); |
1867 | 1458 |
1868 // Send a press-event, followed by move and release events, and another press | 1459 // Send a press-event, followed by move and release events, and another press |
1869 // event, before the ACK for the first press event comes back. All of the | 1460 // event, before the ACK for the first press event comes back. All of the |
1870 // events should be queued first. After the NO_CONSUMER ack for the first | 1461 // events should be queued first. After the NO_CONSUMER ack for the first |
1871 // touch-press, all events upto the second touch-press should be flushed. | 1462 // touch-press, all events upto the second touch-press should be flushed. |
1872 PressTouchPoint(10, 10); | 1463 PressTouchPoint(10, 10); |
1873 SendTouchEvent(); | 1464 SendTouchEvent(); |
1874 EXPECT_EQ(1U, process_->sink().message_count()); | 1465 EXPECT_EQ(1U, process_->sink().message_count()); |
1875 process_->sink().ClearMessages(); | 1466 process_->sink().ClearMessages(); |
1876 | 1467 |
1877 MoveTouchPoint(0, 5, 5); | 1468 MoveTouchPoint(0, 5, 5); |
1878 SendTouchEvent(); | 1469 SendTouchEvent(); |
1879 MoveTouchPoint(0, 6, 5); | 1470 MoveTouchPoint(0, 6, 5); |
1880 SendTouchEvent(); | 1471 SendTouchEvent(); |
1881 ReleaseTouchPoint(0); | 1472 ReleaseTouchPoint(0); |
1882 SendTouchEvent(); | 1473 SendTouchEvent(); |
1883 | 1474 |
1884 PressTouchPoint(6, 5); | 1475 PressTouchPoint(6, 5); |
1885 SendTouchEvent(); | 1476 SendTouchEvent(); |
1886 EXPECT_EQ(0U, process_->sink().message_count()); | 1477 EXPECT_EQ(0U, process_->sink().message_count()); |
1887 // The queue should hold the first sent touch-press event, the coalesced | 1478 // The queue should hold the first sent touch-press event, the coalesced |
1888 // touch-move event, the touch-end event and the second touch-press event. | 1479 // touch-move event, the touch-end event and the second touch-press event. |
1889 EXPECT_EQ(4U, TouchEventQueueSize()); | 1480 EXPECT_EQ(4U, TouchEventQueueSize()); |
1890 | 1481 |
1891 SendInputEventACK(WebInputEvent::TouchStart, | 1482 SendInputEventACK(WebInputEvent::TouchStart, |
1892 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1483 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
1893 EXPECT_EQ(1U, process_->sink().message_count()); | 1484 EXPECT_EQ(1U, process_->sink().message_count()); |
1894 EXPECT_EQ(WebInputEvent::TouchEnd, client_->acked_touch_event().event.type); | 1485 EXPECT_EQ(WebInputEvent::TouchEnd, |
1895 client_->ExpectAckCalled(4); | 1486 ack_handler_->acked_touch_event().event.type); |
| 1487 ack_handler_->ExpectAckCalled(4); |
1896 EXPECT_EQ(1U, TouchEventQueueSize()); | 1488 EXPECT_EQ(1U, TouchEventQueueSize()); |
1897 process_->sink().ClearMessages(); | 1489 process_->sink().ClearMessages(); |
1898 | 1490 |
1899 // ACK the second press event as NO_CONSUMER too. | 1491 // ACK the second press event as NO_CONSUMER too. |
1900 SendInputEventACK(WebInputEvent::TouchStart, | 1492 SendInputEventACK(WebInputEvent::TouchStart, |
1901 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1493 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
1902 EXPECT_EQ(0U, process_->sink().message_count()); | 1494 EXPECT_EQ(0U, process_->sink().message_count()); |
1903 EXPECT_EQ(WebInputEvent::TouchStart, client_->acked_touch_event().event.type); | 1495 EXPECT_EQ(WebInputEvent::TouchStart, |
1904 client_->ExpectAckCalled(1); | 1496 ack_handler_->acked_touch_event().event.type); |
| 1497 ack_handler_->ExpectAckCalled(1); |
1905 EXPECT_EQ(0U, TouchEventQueueSize()); | 1498 EXPECT_EQ(0U, TouchEventQueueSize()); |
1906 | 1499 |
1907 // Send a second press event. Even though the first touch had NO_CONSUMER, | 1500 // Send a second press event. Even though the first touch had NO_CONSUMER, |
1908 // this press event should reach the renderer. | 1501 // this press event should reach the renderer. |
1909 PressTouchPoint(1, 1); | 1502 PressTouchPoint(1, 1); |
1910 SendTouchEvent(); | 1503 SendTouchEvent(); |
1911 EXPECT_EQ(1U, process_->sink().message_count()); | 1504 EXPECT_EQ(1U, process_->sink().message_count()); |
1912 EXPECT_EQ(1U, TouchEventQueueSize()); | 1505 EXPECT_EQ(1U, TouchEventQueueSize()); |
1913 } | 1506 } |
1914 | 1507 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2031 MoveTouchPoint(1, 30, 30); | 1624 MoveTouchPoint(1, 30, 30); |
2032 SendTouchEvent(); | 1625 SendTouchEvent(); |
2033 EXPECT_EQ(0U, process_->sink().message_count()); | 1626 EXPECT_EQ(0U, process_->sink().message_count()); |
2034 EXPECT_EQ(4U, TouchEventQueueSize()); | 1627 EXPECT_EQ(4U, TouchEventQueueSize()); |
2035 | 1628 |
2036 SendInputEventACK(WebInputEvent::TouchEnd, | 1629 SendInputEventACK(WebInputEvent::TouchEnd, |
2037 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1630 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2038 EXPECT_EQ(1U, process_->sink().message_count()); | 1631 EXPECT_EQ(1U, process_->sink().message_count()); |
2039 EXPECT_EQ(2U, TouchEventQueueSize()); | 1632 EXPECT_EQ(2U, TouchEventQueueSize()); |
2040 EXPECT_EQ(WebInputEvent::TouchMove, | 1633 EXPECT_EQ(WebInputEvent::TouchMove, |
2041 client_->acked_touch_event().event.type); | 1634 ack_handler_->acked_touch_event().event.type); |
2042 process_->sink().ClearMessages(); | 1635 process_->sink().ClearMessages(); |
2043 | 1636 |
2044 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued | 1637 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued |
2045 // touch-move events to the view. | 1638 // touch-move events to the view. |
2046 SendInputEventACK(WebInputEvent::TouchStart, | 1639 SendInputEventACK(WebInputEvent::TouchStart, |
2047 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 1640 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
2048 EXPECT_EQ(0U, process_->sink().message_count()); | 1641 EXPECT_EQ(0U, process_->sink().message_count()); |
2049 EXPECT_EQ(0U, TouchEventQueueSize()); | 1642 EXPECT_EQ(0U, TouchEventQueueSize()); |
2050 EXPECT_EQ(WebInputEvent::TouchMove, | 1643 EXPECT_EQ(WebInputEvent::TouchMove, |
2051 client_->acked_touch_event().event.type); | 1644 ack_handler_->acked_touch_event().event.type); |
2052 | 1645 |
2053 ReleaseTouchPoint(2); | 1646 ReleaseTouchPoint(2); |
2054 ReleaseTouchPoint(1); | 1647 ReleaseTouchPoint(1); |
2055 EXPECT_EQ(0U, process_->sink().message_count()); | 1648 EXPECT_EQ(0U, process_->sink().message_count()); |
2056 EXPECT_EQ(0U, TouchEventQueueSize()); | 1649 EXPECT_EQ(0U, TouchEventQueueSize()); |
2057 } | 1650 } |
2058 | 1651 |
2059 #if defined(OS_WIN) || defined(USE_AURA) | 1652 #if defined(OS_WIN) || defined(USE_AURA) |
2060 // Tests that the acked events have correct state. (ui::Events are used only on | 1653 // Tests that the acked events have correct state. (ui::Events are used only on |
2061 // windows and aura) | 1654 // windows and aura) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2119 WebInputEvent::TouchStart, | 1712 WebInputEvent::TouchStart, |
2120 WebInputEvent::TouchMove }; | 1713 WebInputEvent::TouchMove }; |
2121 | 1714 |
2122 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES; | 1715 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES; |
2123 #if !defined(OS_WIN) | 1716 #if !defined(OS_WIN) |
2124 coordinate_system = SCREEN_COORDINATES; | 1717 coordinate_system = SCREEN_COORDINATES; |
2125 #endif | 1718 #endif |
2126 for (size_t i = 0; i < arraysize(acks); ++i) { | 1719 for (size_t i = 0; i < arraysize(acks); ++i) { |
2127 SendInputEventACK(acks[i], | 1720 SendInputEventACK(acks[i], |
2128 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1721 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2129 EXPECT_EQ(acks[i], client_->acked_touch_event().event.type); | 1722 EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type); |
2130 ScopedVector<ui::TouchEvent> acked; | 1723 ScopedVector<ui::TouchEvent> acked; |
2131 | 1724 |
2132 MakeUITouchEventsFromWebTouchEvents( | 1725 MakeUITouchEventsFromWebTouchEvents( |
2133 client_->acked_touch_event(), &acked, coordinate_system); | 1726 ack_handler_->acked_touch_event(), &acked, coordinate_system); |
2134 bool success = EventListIsSubset(acked, expected_events); | 1727 bool success = EventListIsSubset(acked, expected_events); |
2135 EXPECT_TRUE(success) << "Failed on step: " << i; | 1728 EXPECT_TRUE(success) << "Failed on step: " << i; |
2136 if (!success) | 1729 if (!success) |
2137 break; | 1730 break; |
2138 expected_events.erase(expected_events.begin(), | 1731 expected_events.erase(expected_events.begin(), |
2139 expected_events.begin() + acked.size()); | 1732 expected_events.begin() + acked.size()); |
2140 } | 1733 } |
2141 | 1734 |
2142 EXPECT_EQ(0U, expected_events.size()); | 1735 EXPECT_EQ(0U, expected_events.size()); |
2143 } | 1736 } |
2144 #endif // defined(OS_WIN) || defined(USE_AURA) | 1737 #endif // defined(OS_WIN) || defined(USE_AURA) |
2145 | 1738 |
2146 TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) { | 1739 TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) { |
2147 // Simulate wheel events. | 1740 // Simulate wheel events. |
2148 SimulateWheelEvent(0, -5, 0, false); // sent directly | 1741 SimulateWheelEvent(0, -5, 0, false); // sent directly |
2149 SimulateWheelEvent(0, -10, 0, false); // enqueued | 1742 SimulateWheelEvent(0, -10, 0, false); // enqueued |
2150 | 1743 |
2151 // Check that only the first event was sent. | 1744 // Check that only the first event was sent. |
2152 EXPECT_EQ(1U, process_->sink().message_count()); | 1745 EXPECT_EQ(1U, process_->sink().message_count()); |
2153 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 1746 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
2154 InputMsg_HandleInputEvent::ID)); | 1747 InputMsg_HandleInputEvent::ID)); |
2155 process_->sink().ClearMessages(); | 1748 process_->sink().ClearMessages(); |
2156 | 1749 |
2157 // Indicate that the wheel event was unhandled. | 1750 // Indicate that the wheel event was unhandled. |
2158 SendInputEventACK(WebInputEvent::MouseWheel, | 1751 SendInputEventACK(WebInputEvent::MouseWheel, |
2159 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1752 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2160 | 1753 |
2161 // Check that the correct unhandled wheel event was received. | 1754 // Check that the correct unhandled wheel event was received. |
2162 client_->ExpectAckCalled(1); | 1755 ack_handler_->ExpectAckCalled(1); |
2163 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, client_->ack_state()); | 1756 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); |
2164 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5); | 1757 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); |
2165 | 1758 |
2166 // Check that the second event was sent. | 1759 // Check that the second event was sent. |
2167 EXPECT_EQ(1U, process_->sink().message_count()); | 1760 EXPECT_EQ(1U, process_->sink().message_count()); |
2168 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 1761 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
2169 InputMsg_HandleInputEvent::ID)); | 1762 InputMsg_HandleInputEvent::ID)); |
2170 process_->sink().ClearMessages(); | 1763 process_->sink().ClearMessages(); |
2171 | 1764 |
2172 // Check that the correct unhandled wheel event was received. | 1765 // Check that the correct unhandled wheel event was received. |
2173 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5); | 1766 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); |
2174 } | 1767 } |
2175 | 1768 |
2176 // Tests that no touch move events are sent to renderer during scrolling. | 1769 // Tests that no touch move events are sent to renderer during scrolling. |
2177 TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) { | 1770 TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) { |
2178 EnableNoTouchToRendererWhileScrolling(); | 1771 EnableNoTouchToRendererWhileScrolling(); |
2179 set_debounce_interval_time_ms(0); | 1772 set_debounce_interval_time_ms(0); |
2180 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); | 1773 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
2181 process_->sink().ClearMessages(); | 1774 process_->sink().ClearMessages(); |
2182 | 1775 |
2183 // First touch press. | 1776 // First touch press. |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2256 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1849 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2257 | 1850 |
2258 ReleaseTouchPoint(0); | 1851 ReleaseTouchPoint(0); |
2259 SendTouchEvent(); | 1852 SendTouchEvent(); |
2260 EXPECT_EQ(1U, process_->sink().message_count()); | 1853 EXPECT_EQ(1U, process_->sink().message_count()); |
2261 process_->sink().ClearMessages(); | 1854 process_->sink().ClearMessages(); |
2262 SendInputEventACK(WebInputEvent::TouchEnd, | 1855 SendInputEventACK(WebInputEvent::TouchEnd, |
2263 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1856 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2264 } | 1857 } |
2265 } // namespace content | 1858 } // namespace content |
OLD | NEW |