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