1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/browser/renderer_host/input/input_router_config_helper.h" 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/command_line.h" 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/common/content_switches.h" 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/events/gesture_detection/gesture_detector.h" 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(USE_AURA) 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/events/gestures/gesture_configuration.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#elif defined(OS_ANDROID) 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/gfx/android/view_configuration.h" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/gfx/screen.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace content { 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace { 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(USE_AURA) 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GestureEventQueue::Config GetGestureEventQueueConfig() { 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GestureEventQueue::Config config; 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) config.debounce_interval = base::TimeDelta::FromMilliseconds( 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::GestureConfiguration::scroll_debounce_interval_in_ms()); 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.enabled = true; 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.max_cancel_to_down_time = 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds( 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureConfiguration::fling_max_cancel_to_down_time_in_ms()); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.max_tap_gap_time = 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds(static_cast<int>( 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureConfiguration::semi_long_press_time_in_seconds() * 1000)); 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchpad_tap_suppression_config.enabled = true; 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchpad_tap_suppression_config.max_cancel_to_down_time = 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds( 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureConfiguration::fling_max_cancel_to_down_time_in_ms()); 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchpad_tap_suppression_config.max_tap_gap_time = 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds(static_cast<int>( 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureConfiguration::fling_max_tap_gap_time_in_ms() * 1000)); 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TouchEventQueue::Config GetTouchEventQueueConfig() { 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TouchEventQueue::Config config; 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchmove_slop_suppression_length_dips = 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureConfiguration::max_touch_move_in_pixels_for_click(); 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#elif defined(OS_ANDROID) 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Default time allowance for the touch ack delay before the touch sequence is 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// cancelled. 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int kTouchAckTimeoutDelayMs = 200; 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GestureEventQueue::Config GetGestureEventQueueConfig() { 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GestureEventQueue::Config config; 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.enabled = true; 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.max_cancel_to_down_time = 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds( 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gfx::ViewConfiguration::GetTapTimeoutInMs()); 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchscreen_tap_suppression_config.max_tap_gap_time = 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds( 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gfx::ViewConfiguration::GetLongPressTimeoutInMs()); 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TouchEventQueue::Config GetTouchEventQueueConfig() { 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TouchEventQueue::Config config; 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touch_ack_timeout_delay = 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta::FromMilliseconds(kTouchAckTimeoutDelayMs); 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touch_ack_timeout_supported = true; 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const double touch_slop_length_pixels = 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static_cast<double>(gfx::ViewConfiguration::GetTouchSlopInPixels()); 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const double device_scale_factor = 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().device_scale_factor(); 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchmove_slop_suppression_length_dips = 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) touch_slop_length_pixels / device_scale_factor; 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GestureEventQueue::Config GetGestureEventQueueConfig() { 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return GestureEventQueue::Config(); 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TouchEventQueue::Config GetTouchEventQueueConfig() { 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TouchEventQueue::Config config; 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touchmove_slop_suppression_length_dips = 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ui::GestureDetector::Config().touch_slop; 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TouchEventQueue::TouchScrollingMode GetTouchScrollingMode() { 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string modeString = 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kTouchScrollingMode); 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (modeString == switches::kTouchScrollingModeAsyncTouchmove) 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE; 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (modeString == switches::kTouchScrollingModeSyncTouchmove) 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TouchEventQueue::TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE; 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (modeString == switches::kTouchScrollingModeTouchcancel) 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL; 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (modeString != "") 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG(ERROR) << "Invalid --touch-scrolling-mode option: " << modeString; 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT; 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)InputRouterImpl::Config GetInputRouterConfigForPlatform() { 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) InputRouterImpl::Config config; 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.gesture_config = GetGestureEventQueueConfig(); 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touch_config = GetTouchEventQueueConfig(); 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config.touch_config.touch_scrolling_mode = GetTouchScrollingMode(); 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return config; 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace content 137