Chromium Code Reviews| Index: content/browser/renderer_host/input/immediate_input_router_unittest.cc | 
| diff --git a/content/browser/renderer_host/input/immediate_input_router_unittest.cc b/content/browser/renderer_host/input/immediate_input_router_unittest.cc | 
| index b464bc06e279f55505aeb2426329f4f00730daec..eb9ef59ff4590dc42849115962404e900af49148 100644 | 
| --- a/content/browser/renderer_host/input/immediate_input_router_unittest.cc | 
| +++ b/content/browser/renderer_host/input/immediate_input_router_unittest.cc | 
| @@ -149,8 +149,8 @@ class ImmediateInputRouterTest : public InputRouterTest { | 
| input_router()->enable_no_touch_to_renderer_while_scrolling_ = true; | 
| } | 
| - bool no_touch_move_to_renderer() { | 
| - return touch_event_queue()->no_touch_move_to_renderer_; | 
| + bool no_touch_to_renderer() { | 
| + return touch_event_queue()->no_touch_to_renderer_; | 
| } | 
| TouchEventQueue* touch_event_queue() const { | 
| @@ -1851,8 +1851,8 @@ TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) { | 
| EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); | 
| } | 
| -// Tests that no touch move events are sent to renderer during scrolling. | 
| -TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) { | 
| +// Tests that no touch events are sent to renderer during scrolling. | 
| +TEST_F(ImmediateInputRouterTest, NoTouchWhileScroll) { | 
| EnableNoTouchToRendererWhileScrolling(); | 
| set_debounce_interval_time_ms(0); | 
| input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); | 
| @@ -1871,16 +1871,40 @@ TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) { | 
| SendTouchEvent(); | 
| EXPECT_EQ(1U, process_->sink().message_count()); | 
| process_->sink().ClearMessages(); | 
| + | 
| + WebGestureEvent followup_scroll; | 
| + followup_scroll.type = WebInputEvent::GestureScrollBegin; | 
| + ack_handler_->set_followup_touch_event(make_scoped_ptr( | 
| + new GestureEventWithLatencyInfo(followup_scroll, ui::LatencyInfo()))); | 
| + | 
| SendInputEventACK(WebInputEvent::TouchMove, | 
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| - | 
| - SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
| - WebGestureEvent::Touchscreen); | 
| - EXPECT_EQ(1U, process_->sink().message_count()); | 
| - EXPECT_TRUE(no_touch_move_to_renderer()); | 
| + // GestureScroll inserts touch cancel into the queue. | 
| + EXPECT_EQ(1U, TouchEventQueueSize()); | 
| + EXPECT_EQ(latest_event().type, WebInputEvent::TouchCancel); | 
| + EXPECT_EQ(2U, process_->sink().message_count()); | 
| + // TouchCancel is sent first, then the ScrollBegin. | 
| + const WebInputEvent* input_event = | 
| + GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); | 
| + EXPECT_EQ(input_event->type, WebInputEvent::TouchCancel); | 
| + input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(1)); | 
| + EXPECT_EQ(input_event->type, WebInputEvent::GestureScrollBegin); | 
| + EXPECT_TRUE(no_touch_to_renderer()); | 
| process_->sink().ClearMessages(); | 
| + | 
| + // Clear the followup events since now the touch events are directly | 
| + // sent to client, instead of being sent to renderer and waiting for | 
| + // ack. So we should use SimulateGestureScrollUpdateEvent() instead of | 
| + // followup gesture events. | 
| + ack_handler_->set_followup_touch_event(make_scoped_ptr( | 
| + static_cast<GestureEventWithLatencyInfo*>(NULL))); | 
| + SendInputEventACK(WebInputEvent::TouchCancel, | 
| + INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| SendInputEventACK(WebInputEvent::GestureScrollBegin, | 
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| + EXPECT_EQ(0U, TouchEventQueueSize()); | 
| + EXPECT_EQ(0U, process_->sink().message_count()); | 
| + process_->sink().ClearMessages(); | 
| 
 
sadrul
2013/09/27 15:13:51
Can you check that the cancel event didn't go to t
 
Yufeng Shen (Slow to review)
2013/09/30 20:43:14
Done.
 
 | 
| // Touch move should not be sent to renderer. | 
| MoveTouchPoint(0, 30, 5); | 
| @@ -1890,30 +1914,21 @@ TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) { | 
| // Touch moves become ScrollUpdate. | 
| SimulateGestureScrollUpdateEvent(20, 4, 0); | 
| - EXPECT_TRUE(no_touch_move_to_renderer()); | 
| process_->sink().ClearMessages(); | 
| SendInputEventACK(WebInputEvent::GestureScrollUpdate, | 
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| - // Touch move should not be sent to renderer. | 
| - MoveTouchPoint(0, 65, 10); | 
| - SendTouchEvent(); | 
| - EXPECT_EQ(0U, process_->sink().message_count()); | 
| - process_->sink().ClearMessages(); | 
| - | 
| - // Touch end should still be sent to renderer. | 
| + // Touch end should not be sent to renderer. | 
| ReleaseTouchPoint(0); | 
| SendTouchEvent(); | 
| - EXPECT_EQ(1U, process_->sink().message_count()); | 
| + EXPECT_EQ(0U, process_->sink().message_count()); | 
| process_->sink().ClearMessages(); | 
| - SendInputEventACK(WebInputEvent::TouchEnd, | 
| - INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| // On GestureScrollEnd, resume sending touch moves to renderer. | 
| SimulateGestureEvent(WebKit::WebInputEvent::GestureScrollEnd, | 
| WebGestureEvent::Touchscreen); | 
| EXPECT_EQ(1U, process_->sink().message_count()); | 
| - EXPECT_FALSE(no_touch_move_to_renderer()); | 
| + EXPECT_FALSE(no_touch_to_renderer()); | 
| process_->sink().ClearMessages(); | 
| SendInputEventACK(WebInputEvent::GestureScrollEnd, | 
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |