| 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/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/browser/renderer_host/input/gesture_event_queue.h" | 9 #include "content/browser/renderer_host/input/gesture_event_queue.h" |
| 10 #include "content/browser/renderer_host/input/input_router_client.h" | 10 #include "content/browser/renderer_host/input/input_router_client.h" |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 input_router_->OnMessageReceived( | 281 input_router_->OnMessageReceived( |
| 282 InputHostMsg_SetTouchAction(0, touch_action)); | 282 InputHostMsg_SetTouchAction(0, touch_action)); |
| 283 } | 283 } |
| 284 | 284 |
| 285 size_t GetSentMessageCountAndResetSink() { | 285 size_t GetSentMessageCountAndResetSink() { |
| 286 size_t count = process_->sink().message_count(); | 286 size_t count = process_->sink().message_count(); |
| 287 process_->sink().ClearMessages(); | 287 process_->sink().ClearMessages(); |
| 288 return count; | 288 return count; |
| 289 } | 289 } |
| 290 | 290 |
| 291 static void Wait(base::TimeDelta delay) { | 291 static void RunTasksAndWait(base::TimeDelta delay) { |
| 292 base::MessageLoop::current()->PostDelayedTask( | 292 base::MessageLoop::current()->PostDelayedTask( |
| 293 FROM_HERE, base::MessageLoop::QuitClosure(), delay); | 293 FROM_HERE, base::MessageLoop::QuitClosure(), delay); |
| 294 base::MessageLoop::current()->Run(); | 294 base::MessageLoop::current()->Run(); |
| 295 } | 295 } |
| 296 | 296 |
| 297 scoped_ptr<MockRenderProcessHost> process_; | 297 scoped_ptr<MockRenderProcessHost> process_; |
| 298 scoped_ptr<MockInputRouterClient> client_; | 298 scoped_ptr<MockInputRouterClient> client_; |
| 299 scoped_ptr<MockInputAckHandler> ack_handler_; | 299 scoped_ptr<MockInputAckHandler> ack_handler_; |
| 300 scoped_ptr<InputRouterImpl> input_router_; | 300 scoped_ptr<InputRouterImpl> input_router_; |
| 301 | 301 |
| (...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 } | 998 } |
| 999 | 999 |
| 1000 // Test that touch ack timeout behavior is properly configured via the command | 1000 // Test that touch ack timeout behavior is properly configured via the command |
| 1001 // line, and toggled by view update flags and allowed touch actions. | 1001 // line, and toggled by view update flags and allowed touch actions. |
| 1002 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) { | 1002 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) { |
| 1003 // Unless explicitly supported via the command-line, the touch timeout should | 1003 // Unless explicitly supported via the command-line, the touch timeout should |
| 1004 // be disabled. | 1004 // be disabled. |
| 1005 EXPECT_FALSE(TouchEventTimeoutEnabled()); | 1005 EXPECT_FALSE(TouchEventTimeoutEnabled()); |
| 1006 | 1006 |
| 1007 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1007 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1008 switches::kTouchAckTimeoutDelayMs, "5"); | 1008 switches::kTouchAckTimeoutDelayMs, "1"); |
| 1009 TearDown(); | 1009 TearDown(); |
| 1010 SetUp(); | 1010 SetUp(); |
| 1011 ASSERT_TRUE(TouchEventTimeoutEnabled()); | 1011 ASSERT_TRUE(TouchEventTimeoutEnabled()); |
| 1012 | 1012 |
| 1013 // Verify that the touch ack timeout fires upon the delayed ack. | 1013 // Verify that the touch ack timeout fires upon the delayed ack. |
| 1014 PressTouchPoint(1, 1); | 1014 PressTouchPoint(1, 1); |
| 1015 SendTouchEvent(); | 1015 SendTouchEvent(); |
| 1016 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1016 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1017 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1017 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1018 Wait(base::TimeDelta::FromMilliseconds(15)); | 1018 RunTasksAndWait(base::TimeDelta::FromMilliseconds(2)); |
| 1019 | 1019 |
| 1020 // The timed-out event should have been ack'ed. | 1020 // The timed-out event should have been ack'ed. |
| 1021 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1021 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1022 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1022 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1023 | 1023 |
| 1024 // Ack'ing the timed-out event should fire a TouchCancel. | 1024 // Ack'ing the timed-out event should fire a TouchCancel. |
| 1025 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 1025 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1026 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1026 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1027 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1027 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1028 | 1028 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 PressTouchPoint(1, 1); | 1075 PressTouchPoint(1, 1); |
| 1076 SendTouchEvent(); | 1076 SendTouchEvent(); |
| 1077 EXPECT_TRUE(TouchEventTimeoutEnabled()); | 1077 EXPECT_TRUE(TouchEventTimeoutEnabled()); |
| 1078 } | 1078 } |
| 1079 | 1079 |
| 1080 // Test that a touch sequenced preceded by TOUCH_ACTION_NONE is not affected by | 1080 // Test that a touch sequenced preceded by TOUCH_ACTION_NONE is not affected by |
| 1081 // the touch timeout. | 1081 // the touch timeout. |
| 1082 TEST_F(InputRouterImplTest, | 1082 TEST_F(InputRouterImplTest, |
| 1083 TouchAckTimeoutDisabledForTouchSequenceAfterTouchActionNone) { | 1083 TouchAckTimeoutDisabledForTouchSequenceAfterTouchActionNone) { |
| 1084 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1084 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1085 switches::kTouchAckTimeoutDelayMs, "5"); | 1085 switches::kTouchAckTimeoutDelayMs, "1"); |
| 1086 TearDown(); | 1086 TearDown(); |
| 1087 SetUp(); | 1087 SetUp(); |
| 1088 ASSERT_TRUE(TouchEventTimeoutEnabled()); | 1088 ASSERT_TRUE(TouchEventTimeoutEnabled()); |
| 1089 OnHasTouchEventHandlers(true); | 1089 OnHasTouchEventHandlers(true); |
| 1090 | 1090 |
| 1091 // Start a touch sequence. | 1091 // Start a touch sequence. |
| 1092 PressTouchPoint(1, 1); | 1092 PressTouchPoint(1, 1); |
| 1093 SendTouchEvent(); | 1093 SendTouchEvent(); |
| 1094 | 1094 |
| 1095 // TOUCH_ACTION_NONE should disable the timeout. | 1095 // TOUCH_ACTION_NONE should disable the timeout. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1107 | 1107 |
| 1108 // Start another touch sequence. While this does restore the touch timeout | 1108 // Start another touch sequence. While this does restore the touch timeout |
| 1109 // the timeout will not apply until the *next* touch sequence. This affords a | 1109 // the timeout will not apply until the *next* touch sequence. This affords a |
| 1110 // touch-action response from the renderer without racing against the timeout. | 1110 // touch-action response from the renderer without racing against the timeout. |
| 1111 PressTouchPoint(1, 1); | 1111 PressTouchPoint(1, 1); |
| 1112 SendTouchEvent(); | 1112 SendTouchEvent(); |
| 1113 EXPECT_TRUE(TouchEventTimeoutEnabled()); | 1113 EXPECT_TRUE(TouchEventTimeoutEnabled()); |
| 1114 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1114 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1115 | 1115 |
| 1116 // Delay the ack. The timeout should *not* fire. | 1116 // Delay the ack. The timeout should *not* fire. |
| 1117 Wait(base::TimeDelta::FromMilliseconds(15)); | 1117 RunTasksAndWait(base::TimeDelta::FromMilliseconds(2)); |
| 1118 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1118 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1119 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1119 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1120 | 1120 |
| 1121 // Finally send the ack. The touch sequence should not have been cancelled. | 1121 // Finally send the ack. The touch sequence should not have been cancelled. |
| 1122 SendInputEventACK(WebInputEvent::TouchStart, | 1122 SendInputEventACK(WebInputEvent::TouchStart, |
| 1123 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1123 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1124 EXPECT_TRUE(TouchEventTimeoutEnabled()); | 1124 EXPECT_TRUE(TouchEventTimeoutEnabled()); |
| 1125 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1125 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1126 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 1126 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 1127 | 1127 |
| 1128 // End the sequence. | 1128 // End the sequence. |
| 1129 ReleaseTouchPoint(0); | 1129 ReleaseTouchPoint(0); |
| 1130 SendTouchEvent(); | 1130 SendTouchEvent(); |
| 1131 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); | 1131 SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1132 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1132 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1133 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1133 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1134 | 1134 |
| 1135 // A new touch sequence should (finally) be subject to the timeout. | 1135 // A new touch sequence should (finally) be subject to the timeout. |
| 1136 PressTouchPoint(1, 1); | 1136 PressTouchPoint(1, 1); |
| 1137 SendTouchEvent(); | 1137 SendTouchEvent(); |
| 1138 EXPECT_TRUE(TouchEventTimeoutEnabled()); | 1138 EXPECT_TRUE(TouchEventTimeoutEnabled()); |
| 1139 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 1139 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
| 1140 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 1140 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 1141 | 1141 |
| 1142 // Wait for the touch ack timeout to fire. | 1142 // Wait for the touch ack timeout to fire. |
| 1143 Wait(base::TimeDelta::FromMilliseconds(15)); | 1143 RunTasksAndWait(base::TimeDelta::FromMilliseconds(2)); |
| 1144 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 1144 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 1145 } | 1145 } |
| 1146 | 1146 |
| 1147 // Test that TouchActionFilter::ResetTouchAction is called before the | 1147 // Test that TouchActionFilter::ResetTouchAction is called before the |
| 1148 // first touch event for a touch sequence reaches the renderer. | 1148 // first touch event for a touch sequence reaches the renderer. |
| 1149 TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) { | 1149 TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) { |
| 1150 OnHasTouchEventHandlers(true); | 1150 OnHasTouchEventHandlers(true); |
| 1151 | 1151 |
| 1152 // Sequence 1. | 1152 // Sequence 1. |
| 1153 PressTouchPoint(1, 1); | 1153 PressTouchPoint(1, 1); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1291 // dispatched, because the first tap occured when the touch-action was none. | 1291 // dispatched, because the first tap occured when the touch-action was none. |
| 1292 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, | 1292 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, |
| 1293 WebGestureEvent::Touchscreen); | 1293 WebGestureEvent::Touchscreen); |
| 1294 // This test will become invalid if GestureDoubleTap stops requiring an ack. | 1294 // This test will become invalid if GestureDoubleTap stops requiring an ack. |
| 1295 DCHECK(!WebInputEventTraits::IgnoresAckDisposition( | 1295 DCHECK(!WebInputEventTraits::IgnoresAckDisposition( |
| 1296 WebInputEvent::GestureDoubleTap)); | 1296 WebInputEvent::GestureDoubleTap)); |
| 1297 EXPECT_EQ(0, client_->in_flight_event_count()); | 1297 EXPECT_EQ(0, client_->in_flight_event_count()); |
| 1298 } | 1298 } |
| 1299 | 1299 |
| 1300 } // namespace content | 1300 } // namespace content |
| OLD | NEW |