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

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

Issue 183923034: Disable the touch ack timeout for touch-action:none (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Slight ordering tweak. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/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 974 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 985
986 SendInputEventACK(WebInputEvent::GesturePinchUpdate, 986 SendInputEventACK(WebInputEvent::GesturePinchUpdate,
987 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 987 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
988 // Now that the Tap has been ACKed, the ShowPress events should receive 988 // Now that the Tap has been ACKed, the ShowPress events should receive
989 // synthetic acks, and fire immediately. 989 // synthetic acks, and fire immediately.
990 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); 990 EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
991 EXPECT_EQ(3U, ack_handler_->GetAndResetAckCount()); 991 EXPECT_EQ(3U, ack_handler_->GetAndResetAckCount());
992 } 992 }
993 993
994 // Test that touch ack timeout behavior is properly configured via the command 994 // Test that touch ack timeout behavior is properly configured via the command
995 // line, and toggled by the view update flags. 995 // line, and toggled by view update flags and allowed touch actions.
996 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) { 996 TEST_F(InputRouterImplTest, TouchAckTimeoutConfigured) {
997 // Unless explicitly supported via the command-line, the touch timeout should
998 // be disabled.
999 EXPECT_FALSE(TouchEventTimeoutEnabled());
1000
997 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1001 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
998 switches::kTouchAckTimeoutDelayMs, "5"); 1002 switches::kTouchAckTimeoutDelayMs, "5");
999 TearDown(); 1003 TearDown();
1000 SetUp(); 1004 SetUp();
1001 ASSERT_TRUE(TouchEventTimeoutEnabled()); 1005 ASSERT_TRUE(TouchEventTimeoutEnabled());
1002 1006
1003 // A fixed page scale or mobile viewport should disable the touch timeout. 1007 // A fixed page scale or mobile viewport should disable the touch timeout.
1004 input_router()->OnViewUpdated(InputRouter::FIXED_PAGE_SCALE); 1008 input_router()->OnViewUpdated(InputRouter::FIXED_PAGE_SCALE);
1005 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1009 EXPECT_FALSE(TouchEventTimeoutEnabled());
1006 1010
1007 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE); 1011 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE);
1008 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1012 EXPECT_TRUE(TouchEventTimeoutEnabled());
1009 1013
1010 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT); 1014 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT);
1011 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1015 EXPECT_FALSE(TouchEventTimeoutEnabled());
1012 1016
1013 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT | 1017 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT |
1014 InputRouter::FIXED_PAGE_SCALE); 1018 InputRouter::FIXED_PAGE_SCALE);
1015 EXPECT_FALSE(TouchEventTimeoutEnabled()); 1019 EXPECT_FALSE(TouchEventTimeoutEnabled());
1016 1020
1017 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE); 1021 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE);
1018 EXPECT_TRUE(TouchEventTimeoutEnabled()); 1022 EXPECT_TRUE(TouchEventTimeoutEnabled());
1023
1024 // TOUCH_ACTION_NONE should disable the touch timeout.
1025 OnHasTouchEventHandlers(true);
1026 PressTouchPoint(1, 1);
1027 SendTouchEvent();
1028 OnSetTouchAction(TOUCH_ACTION_NONE);
1029 EXPECT_FALSE(TouchEventTimeoutEnabled());
1030 ReleaseTouchPoint(0);
1031 SendTouchEvent();
1032 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
1033 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
1034
1035 // As the touch-action is reset by a new touch sequence, the timeout behavior
1036 // should be restored. (Note that this is not entirely accurate: the timeout
1037 // will be enabled just *after* the new event has been forwarded from the
1038 // TouchEventQueue to the router, so the timeout won't actually take
1039 // meaningful effect until the following touch event is sent).
Rick Byers 2014/03/05 21:24:23 We both agree we like this property. Perhaps make
jdduke (slow) 2014/03/06 00:15:25 Definitely, added a test.
1040 PressTouchPoint(1, 1);
1041 SendTouchEvent();
1042 EXPECT_TRUE(TouchEventTimeoutEnabled());
1043 ReleaseTouchPoint(0);
1044 SendTouchEvent();
1045 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
1046 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
1047
1048 // Only TOUCH_ACTION_NONE should disable the timeout.
1049 PressTouchPoint(1, 1);
1050 SendTouchEvent();
1051 OnSetTouchAction(TOUCH_ACTION_PAN_Y);
1052 EXPECT_TRUE(TouchEventTimeoutEnabled());
1019 } 1053 }
1020 1054
1021 // Test that TouchActionFilter::ResetTouchAction is called before the 1055 // Test that TouchActionFilter::ResetTouchAction is called before the
1022 // first touch event for a touch sequence reaches the renderer. 1056 // first touch event for a touch sequence reaches the renderer.
1023 TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) { 1057 TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) {
1024 OnHasTouchEventHandlers(true); 1058 OnHasTouchEventHandlers(true);
1025 1059
1026 // Sequence 1. 1060 // Sequence 1.
1027 PressTouchPoint(1, 1); 1061 PressTouchPoint(1, 1);
1028 SendTouchEvent(); 1062 SendTouchEvent();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 // dispatched, because the first tap occured when the touch-action was none. 1199 // dispatched, because the first tap occured when the touch-action was none.
1166 SimulateGestureEvent(WebInputEvent::GestureDoubleTap, 1200 SimulateGestureEvent(WebInputEvent::GestureDoubleTap,
1167 WebGestureEvent::Touchscreen); 1201 WebGestureEvent::Touchscreen);
1168 // This test will become invalid if GestureDoubleTap stops requiring an ack. 1202 // This test will become invalid if GestureDoubleTap stops requiring an ack.
1169 DCHECK(!WebInputEventTraits::IgnoresAckDisposition( 1203 DCHECK(!WebInputEventTraits::IgnoresAckDisposition(
1170 WebInputEvent::GestureDoubleTap)); 1204 WebInputEvent::GestureDoubleTap));
1171 EXPECT_EQ(0, client_->in_flight_event_count()); 1205 EXPECT_EQ(0, client_->in_flight_event_count());
1172 } 1206 }
1173 1207
1174 } // namespace content 1208 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698