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

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

Issue 19220002: [WIP] BufferedInputRouter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix client assignment Created 7 years, 3 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 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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/immediate_input_router.cc ('k') | content/browser/renderer_host/input/input_ack_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698