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

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

Issue 20356003: Provided batched input delivery with a BufferedInputRouter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 7 years, 4 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 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
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 TouchEventQueue* touch_event_queue() const { 148 TouchEventQueue* touch_event_queue() const {
552 return input_router_->touch_event_queue(); 149 return input_router()->touch_event_queue();
553 } 150 }
554 151
555 unsigned GestureEventLastQueueEventSize() { 152 unsigned GestureEventLastQueueEventSize() {
556 return gesture_event_filter()->coalesced_gesture_events_.size(); 153 return gesture_event_filter()->coalesced_gesture_events_.size();
557 } 154 }
558 155
559 WebGestureEvent GestureEventSecondFromLastQueueEvent() { 156 WebGestureEvent GestureEventSecondFromLastQueueEvent() {
560 return gesture_event_filter()->coalesced_gesture_events_.at( 157 return gesture_event_filter()->coalesced_gesture_events_.at(
561 GestureEventLastQueueEventSize() - 2).event; 158 GestureEventLastQueueEventSize() - 2).event;
562 } 159 }
(...skipping 20 matching lines...) Expand all
583 180
584 bool FlingInProgress() { 181 bool FlingInProgress() {
585 return gesture_event_filter()->fling_in_progress_; 182 return gesture_event_filter()->fling_in_progress_;
586 } 183 }
587 184
588 bool WillIgnoreNextACK() { 185 bool WillIgnoreNextACK() {
589 return gesture_event_filter()->ignore_next_ack_; 186 return gesture_event_filter()->ignore_next_ack_;
590 } 187 }
591 188
592 GestureEventFilter* gesture_event_filter() const { 189 GestureEventFilter* gesture_event_filter() const {
593 return input_router_->gesture_event_filter(); 190 return input_router()->gesture_event_filter();
594 } 191 }
595
596 scoped_ptr<MockRenderProcessHost> process_;
597 scoped_ptr<MockInputRouterClient> client_;
598 scoped_ptr<ImmediateInputRouter> input_router_;
599
600 private:
601 base::MessageLoopForUI message_loop_;
602 WebTouchEvent touch_event_;
603
604 scoped_ptr<TestBrowserContext> browser_context_;
605 }; 192 };
606 193
607 #if GTEST_HAS_PARAM_TEST 194 #if GTEST_HAS_PARAM_TEST
608 // This is for tests that are to be run for all source devices. 195 // This is for tests that are to be run for all source devices.
609 class ImmediateInputRouterWithSourceTest 196 class ImmediateInputRouterWithSourceTest
610 : public ImmediateInputRouterTest, 197 : public ImmediateInputRouterTest,
611 public testing::WithParamInterface<WebGestureEvent::SourceDevice> { 198 public testing::WithParamInterface<WebGestureEvent::SourceDevice> {
612 }; 199 };
613 #endif // GTEST_HAS_PARAM_TEST 200 #endif // GTEST_HAS_PARAM_TEST
614 201
615 TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) { 202 TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) {
616 input_router_->SendInput( 203 input_router_->SendInput(scoped_ptr<IPC::Message>(
617 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4))); 204 new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4))));
618 EXPECT_EQ(1u, process_->sink().message_count()); 205 EXPECT_EQ(1u, process_->sink().message_count());
619 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( 206 ExpectIPCMessageWithArg2<InputMsg_SelectRange>(
620 process_->sink().GetMessageAt(0), 207 process_->sink().GetMessageAt(0),
621 gfx::Point(1, 2), 208 gfx::Point(1, 2),
622 gfx::Point(3, 4)); 209 gfx::Point(3, 4));
623 process_->sink().ClearMessages(); 210 process_->sink().ClearMessages();
624 211
625 // Send two more messages without acking. 212 // Send two more messages without acking.
626 input_router_->SendInput( 213 input_router_->SendInput(scoped_ptr<IPC::Message>(
627 new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8))); 214 new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8))));
628 EXPECT_EQ(0u, process_->sink().message_count()); 215 EXPECT_EQ(0u, process_->sink().message_count());
629 216
630 input_router_->SendInput( 217 input_router_->SendInput(scoped_ptr<IPC::Message>(
631 new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12))); 218 new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12))));
632 EXPECT_EQ(0u, process_->sink().message_count()); 219 EXPECT_EQ(0u, process_->sink().message_count());
633 220
634 // Now ack the first message. 221 // Now ack the first message.
635 { 222 {
636 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); 223 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0));
637 input_router_->OnMessageReceived(*response); 224 input_router_->OnMessageReceived(*response);
638 } 225 }
639 226
640 // Verify that the two messages are coalesced into one message. 227 // Verify that the two messages are coalesced into one message.
641 EXPECT_EQ(1u, process_->sink().message_count()); 228 EXPECT_EQ(1u, process_->sink().message_count());
642 ExpectIPCMessageWithArg2<InputMsg_SelectRange>( 229 ExpectIPCMessageWithArg2<InputMsg_SelectRange>(
643 process_->sink().GetMessageAt(0), 230 process_->sink().GetMessageAt(0),
644 gfx::Point(9, 10), 231 gfx::Point(9, 10),
645 gfx::Point(11, 12)); 232 gfx::Point(11, 12));
646 process_->sink().ClearMessages(); 233 process_->sink().ClearMessages();
647 234
648 // Acking the coalesced msg should not send any more msg. 235 // Acking the coalesced msg should not send any more msg.
649 { 236 {
650 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0)); 237 scoped_ptr<IPC::Message> response(new ViewHostMsg_SelectRange_ACK(0));
651 input_router_->OnMessageReceived(*response); 238 input_router_->OnMessageReceived(*response);
652 } 239 }
653 EXPECT_EQ(0u, process_->sink().message_count()); 240 EXPECT_EQ(0u, process_->sink().message_count());
654 } 241 }
655 242
656 TEST_F(ImmediateInputRouterTest, CoalescesCaretMove) { 243 TEST_F(ImmediateInputRouterTest, CoalescesCaretMove) {
657 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(1, 2))); 244 input_router_->SendInput(
245 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(1, 2))));
658 EXPECT_EQ(1u, process_->sink().message_count()); 246 EXPECT_EQ(1u, process_->sink().message_count());
659 ExpectIPCMessageWithArg1<InputMsg_MoveCaret>( 247 ExpectIPCMessageWithArg1<InputMsg_MoveCaret>(
660 process_->sink().GetMessageAt(0), gfx::Point(1, 2)); 248 process_->sink().GetMessageAt(0), gfx::Point(1, 2));
661 process_->sink().ClearMessages(); 249 process_->sink().ClearMessages();
662 250
663 // Send two more messages without acking. 251 // Send two more messages without acking.
664 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(5, 6))); 252 input_router_->SendInput(
253 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(5, 6))));
665 EXPECT_EQ(0u, process_->sink().message_count()); 254 EXPECT_EQ(0u, process_->sink().message_count());
666 255
667 input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(9, 10))); 256 input_router_->SendInput(
257 scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(9, 10))));
668 EXPECT_EQ(0u, process_->sink().message_count()); 258 EXPECT_EQ(0u, process_->sink().message_count());
669 259
670 // Now ack the first message. 260 // Now ack the first message.
671 { 261 {
672 scoped_ptr<IPC::Message> response(new ViewHostMsg_MoveCaret_ACK(0)); 262 scoped_ptr<IPC::Message> response(new ViewHostMsg_MoveCaret_ACK(0));
673 input_router_->OnMessageReceived(*response); 263 input_router_->OnMessageReceived(*response);
674 } 264 }
675 265
676 // Verify that the two messages are coalesced into one message. 266 // Verify that the two messages are coalesced into one message.
677 EXPECT_EQ(1u, process_->sink().message_count()); 267 EXPECT_EQ(1u, process_->sink().message_count());
(...skipping 12 matching lines...) Expand all
690 TEST_F(ImmediateInputRouterTest, HandledInputEvent) { 280 TEST_F(ImmediateInputRouterTest, HandledInputEvent) {
691 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); 281 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED);
692 282
693 // Simulate a keyboard event. 283 // Simulate a keyboard event.
694 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 284 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
695 285
696 // Make sure no input event is sent to the renderer. 286 // Make sure no input event is sent to the renderer.
697 EXPECT_EQ(0u, process_->sink().message_count()); 287 EXPECT_EQ(0u, process_->sink().message_count());
698 288
699 // OnKeyboardEventAck should be triggered without actual ack. 289 // OnKeyboardEventAck should be triggered without actual ack.
700 client_->ExpectAckCalled(1); 290 ack_handler_->ExpectAckCalled(1);
701 291
702 // As the event was acked already, keyboard event queue should be 292 // As the event was acked already, keyboard event queue should be
703 // empty. 293 // empty.
704 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent()); 294 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent());
705 } 295 }
706 296
707 TEST_F(ImmediateInputRouterTest, ClientCanceledKeyboardEvent) { 297 TEST_F(ImmediateInputRouterTest, ClientCanceledKeyboardEvent) {
708 client_->set_allow_send_key_event(false); 298 client_->set_allow_send_event(false);
709 299
710 // Simulate a keyboard event. 300 // Simulate a keyboard event.
711 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 301 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
712 302
713 // Make sure no input event is sent to the renderer. 303 // Make sure no input event is sent to the renderer.
714 EXPECT_EQ(0u, process_->sink().message_count()); 304 EXPECT_EQ(0u, process_->sink().message_count());
715 client_->ExpectAckCalled(0); 305 ack_handler_->ExpectAckCalled(0);
716 } 306 }
717 307
718 TEST_F(ImmediateInputRouterTest, ShortcutKeyboardEvent) { 308 TEST_F(ImmediateInputRouterTest, ShortcutKeyboardEvent) {
719 client_->set_is_shortcut(true); 309 client_->set_is_shortcut(true);
720 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 310 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
721 EXPECT_TRUE(GetIsShortcutFromHandleInputEventMessage( 311 EXPECT_TRUE(GetIsShortcutFromHandleInputEventMessage(
722 process_->sink().GetMessageAt(0))); 312 process_->sink().GetMessageAt(0)));
723 313
724 process_->sink().ClearMessages(); 314 process_->sink().ClearMessages();
725 315
726 client_->set_is_shortcut(false); 316 client_->set_is_shortcut(false);
727 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 317 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
728 EXPECT_FALSE(GetIsShortcutFromHandleInputEventMessage( 318 EXPECT_FALSE(GetIsShortcutFromHandleInputEventMessage(
729 process_->sink().GetMessageAt(0))); 319 process_->sink().GetMessageAt(0)));
730 } 320 }
731 321
732 TEST_F(ImmediateInputRouterTest, NoncorrespondingKeyEvents) { 322 TEST_F(ImmediateInputRouterTest, NoncorrespondingKeyEvents) {
733 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 323 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
734 324
735 SendInputEventACK(WebInputEvent::KeyUp, 325 SendInputEventACK(WebInputEvent::KeyUp,
736 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 326 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
737 EXPECT_TRUE(client_->unexpected_event_ack_called()); 327 EXPECT_TRUE(ack_handler_->unexpected_event_ack_called());
738 } 328 }
739 329
740 // Tests ported from RenderWidgetHostTest -------------------------------------- 330 // Tests ported from RenderWidgetHostTest --------------------------------------
741 331
742 TEST_F(ImmediateInputRouterTest, HandleKeyEventsWeSent) { 332 TEST_F(ImmediateInputRouterTest, HandleKeyEventsWeSent) {
743 // Simulate a keyboard event. 333 // Simulate a keyboard event.
744 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 334 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
745 ASSERT_TRUE(input_router_->GetLastKeyboardEvent()); 335 ASSERT_TRUE(input_router_->GetLastKeyboardEvent());
746 EXPECT_EQ(WebInputEvent::RawKeyDown, 336 EXPECT_EQ(WebInputEvent::RawKeyDown,
747 input_router_->GetLastKeyboardEvent()->type); 337 input_router_->GetLastKeyboardEvent()->type);
748 338
749 // Make sure we sent the input event to the renderer. 339 // Make sure we sent the input event to the renderer.
750 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 340 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
751 InputMsg_HandleInputEvent::ID)); 341 InputMsg_HandleInputEvent::ID));
752 process_->sink().ClearMessages(); 342 process_->sink().ClearMessages();
753 343
754 // Send the simulated response from the renderer back. 344 // Send the simulated response from the renderer back.
755 SendInputEventACK(WebInputEvent::RawKeyDown, 345 SendInputEventACK(WebInputEvent::RawKeyDown,
756 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 346 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
757 client_->ExpectAckCalled(1); 347 ack_handler_->ExpectAckCalled(1);
758 EXPECT_EQ(WebInputEvent::RawKeyDown, client_->acked_keyboard_event().type); 348 EXPECT_EQ(WebInputEvent::RawKeyDown,
349 ack_handler_->acked_keyboard_event().type);
759 } 350 }
760 351
761 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) { 352 TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) {
762 // Send a simulated, unrequested key response. We should ignore this. 353 // Send a simulated, unrequested key response. We should ignore this.
763 SendInputEventACK(WebInputEvent::RawKeyDown, 354 SendInputEventACK(WebInputEvent::RawKeyDown,
764 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 355 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
765 356
766 client_->ExpectAckCalled(0); 357 ack_handler_->ExpectAckCalled(0);
767 } 358 }
768 359
769 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) { 360 TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) {
770 // Simulate wheel events. 361 // Simulate wheel events.
771 SimulateWheelEvent(0, -5, 0, false); // sent directly 362 SimulateWheelEvent(0, -5, 0, false); // sent directly
772 SimulateWheelEvent(0, -10, 0, false); // enqueued 363 SimulateWheelEvent(0, -10, 0, false); // enqueued
773 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event 364 SimulateWheelEvent(8, -6, 0, false); // coalesced into previous event
774 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers 365 SimulateWheelEvent(9, -7, 1, false); // enqueued, different modifiers
775 366
776 // Check that only the first event was sent. 367 // Check that only the first event was sent.
777 EXPECT_EQ(1U, process_->sink().message_count()); 368 EXPECT_EQ(1U, process_->sink().message_count());
778 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 369 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
779 InputMsg_HandleInputEvent::ID)); 370 InputMsg_HandleInputEvent::ID));
780 process_->sink().ClearMessages(); 371 process_->sink().ClearMessages();
781 372
782 // Check that the ACK sends the second message via ImmediateInputForwarder 373 // Check that the ACK sends the second message via ImmediateInputForwarder
783 SendInputEventACK(WebInputEvent::MouseWheel, 374 SendInputEventACK(WebInputEvent::MouseWheel,
784 INPUT_EVENT_ACK_STATE_CONSUMED); 375 INPUT_EVENT_ACK_STATE_CONSUMED);
785 // The coalesced events can queue up a delayed ack 376 // The coalesced events can queue up a delayed ack
786 // so that additional input events can be processed before 377 // so that additional input events can be processed before
787 // we turn off coalescing. 378 // we turn off coalescing.
788 base::MessageLoop::current()->RunUntilIdle(); 379 base::MessageLoop::current()->RunUntilIdle();
789 client_->ExpectAckCalled(1); 380 ack_handler_->ExpectAckCalled(1);
790 EXPECT_EQ(1U, process_->sink().message_count()); 381 EXPECT_EQ(1U, process_->sink().message_count());
791 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 382 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
792 InputMsg_HandleInputEvent::ID)); 383 InputMsg_HandleInputEvent::ID));
793 process_->sink().ClearMessages(); 384 process_->sink().ClearMessages();
794 385
795 // One more time. 386 // One more time.
796 SendInputEventACK(WebInputEvent::MouseWheel, 387 SendInputEventACK(WebInputEvent::MouseWheel,
797 INPUT_EVENT_ACK_STATE_CONSUMED); 388 INPUT_EVENT_ACK_STATE_CONSUMED);
798 base::MessageLoop::current()->RunUntilIdle(); 389 base::MessageLoop::current()->RunUntilIdle();
799 client_->ExpectAckCalled(1); 390 ack_handler_->ExpectAckCalled(1);
800 EXPECT_EQ(1U, process_->sink().message_count()); 391 EXPECT_EQ(1U, process_->sink().message_count());
801 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 392 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
802 InputMsg_HandleInputEvent::ID)); 393 InputMsg_HandleInputEvent::ID));
803 process_->sink().ClearMessages(); 394 process_->sink().ClearMessages();
804 395
805 // After the final ack, the queue should be empty. 396 // After the final ack, the queue should be empty.
806 SendInputEventACK(WebInputEvent::MouseWheel, 397 SendInputEventACK(WebInputEvent::MouseWheel,
807 INPUT_EVENT_ACK_STATE_CONSUMED); 398 INPUT_EVENT_ACK_STATE_CONSUMED);
808 base::MessageLoop::current()->RunUntilIdle(); 399 base::MessageLoop::current()->RunUntilIdle();
809 client_->ExpectAckCalled(1); 400 ack_handler_->ExpectAckCalled(1);
810 EXPECT_EQ(0U, process_->sink().message_count()); 401 EXPECT_EQ(0U, process_->sink().message_count());
811 402
812 // FIXME(kouhei): Below is testing gesture event filter. Maybe separate test? 403 // FIXME(kouhei): Below is testing gesture event filter. Maybe separate test?
813 { 404 {
814 WebGestureEvent gesture_event; 405 WebGestureEvent gesture_event;
815 gesture_event.type = WebInputEvent::GestureFlingStart; 406 gesture_event.type = WebInputEvent::GestureFlingStart;
816 gesture_event.sourceDevice = WebGestureEvent::Touchpad; 407 gesture_event.sourceDevice = WebGestureEvent::Touchpad;
817 gesture_event.data.flingStart.velocityX = 0.f; 408 gesture_event.data.flingStart.velocityX = 0.f;
818 gesture_event.data.flingStart.velocityY = 0.f; 409 gesture_event.data.flingStart.velocityY = 0.f;
819 EXPECT_FALSE(input_router_->ShouldForwardGestureEvent( 410 EXPECT_FALSE(input_router_->ShouldForwardGestureEvent(
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 // Check that only the first event was sent. 493 // Check that only the first event was sent.
903 EXPECT_EQ(1U, process_->sink().message_count()); 494 EXPECT_EQ(1U, process_->sink().message_count());
904 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 495 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
905 InputMsg_HandleInputEvent::ID)); 496 InputMsg_HandleInputEvent::ID));
906 process_->sink().ClearMessages(); 497 process_->sink().ClearMessages();
907 498
908 // Check that the ACK sends the second message. 499 // Check that the ACK sends the second message.
909 SendInputEventACK(WebInputEvent::GestureScrollBegin, 500 SendInputEventACK(WebInputEvent::GestureScrollBegin,
910 INPUT_EVENT_ACK_STATE_CONSUMED); 501 INPUT_EVENT_ACK_STATE_CONSUMED);
911 base::MessageLoop::current()->RunUntilIdle(); 502 base::MessageLoop::current()->RunUntilIdle();
912 client_->ExpectAckCalled(1); 503 ack_handler_->ExpectAckCalled(1);
913 EXPECT_EQ(1U, process_->sink().message_count()); 504 EXPECT_EQ(1U, process_->sink().message_count());
914 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 505 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
915 InputMsg_HandleInputEvent::ID)); 506 InputMsg_HandleInputEvent::ID));
916 process_->sink().ClearMessages(); 507 process_->sink().ClearMessages();
917 508
918 // Ack for queued coalesced event. 509 // Ack for queued coalesced event.
919 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 510 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
920 INPUT_EVENT_ACK_STATE_CONSUMED); 511 INPUT_EVENT_ACK_STATE_CONSUMED);
921 base::MessageLoop::current()->RunUntilIdle(); 512 base::MessageLoop::current()->RunUntilIdle();
922 client_->ExpectAckCalled(1); 513 ack_handler_->ExpectAckCalled(1);
923 EXPECT_EQ(1U, process_->sink().message_count()); 514 EXPECT_EQ(1U, process_->sink().message_count());
924 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 515 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
925 InputMsg_HandleInputEvent::ID)); 516 InputMsg_HandleInputEvent::ID));
926 process_->sink().ClearMessages(); 517 process_->sink().ClearMessages();
927 518
928 // Ack for queued uncoalesced event. 519 // Ack for queued uncoalesced event.
929 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 520 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
930 INPUT_EVENT_ACK_STATE_CONSUMED); 521 INPUT_EVENT_ACK_STATE_CONSUMED);
931 base::MessageLoop::current()->RunUntilIdle(); 522 base::MessageLoop::current()->RunUntilIdle();
932 client_->ExpectAckCalled(1); 523 ack_handler_->ExpectAckCalled(1);
933 EXPECT_EQ(1U, process_->sink().message_count()); 524 EXPECT_EQ(1U, process_->sink().message_count());
934 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 525 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
935 InputMsg_HandleInputEvent::ID)); 526 InputMsg_HandleInputEvent::ID));
936 process_->sink().ClearMessages(); 527 process_->sink().ClearMessages();
937 528
938 // After the final ack, the queue should be empty. 529 // After the final ack, the queue should be empty.
939 SendInputEventACK(WebInputEvent::GestureScrollEnd, 530 SendInputEventACK(WebInputEvent::GestureScrollEnd,
940 INPUT_EVENT_ACK_STATE_CONSUMED); 531 INPUT_EVENT_ACK_STATE_CONSUMED);
941 base::MessageLoop::current()->RunUntilIdle(); 532 base::MessageLoop::current()->RunUntilIdle();
942 client_->ExpectAckCalled(1); 533 ack_handler_->ExpectAckCalled(1);
943 EXPECT_EQ(0U, process_->sink().message_count()); 534 EXPECT_EQ(0U, process_->sink().message_count());
944 } 535 }
945 536
946 TEST_F(ImmediateInputRouterTest, CoalescesScrollAndPinchEvents) { 537 TEST_F(ImmediateInputRouterTest, CoalescesScrollAndPinchEvents) {
947 // Turn off debounce handling for test isolation. 538 // Turn off debounce handling for test isolation.
948 set_debounce_interval_time_ms(0); 539 set_debounce_interval_time_ms(0);
949 540
950 // Test coalescing of only GestureScrollUpdate events. 541 // Test coalescing of only GestureScrollUpdate events.
951 // Simulate gesture events. 542 // Simulate gesture events.
952 543
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 EXPECT_EQ(0U, process_->sink().message_count()); 776 EXPECT_EQ(0U, process_->sink().message_count());
1186 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); 777 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
1187 778
1188 // GFC after previous GFS is dispatched and acked. 779 // GFC after previous GFS is dispatched and acked.
1189 process_->sink().ClearMessages(); 780 process_->sink().ClearMessages();
1190 SimulateGestureFlingStartEvent(0, -10, source_device); 781 SimulateGestureFlingStartEvent(0, -10, source_device);
1191 EXPECT_TRUE(FlingInProgress()); 782 EXPECT_TRUE(FlingInProgress());
1192 SendInputEventACK(WebInputEvent::GestureFlingStart, 783 SendInputEventACK(WebInputEvent::GestureFlingStart,
1193 INPUT_EVENT_ACK_STATE_CONSUMED); 784 INPUT_EVENT_ACK_STATE_CONSUMED);
1194 base::MessageLoop::current()->RunUntilIdle(); 785 base::MessageLoop::current()->RunUntilIdle();
1195 client_->ExpectAckCalled(1); 786 ack_handler_->ExpectAckCalled(1);
1196 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 787 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1197 EXPECT_FALSE(FlingInProgress()); 788 EXPECT_FALSE(FlingInProgress());
1198 EXPECT_EQ(2U, process_->sink().message_count()); 789 EXPECT_EQ(2U, process_->sink().message_count());
1199 SendInputEventACK(WebInputEvent::GestureFlingCancel, 790 SendInputEventACK(WebInputEvent::GestureFlingCancel,
1200 INPUT_EVENT_ACK_STATE_CONSUMED); 791 INPUT_EVENT_ACK_STATE_CONSUMED);
1201 base::MessageLoop::current()->RunUntilIdle(); 792 base::MessageLoop::current()->RunUntilIdle();
1202 client_->ExpectAckCalled(1); 793 ack_handler_->ExpectAckCalled(1);
1203 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); 794 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
1204 795
1205 // GFC before previous GFS is acked. 796 // GFC before previous GFS is acked.
1206 process_->sink().ClearMessages(); 797 process_->sink().ClearMessages();
1207 SimulateGestureFlingStartEvent(0, -10, source_device); 798 SimulateGestureFlingStartEvent(0, -10, source_device);
1208 EXPECT_TRUE(FlingInProgress()); 799 EXPECT_TRUE(FlingInProgress());
1209 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device); 800 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
1210 EXPECT_FALSE(FlingInProgress()); 801 EXPECT_FALSE(FlingInProgress());
1211 EXPECT_EQ(1U, process_->sink().message_count()); 802 EXPECT_EQ(1U, process_->sink().message_count());
1212 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); 803 EXPECT_EQ(2U, GestureEventLastQueueEventSize());
1213 804
1214 // Advance state realistically. 805 // Advance state realistically.
1215 SendInputEventACK(WebInputEvent::GestureFlingStart, 806 SendInputEventACK(WebInputEvent::GestureFlingStart,
1216 INPUT_EVENT_ACK_STATE_CONSUMED); 807 INPUT_EVENT_ACK_STATE_CONSUMED);
1217 base::MessageLoop::current()->RunUntilIdle(); 808 base::MessageLoop::current()->RunUntilIdle();
1218 SendInputEventACK(WebInputEvent::GestureFlingCancel, 809 SendInputEventACK(WebInputEvent::GestureFlingCancel,
1219 INPUT_EVENT_ACK_STATE_CONSUMED); 810 INPUT_EVENT_ACK_STATE_CONSUMED);
1220 base::MessageLoop::current()->RunUntilIdle(); 811 base::MessageLoop::current()->RunUntilIdle();
1221 client_->ExpectAckCalled(2); 812 ack_handler_->ExpectAckCalled(2);
1222 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); 813 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
1223 814
1224 // GFS is added to the queue if another event is pending 815 // GFS is added to the queue if another event is pending
1225 process_->sink().ClearMessages(); 816 process_->sink().ClearMessages();
1226 SimulateGestureScrollUpdateEvent(8, -7, 0); 817 SimulateGestureScrollUpdateEvent(8, -7, 0);
1227 SimulateGestureFlingStartEvent(0, -10, source_device); 818 SimulateGestureFlingStartEvent(0, -10, source_device);
1228 EXPECT_EQ(2U, GestureEventLastQueueEventSize()); 819 EXPECT_EQ(2U, GestureEventLastQueueEventSize());
1229 EXPECT_EQ(1U, process_->sink().message_count()); 820 EXPECT_EQ(1U, process_->sink().message_count());
1230 WebGestureEvent merged_event = GestureEventLastQueueEvent(); 821 WebGestureEvent merged_event = GestureEventLastQueueEvent();
1231 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type); 822 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 SendTouchEvent(); 1147 SendTouchEvent();
1557 client_->ExpectSendImmediatelyCalled(false); 1148 client_->ExpectSendImmediatelyCalled(false);
1558 EXPECT_EQ(0U, process_->sink().message_count()); 1149 EXPECT_EQ(0U, process_->sink().message_count());
1559 1150
1560 EXPECT_EQ(2U, TouchEventQueueSize()); 1151 EXPECT_EQ(2U, TouchEventQueueSize());
1561 1152
1562 // Receive an ACK for the first touch-event. 1153 // Receive an ACK for the first touch-event.
1563 SendInputEventACK(WebInputEvent::TouchStart, 1154 SendInputEventACK(WebInputEvent::TouchStart,
1564 INPUT_EVENT_ACK_STATE_CONSUMED); 1155 INPUT_EVENT_ACK_STATE_CONSUMED);
1565 EXPECT_EQ(1U, TouchEventQueueSize()); 1156 EXPECT_EQ(1U, TouchEventQueueSize());
1566 client_->ExpectAckCalled(1); 1157 ack_handler_->ExpectAckCalled(1);
1567 EXPECT_EQ(WebInputEvent::TouchStart, 1158 EXPECT_EQ(WebInputEvent::TouchStart,
1568 client_->acked_touch_event().event.type); 1159 ack_handler_->acked_touch_event().event.type);
1569 EXPECT_EQ(1U, process_->sink().message_count()); 1160 EXPECT_EQ(1U, process_->sink().message_count());
1570 process_->sink().ClearMessages(); 1161 process_->sink().ClearMessages();
1571 1162
1572 SendInputEventACK(WebInputEvent::TouchMove, 1163 SendInputEventACK(WebInputEvent::TouchMove,
1573 INPUT_EVENT_ACK_STATE_CONSUMED); 1164 INPUT_EVENT_ACK_STATE_CONSUMED);
1574 EXPECT_EQ(0U, TouchEventQueueSize()); 1165 EXPECT_EQ(0U, TouchEventQueueSize());
1575 client_->ExpectAckCalled(1); 1166 ack_handler_->ExpectAckCalled(1);
1576 EXPECT_EQ(WebInputEvent::TouchMove, 1167 EXPECT_EQ(WebInputEvent::TouchMove,
1577 client_->acked_touch_event().event.type); 1168 ack_handler_->acked_touch_event().event.type);
1578 EXPECT_EQ(0U, process_->sink().message_count()); 1169 EXPECT_EQ(0U, process_->sink().message_count());
1579 } 1170 }
1580 1171
1581 // Tests that the touch-queue is emptied if a page stops listening for touch 1172 // Tests that the touch-queue is emptied if a page stops listening for touch
1582 // events. 1173 // events.
1583 TEST_F(ImmediateInputRouterTest, TouchEventQueueFlush) { 1174 TEST_F(ImmediateInputRouterTest, TouchEventQueueFlush) {
1584 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 1175 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
1585 EXPECT_TRUE(client_->has_touch_handler()); 1176 EXPECT_TRUE(client_->has_touch_handler());
1586 EXPECT_EQ(0U, process_->sink().message_count()); 1177 EXPECT_EQ(0U, process_->sink().message_count());
1587 EXPECT_EQ(0U, TouchEventQueueSize()); 1178 EXPECT_EQ(0U, TouchEventQueueSize());
(...skipping 20 matching lines...) Expand all
1608 } 1199 }
1609 EXPECT_EQ(0U, process_->sink().message_count()); 1200 EXPECT_EQ(0U, process_->sink().message_count());
1610 EXPECT_EQ(32U, TouchEventQueueSize()); 1201 EXPECT_EQ(32U, TouchEventQueueSize());
1611 1202
1612 // Receive an ACK for the first touch-event. One of the queued touch-event 1203 // Receive an ACK for the first touch-event. One of the queued touch-event
1613 // should be forwarded. 1204 // should be forwarded.
1614 SendInputEventACK(WebInputEvent::TouchStart, 1205 SendInputEventACK(WebInputEvent::TouchStart,
1615 INPUT_EVENT_ACK_STATE_CONSUMED); 1206 INPUT_EVENT_ACK_STATE_CONSUMED);
1616 EXPECT_EQ(31U, TouchEventQueueSize()); 1207 EXPECT_EQ(31U, TouchEventQueueSize());
1617 EXPECT_EQ(WebInputEvent::TouchStart, 1208 EXPECT_EQ(WebInputEvent::TouchStart,
1618 client_->acked_touch_event().event.type); 1209 ack_handler_->acked_touch_event().event.type);
1619 client_->ExpectAckCalled(1); 1210 ack_handler_->ExpectAckCalled(1);
1620 EXPECT_EQ(1U, process_->sink().message_count()); 1211 EXPECT_EQ(1U, process_->sink().message_count());
1621 process_->sink().ClearMessages(); 1212 process_->sink().ClearMessages();
1622 1213
1623 // The page stops listening for touch-events. The touch-event queue should now 1214 // The page stops listening for touch-events. The touch-event queue should now
1624 // be emptied, but none of the queued touch-events should be sent to the 1215 // be emptied, but none of the queued touch-events should be sent to the
1625 // renderer. 1216 // renderer.
1626 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); 1217 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false));
1627 EXPECT_FALSE(client_->has_touch_handler()); 1218 EXPECT_FALSE(client_->has_touch_handler());
1628 EXPECT_EQ(0U, process_->sink().message_count()); 1219 EXPECT_EQ(0U, process_->sink().message_count());
1629 EXPECT_EQ(0U, TouchEventQueueSize()); 1220 EXPECT_EQ(0U, TouchEventQueueSize());
(...skipping 26 matching lines...) Expand all
1656 EXPECT_EQ(0U, process_->sink().message_count()); 1247 EXPECT_EQ(0U, process_->sink().message_count());
1657 EXPECT_EQ(3U, TouchEventQueueSize()); 1248 EXPECT_EQ(3U, TouchEventQueueSize());
1658 client_->ExpectSendImmediatelyCalled(false); 1249 client_->ExpectSendImmediatelyCalled(false);
1659 1250
1660 // ACK the press. 1251 // ACK the press.
1661 SendInputEventACK(WebInputEvent::TouchStart, 1252 SendInputEventACK(WebInputEvent::TouchStart,
1662 INPUT_EVENT_ACK_STATE_CONSUMED); 1253 INPUT_EVENT_ACK_STATE_CONSUMED);
1663 EXPECT_EQ(1U, process_->sink().message_count()); 1254 EXPECT_EQ(1U, process_->sink().message_count());
1664 EXPECT_EQ(2U, TouchEventQueueSize()); 1255 EXPECT_EQ(2U, TouchEventQueueSize());
1665 EXPECT_EQ(WebInputEvent::TouchStart, 1256 EXPECT_EQ(WebInputEvent::TouchStart,
1666 client_->acked_touch_event().event.type); 1257 ack_handler_->acked_touch_event().event.type);
1667 client_->ExpectAckCalled(1); 1258 ack_handler_->ExpectAckCalled(1);
1668 process_->sink().ClearMessages(); 1259 process_->sink().ClearMessages();
1669 1260
1670 // Coalesced touch-move events should be sent. 1261 // Coalesced touch-move events should be sent.
1671 client_->ExpectSendImmediatelyCalled(true); 1262 client_->ExpectSendImmediatelyCalled(true);
1672 EXPECT_EQ(WebInputEvent::TouchMove, 1263 EXPECT_EQ(WebInputEvent::TouchMove,
1673 client_->immediately_sent_touch_event().event.type); 1264 client_->immediately_sent_touch_event().event.type);
1674 1265
1675 // ACK the moves. 1266 // ACK the moves.
1676 SendInputEventACK(WebInputEvent::TouchMove, 1267 SendInputEventACK(WebInputEvent::TouchMove,
1677 INPUT_EVENT_ACK_STATE_CONSUMED); 1268 INPUT_EVENT_ACK_STATE_CONSUMED);
1678 EXPECT_EQ(1U, process_->sink().message_count()); 1269 EXPECT_EQ(1U, process_->sink().message_count());
1679 EXPECT_EQ(1U, TouchEventQueueSize()); 1270 EXPECT_EQ(1U, TouchEventQueueSize());
1680 EXPECT_EQ(WebInputEvent::TouchMove, 1271 EXPECT_EQ(WebInputEvent::TouchMove,
1681 client_->acked_touch_event().event.type); 1272 ack_handler_->acked_touch_event().event.type);
1682 client_->ExpectAckCalled(10); 1273 ack_handler_->ExpectAckCalled(10);
1683 process_->sink().ClearMessages(); 1274 process_->sink().ClearMessages();
1684 1275
1685 // ACK the release. 1276 // ACK the release.
1686 SendInputEventACK(WebInputEvent::TouchEnd, 1277 SendInputEventACK(WebInputEvent::TouchEnd,
1687 INPUT_EVENT_ACK_STATE_CONSUMED); 1278 INPUT_EVENT_ACK_STATE_CONSUMED);
1688 EXPECT_EQ(0U, process_->sink().message_count()); 1279 EXPECT_EQ(0U, process_->sink().message_count());
1689 EXPECT_EQ(0U, TouchEventQueueSize()); 1280 EXPECT_EQ(0U, TouchEventQueueSize());
1690 EXPECT_EQ(WebInputEvent::TouchEnd, 1281 EXPECT_EQ(WebInputEvent::TouchEnd,
1691 client_->acked_touch_event().event.type); 1282 ack_handler_->acked_touch_event().event.type);
1692 client_->ExpectAckCalled(1); 1283 ack_handler_->ExpectAckCalled(1);
1693 } 1284 }
1694 1285
1695 // Tests that an event that has already been sent but hasn't been ack'ed yet 1286 // Tests that an event that has already been sent but hasn't been ack'ed yet
1696 // doesn't get coalesced with newer events. 1287 // doesn't get coalesced with newer events.
1697 TEST_F(ImmediateInputRouterTest, SentTouchEventDoesNotCoalesce) { 1288 TEST_F(ImmediateInputRouterTest, SentTouchEventDoesNotCoalesce) {
1698 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 1289 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
1699 EXPECT_EQ(0U, process_->sink().message_count()); 1290 EXPECT_EQ(0U, process_->sink().message_count());
1700 EXPECT_EQ(0U, TouchEventQueueSize()); 1291 EXPECT_EQ(0U, TouchEventQueueSize());
1701 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent()); 1292 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent());
1702 1293
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 SendTouchEvent(); 1428 SendTouchEvent();
1838 EXPECT_EQ(0U, process_->sink().message_count()); 1429 EXPECT_EQ(0U, process_->sink().message_count());
1839 EXPECT_EQ(2U, TouchEventQueueSize()); 1430 EXPECT_EQ(2U, TouchEventQueueSize());
1840 1431
1841 // Receive an ACK for the first touch-event. This should release the queued 1432 // Receive an ACK for the first touch-event. This should release the queued
1842 // touch-event, but it should not be sent to the renderer. 1433 // touch-event, but it should not be sent to the renderer.
1843 SendInputEventACK(WebInputEvent::TouchStart, 1434 SendInputEventACK(WebInputEvent::TouchStart,
1844 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1435 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1845 EXPECT_EQ(0U, TouchEventQueueSize()); 1436 EXPECT_EQ(0U, TouchEventQueueSize());
1846 EXPECT_EQ(WebInputEvent::TouchMove, 1437 EXPECT_EQ(WebInputEvent::TouchMove,
1847 client_->acked_touch_event().event.type); 1438 ack_handler_->acked_touch_event().event.type);
1848 client_->ExpectAckCalled(2); 1439 ack_handler_->ExpectAckCalled(2);
1849 EXPECT_EQ(0U, process_->sink().message_count()); 1440 EXPECT_EQ(0U, process_->sink().message_count());
1850 process_->sink().ClearMessages(); 1441 process_->sink().ClearMessages();
1851 1442
1852 // Send a release event. This should not reach the renderer. 1443 // Send a release event. This should not reach the renderer.
1853 ReleaseTouchPoint(0); 1444 ReleaseTouchPoint(0);
1854 SendTouchEvent(); 1445 SendTouchEvent();
1855 EXPECT_EQ(0U, process_->sink().message_count()); 1446 EXPECT_EQ(0U, process_->sink().message_count());
1856 EXPECT_EQ(WebInputEvent::TouchEnd, 1447 EXPECT_EQ(WebInputEvent::TouchEnd,
1857 client_->acked_touch_event().event.type); 1448 ack_handler_->acked_touch_event().event.type);
1858 client_->ExpectAckCalled(1); 1449 ack_handler_->ExpectAckCalled(1);
1859 1450
1860 // Send a press-event, followed by move and release events, and another press 1451 // Send a press-event, followed by move and release events, and another press
1861 // event, before the ACK for the first press event comes back. All of the 1452 // event, before the ACK for the first press event comes back. All of the
1862 // events should be queued first. After the NO_CONSUMER ack for the first 1453 // events should be queued first. After the NO_CONSUMER ack for the first
1863 // touch-press, all events upto the second touch-press should be flushed. 1454 // touch-press, all events upto the second touch-press should be flushed.
1864 PressTouchPoint(10, 10); 1455 PressTouchPoint(10, 10);
1865 SendTouchEvent(); 1456 SendTouchEvent();
1866 EXPECT_EQ(1U, process_->sink().message_count()); 1457 EXPECT_EQ(1U, process_->sink().message_count());
1867 process_->sink().ClearMessages(); 1458 process_->sink().ClearMessages();
1868 1459
1869 MoveTouchPoint(0, 5, 5); 1460 MoveTouchPoint(0, 5, 5);
1870 SendTouchEvent(); 1461 SendTouchEvent();
1871 MoveTouchPoint(0, 6, 5); 1462 MoveTouchPoint(0, 6, 5);
1872 SendTouchEvent(); 1463 SendTouchEvent();
1873 ReleaseTouchPoint(0); 1464 ReleaseTouchPoint(0);
1874 SendTouchEvent(); 1465 SendTouchEvent();
1875 1466
1876 PressTouchPoint(6, 5); 1467 PressTouchPoint(6, 5);
1877 SendTouchEvent(); 1468 SendTouchEvent();
1878 EXPECT_EQ(0U, process_->sink().message_count()); 1469 EXPECT_EQ(0U, process_->sink().message_count());
1879 // The queue should hold the first sent touch-press event, the coalesced 1470 // The queue should hold the first sent touch-press event, the coalesced
1880 // touch-move event, the touch-end event and the second touch-press event. 1471 // touch-move event, the touch-end event and the second touch-press event.
1881 EXPECT_EQ(4U, TouchEventQueueSize()); 1472 EXPECT_EQ(4U, TouchEventQueueSize());
1882 1473
1883 SendInputEventACK(WebInputEvent::TouchStart, 1474 SendInputEventACK(WebInputEvent::TouchStart,
1884 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1475 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1885 EXPECT_EQ(1U, process_->sink().message_count()); 1476 EXPECT_EQ(1U, process_->sink().message_count());
1886 EXPECT_EQ(WebInputEvent::TouchEnd, client_->acked_touch_event().event.type); 1477 EXPECT_EQ(WebInputEvent::TouchEnd,
1887 client_->ExpectAckCalled(4); 1478 ack_handler_->acked_touch_event().event.type);
1479 ack_handler_->ExpectAckCalled(4);
1888 EXPECT_EQ(1U, TouchEventQueueSize()); 1480 EXPECT_EQ(1U, TouchEventQueueSize());
1889 process_->sink().ClearMessages(); 1481 process_->sink().ClearMessages();
1890 1482
1891 // ACK the second press event as NO_CONSUMER too. 1483 // ACK the second press event as NO_CONSUMER too.
1892 SendInputEventACK(WebInputEvent::TouchStart, 1484 SendInputEventACK(WebInputEvent::TouchStart,
1893 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1485 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1894 EXPECT_EQ(0U, process_->sink().message_count()); 1486 EXPECT_EQ(0U, process_->sink().message_count());
1895 EXPECT_EQ(WebInputEvent::TouchStart, client_->acked_touch_event().event.type); 1487 EXPECT_EQ(WebInputEvent::TouchStart,
1896 client_->ExpectAckCalled(1); 1488 ack_handler_->acked_touch_event().event.type);
1489 ack_handler_->ExpectAckCalled(1);
1897 EXPECT_EQ(0U, TouchEventQueueSize()); 1490 EXPECT_EQ(0U, TouchEventQueueSize());
1898 1491
1899 // Send a second press event. Even though the first touch had NO_CONSUMER, 1492 // Send a second press event. Even though the first touch had NO_CONSUMER,
1900 // this press event should reach the renderer. 1493 // this press event should reach the renderer.
1901 PressTouchPoint(1, 1); 1494 PressTouchPoint(1, 1);
1902 SendTouchEvent(); 1495 SendTouchEvent();
1903 EXPECT_EQ(1U, process_->sink().message_count()); 1496 EXPECT_EQ(1U, process_->sink().message_count());
1904 EXPECT_EQ(1U, TouchEventQueueSize()); 1497 EXPECT_EQ(1U, TouchEventQueueSize());
1905 } 1498 }
1906 1499
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2023 MoveTouchPoint(1, 30, 30); 1616 MoveTouchPoint(1, 30, 30);
2024 SendTouchEvent(); 1617 SendTouchEvent();
2025 EXPECT_EQ(0U, process_->sink().message_count()); 1618 EXPECT_EQ(0U, process_->sink().message_count());
2026 EXPECT_EQ(4U, TouchEventQueueSize()); 1619 EXPECT_EQ(4U, TouchEventQueueSize());
2027 1620
2028 SendInputEventACK(WebInputEvent::TouchEnd, 1621 SendInputEventACK(WebInputEvent::TouchEnd,
2029 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1622 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2030 EXPECT_EQ(1U, process_->sink().message_count()); 1623 EXPECT_EQ(1U, process_->sink().message_count());
2031 EXPECT_EQ(2U, TouchEventQueueSize()); 1624 EXPECT_EQ(2U, TouchEventQueueSize());
2032 EXPECT_EQ(WebInputEvent::TouchMove, 1625 EXPECT_EQ(WebInputEvent::TouchMove,
2033 client_->acked_touch_event().event.type); 1626 ack_handler_->acked_touch_event().event.type);
2034 process_->sink().ClearMessages(); 1627 process_->sink().ClearMessages();
2035 1628
2036 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued 1629 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued
2037 // touch-move events to the view. 1630 // touch-move events to the view.
2038 SendInputEventACK(WebInputEvent::TouchStart, 1631 SendInputEventACK(WebInputEvent::TouchStart,
2039 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 1632 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
2040 EXPECT_EQ(0U, process_->sink().message_count()); 1633 EXPECT_EQ(0U, process_->sink().message_count());
2041 EXPECT_EQ(0U, TouchEventQueueSize()); 1634 EXPECT_EQ(0U, TouchEventQueueSize());
2042 EXPECT_EQ(WebInputEvent::TouchMove, 1635 EXPECT_EQ(WebInputEvent::TouchMove,
2043 client_->acked_touch_event().event.type); 1636 ack_handler_->acked_touch_event().event.type);
2044 1637
2045 ReleaseTouchPoint(2); 1638 ReleaseTouchPoint(2);
2046 ReleaseTouchPoint(1); 1639 ReleaseTouchPoint(1);
2047 EXPECT_EQ(0U, process_->sink().message_count()); 1640 EXPECT_EQ(0U, process_->sink().message_count());
2048 EXPECT_EQ(0U, TouchEventQueueSize()); 1641 EXPECT_EQ(0U, TouchEventQueueSize());
2049 } 1642 }
2050 1643
2051 #if defined(OS_WIN) || defined(USE_AURA) 1644 #if defined(OS_WIN) || defined(USE_AURA)
2052 // Tests that the acked events have correct state. (ui::Events are used only on 1645 // Tests that the acked events have correct state. (ui::Events are used only on
2053 // windows and aura) 1646 // windows and aura)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 WebInputEvent::TouchStart, 1704 WebInputEvent::TouchStart,
2112 WebInputEvent::TouchMove }; 1705 WebInputEvent::TouchMove };
2113 1706
2114 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES; 1707 TouchEventCoordinateSystem coordinate_system = LOCAL_COORDINATES;
2115 #if !defined(OS_WIN) 1708 #if !defined(OS_WIN)
2116 coordinate_system = SCREEN_COORDINATES; 1709 coordinate_system = SCREEN_COORDINATES;
2117 #endif 1710 #endif
2118 for (size_t i = 0; i < arraysize(acks); ++i) { 1711 for (size_t i = 0; i < arraysize(acks); ++i) {
2119 SendInputEventACK(acks[i], 1712 SendInputEventACK(acks[i],
2120 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1713 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2121 EXPECT_EQ(acks[i], client_->acked_touch_event().event.type); 1714 EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type);
2122 ScopedVector<ui::TouchEvent> acked; 1715 ScopedVector<ui::TouchEvent> acked;
2123 1716
2124 MakeUITouchEventsFromWebTouchEvents( 1717 MakeUITouchEventsFromWebTouchEvents(
2125 client_->acked_touch_event(), &acked, coordinate_system); 1718 ack_handler_->acked_touch_event(), &acked, coordinate_system);
2126 bool success = EventListIsSubset(acked, expected_events); 1719 bool success = EventListIsSubset(acked, expected_events);
2127 EXPECT_TRUE(success) << "Failed on step: " << i; 1720 EXPECT_TRUE(success) << "Failed on step: " << i;
2128 if (!success) 1721 if (!success)
2129 break; 1722 break;
2130 expected_events.erase(expected_events.begin(), 1723 expected_events.erase(expected_events.begin(),
2131 expected_events.begin() + acked.size()); 1724 expected_events.begin() + acked.size());
2132 } 1725 }
2133 1726
2134 EXPECT_EQ(0U, expected_events.size()); 1727 EXPECT_EQ(0U, expected_events.size());
2135 } 1728 }
2136 #endif // defined(OS_WIN) || defined(USE_AURA) 1729 #endif // defined(OS_WIN) || defined(USE_AURA)
2137 1730
2138 TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) { 1731 TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) {
2139 // Simulate wheel events. 1732 // Simulate wheel events.
2140 SimulateWheelEvent(0, -5, 0, false); // sent directly 1733 SimulateWheelEvent(0, -5, 0, false); // sent directly
2141 SimulateWheelEvent(0, -10, 0, false); // enqueued 1734 SimulateWheelEvent(0, -10, 0, false); // enqueued
2142 1735
2143 // Check that only the first event was sent. 1736 // Check that only the first event was sent.
2144 EXPECT_EQ(1U, process_->sink().message_count()); 1737 EXPECT_EQ(1U, process_->sink().message_count());
2145 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 1738 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
2146 InputMsg_HandleInputEvent::ID)); 1739 InputMsg_HandleInputEvent::ID));
2147 process_->sink().ClearMessages(); 1740 process_->sink().ClearMessages();
2148 1741
2149 // Indicate that the wheel event was unhandled. 1742 // Indicate that the wheel event was unhandled.
2150 SendInputEventACK(WebInputEvent::MouseWheel, 1743 SendInputEventACK(WebInputEvent::MouseWheel,
2151 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1744 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2152 1745
2153 // Check that the correct unhandled wheel event was received. 1746 // Check that the correct unhandled wheel event was received.
2154 client_->ExpectAckCalled(1); 1747 ack_handler_->ExpectAckCalled(1);
2155 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, client_->ack_state()); 1748 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state());
2156 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5); 1749 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
2157 1750
2158 // Check that the second event was sent. 1751 // Check that the second event was sent.
2159 EXPECT_EQ(1U, process_->sink().message_count()); 1752 EXPECT_EQ(1U, process_->sink().message_count());
2160 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 1753 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
2161 InputMsg_HandleInputEvent::ID)); 1754 InputMsg_HandleInputEvent::ID));
2162 process_->sink().ClearMessages(); 1755 process_->sink().ClearMessages();
2163 1756
2164 // Check that the correct unhandled wheel event was received. 1757 // Check that the correct unhandled wheel event was received.
2165 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5); 1758 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
2166 } 1759 }
2167 1760
2168 } // namespace content 1761 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698