gesture_prefs_observer_factory_aura.cc revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h" 6 7#include <vector> 8 9#include "base/bind.h" 10#include "base/bind_helpers.h" 11#include "base/compiler_specific.h" 12#include "base/prefs/pref_change_registrar.h" 13#include "base/prefs/pref_service.h" 14#include "chrome/browser/chrome_notification_types.h" 15#include "chrome/browser/profiles/incognito_helpers.h" 16#include "chrome/browser/profiles/profile.h" 17#include "chrome/common/pref_names.h" 18#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 19#include "components/user_prefs/pref_registry_syncable.h" 20#include "content/public/browser/notification_observer.h" 21#include "content/public/browser/notification_service.h" 22#include "content/public/browser/overscroll_configuration.h" 23#include "content/public/common/renderer_preferences.h" 24#include "ui/base/gestures/gesture_configuration.h" 25 26#if defined(USE_ASH) 27#include "chrome/browser/ui/immersive_fullscreen_configuration.h" 28#endif // USE_ASH 29 30using ui::GestureConfiguration; 31 32namespace { 33 34// TODO(rjkroege): Remove this deprecated pref in M29. http://crbug.com/160243. 35const char kTouchScreenFlingAccelerationAdjustment[] = 36 "gesture.touchscreen_fling_acceleration_adjustment"; 37 38struct OverscrollPref { 39 const char* pref_name; 40 content::OverscrollConfig config; 41}; 42 43const std::vector<OverscrollPref>& GetOverscrollPrefs() { 44 CR_DEFINE_STATIC_LOCAL(std::vector<OverscrollPref>, overscroll_prefs, ()); 45 if (overscroll_prefs.empty()) { 46 using namespace content; 47 const OverscrollPref kOverscrollPrefs[] = { 48 { prefs::kOverscrollHorizontalThresholdComplete, 49 OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE }, 50 { prefs::kOverscrollVerticalThresholdComplete, 51 OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE }, 52 { prefs::kOverscrollMinimumThresholdStart, 53 OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START }, 54 { prefs::kOverscrollVerticalThresholdStart, 55 OVERSCROLL_CONFIG_VERT_THRESHOLD_START }, 56 { prefs::kOverscrollHorizontalResistThreshold, 57 OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER }, 58 { prefs::kOverscrollVerticalResistThreshold, 59 OVERSCROLL_CONFIG_VERT_RESIST_AFTER }, 60 }; 61 overscroll_prefs.assign(kOverscrollPrefs, 62 kOverscrollPrefs + arraysize(kOverscrollPrefs)); 63 } 64 return overscroll_prefs; 65} 66 67#if defined(USE_ASH) 68const char* kImmersiveModePrefs[] = { 69 prefs::kImmersiveModeRevealDelayMs, 70 prefs::kImmersiveModeRevealXThresholdPixels, 71}; 72#endif // USE_ASH 73 74// This class manages gesture configuration preferences. 75class GesturePrefsObserver : public BrowserContextKeyedService { 76 public: 77 explicit GesturePrefsObserver(PrefService* prefs); 78 virtual ~GesturePrefsObserver(); 79 80 // BrowserContextKeyedService implementation. 81 virtual void Shutdown() OVERRIDE; 82 83 private: 84 // Notification callback invoked when browser-side preferences 85 // are updated and need to be pushed into ui::GesturePreferences. 86 void Update(); 87 88 // Notification callback invoked when the fling deacceleration 89 // gesture preferences are changed from chrome://gesture. 90 // Broadcasts the changes all renderers where they are used. 91 void Notify(); 92 93 // Notification helper to push overscroll preferences into 94 // content. 95 void UpdateOverscrollPrefs(); 96 97 void UpdateImmersiveModePrefs(); 98 99 PrefChangeRegistrar registrar_; 100 PrefService* prefs_; 101 102 DISALLOW_COPY_AND_ASSIGN(GesturePrefsObserver); 103}; 104 105// The list of prefs we want to observe. 106// Note that this collection of settings should correspond to the settings used 107// in ui/base/gestures/gesture_configuration.h 108const char* kPrefsToObserve[] = { 109 prefs::kFlingAccelerationCurveCoefficient0, 110 prefs::kFlingAccelerationCurveCoefficient1, 111 prefs::kFlingAccelerationCurveCoefficient2, 112 prefs::kFlingAccelerationCurveCoefficient3, 113 prefs::kFlingMaxCancelToDownTimeInMs, 114 prefs::kFlingMaxTapGapTimeInMs, 115 prefs::kTabScrubActivationDelayInMS, 116 prefs::kFlingVelocityCap, 117 prefs::kLongPressTimeInSeconds, 118 prefs::kMaxDistanceForTwoFingerTapInPixels, 119 prefs::kMaxSecondsBetweenDoubleClick, 120 prefs::kMaxSeparationForGestureTouchesInPixels, 121 prefs::kMaxSwipeDeviationRatio, 122 prefs::kMaxTouchDownDurationInSecondsForClick, 123 prefs::kMaxTouchMoveInPixelsForClick, 124 prefs::kMinDistanceForPinchScrollInPixels, 125 prefs::kMinFlickSpeedSquared, 126 prefs::kMinPinchUpdateDistanceInPixels, 127 prefs::kMinRailBreakVelocity, 128 prefs::kMinScrollDeltaSquared, 129 prefs::kMinSwipeSpeed, 130 prefs::kMinTouchDownDurationInSecondsForClick, 131 prefs::kPointsBufferedForVelocity, 132 prefs::kRailBreakProportion, 133 prefs::kRailStartProportion, 134 prefs::kSemiLongPressTimeInSeconds, 135}; 136 137const char* kFlingTouchpadPrefs[] = { 138 prefs::kFlingCurveTouchpadAlpha, 139 prefs::kFlingCurveTouchpadBeta, 140 prefs::kFlingCurveTouchpadGamma 141}; 142 143const char* kFlingTouchscreenPrefs[] = { 144 prefs::kFlingCurveTouchscreenAlpha, 145 prefs::kFlingCurveTouchscreenBeta, 146 prefs::kFlingCurveTouchscreenGamma, 147}; 148 149GesturePrefsObserver::GesturePrefsObserver(PrefService* prefs) 150 : prefs_(prefs) { 151 // Clear for migration. 152 prefs->ClearPref(kTouchScreenFlingAccelerationAdjustment); 153 154 // TODO(mohsen): Remove following code in M32. By then, gesture prefs will 155 // have been cleared for majority of the users: crbug.com/269292. 156 // Do a one-time wipe of all gesture preferences. 157 if (!prefs->GetBoolean(prefs::kGestureConfigIsTrustworthy)) { 158 for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i) 159 prefs->ClearPref(kPrefsToObserve[i]); 160 161 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 162 for (size_t i = 0; i < overscroll_prefs.size(); ++i) 163 prefs->ClearPref(overscroll_prefs[i].pref_name); 164 165 for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); ++i) 166 prefs->ClearPref(kFlingTouchpadPrefs[i]); 167 168 for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); ++i) 169 prefs->ClearPref(kFlingTouchscreenPrefs[i]); 170 171#if defined(USE_ASH) 172 for (size_t i = 0; i < arraysize(kImmersiveModePrefs); ++i) 173 prefs->ClearPref(kImmersiveModePrefs[i]); 174#endif // USE_ASH 175 176 prefs->SetBoolean(prefs::kGestureConfigIsTrustworthy, true); 177 } 178 179 registrar_.Init(prefs); 180 registrar_.RemoveAll(); 181 base::Closure callback = base::Bind(&GesturePrefsObserver::Update, 182 base::Unretained(this)); 183 184 base::Closure notify_callback = base::Bind(&GesturePrefsObserver::Notify, 185 base::Unretained(this)); 186 187 for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i) 188 registrar_.Add(kPrefsToObserve[i], callback); 189 190 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 191 for (size_t i = 0; i < overscroll_prefs.size(); ++i) 192 registrar_.Add(overscroll_prefs[i].pref_name, callback); 193 194 for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); ++i) 195 registrar_.Add(kFlingTouchpadPrefs[i], notify_callback); 196 for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); ++i) 197 registrar_.Add(kFlingTouchscreenPrefs[i], notify_callback); 198 199#if defined(USE_ASH) 200 for (size_t i = 0; i < arraysize(kImmersiveModePrefs); ++i) 201 registrar_.Add(kImmersiveModePrefs[i], callback); 202#endif // USE_ASH 203 Update(); 204} 205 206GesturePrefsObserver::~GesturePrefsObserver() {} 207 208void GesturePrefsObserver::Shutdown() { 209 registrar_.RemoveAll(); 210} 211 212void GesturePrefsObserver::Update() { 213 GestureConfiguration::set_fling_acceleration_curve_coefficients(0, 214 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient0)); 215 GestureConfiguration::set_fling_acceleration_curve_coefficients(1, 216 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient1)); 217 GestureConfiguration::set_fling_acceleration_curve_coefficients(2, 218 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient2)); 219 GestureConfiguration::set_fling_acceleration_curve_coefficients(3, 220 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient3)); 221 GestureConfiguration::set_fling_max_cancel_to_down_time_in_ms( 222 prefs_->GetInteger(prefs::kFlingMaxCancelToDownTimeInMs)); 223 GestureConfiguration::set_fling_max_tap_gap_time_in_ms( 224 prefs_->GetInteger(prefs::kFlingMaxTapGapTimeInMs)); 225 GestureConfiguration::set_tab_scrub_activation_delay_in_ms( 226 prefs_->GetInteger(prefs::kTabScrubActivationDelayInMS)); 227 GestureConfiguration::set_fling_velocity_cap( 228 prefs_->GetDouble(prefs::kFlingVelocityCap)); 229 GestureConfiguration::set_long_press_time_in_seconds( 230 prefs_->GetDouble( 231 prefs::kLongPressTimeInSeconds)); 232 GestureConfiguration::set_semi_long_press_time_in_seconds( 233 prefs_->GetDouble( 234 prefs::kSemiLongPressTimeInSeconds)); 235 GestureConfiguration::set_max_distance_for_two_finger_tap_in_pixels( 236 prefs_->GetDouble( 237 prefs::kMaxDistanceForTwoFingerTapInPixels)); 238 GestureConfiguration::set_max_seconds_between_double_click( 239 prefs_->GetDouble( 240 prefs::kMaxSecondsBetweenDoubleClick)); 241 GestureConfiguration::set_max_separation_for_gesture_touches_in_pixels( 242 prefs_->GetDouble( 243 prefs::kMaxSeparationForGestureTouchesInPixels)); 244 GestureConfiguration::set_max_swipe_deviation_ratio( 245 prefs_->GetDouble( 246 prefs::kMaxSwipeDeviationRatio)); 247 GestureConfiguration::set_max_touch_down_duration_in_seconds_for_click( 248 prefs_->GetDouble( 249 prefs::kMaxTouchDownDurationInSecondsForClick)); 250 GestureConfiguration::set_max_touch_move_in_pixels_for_click( 251 prefs_->GetDouble( 252 prefs::kMaxTouchMoveInPixelsForClick)); 253 GestureConfiguration::set_max_distance_between_taps_for_double_tap( 254 prefs_->GetDouble( 255 prefs::kMaxDistanceBetweenTapsForDoubleTap)); 256 GestureConfiguration::set_min_distance_for_pinch_scroll_in_pixels( 257 prefs_->GetDouble( 258 prefs::kMinDistanceForPinchScrollInPixels)); 259 GestureConfiguration::set_min_flick_speed_squared( 260 prefs_->GetDouble( 261 prefs::kMinFlickSpeedSquared)); 262 GestureConfiguration::set_min_pinch_update_distance_in_pixels( 263 prefs_->GetDouble( 264 prefs::kMinPinchUpdateDistanceInPixels)); 265 GestureConfiguration::set_min_rail_break_velocity( 266 prefs_->GetDouble( 267 prefs::kMinRailBreakVelocity)); 268 GestureConfiguration::set_min_scroll_delta_squared( 269 prefs_->GetDouble( 270 prefs::kMinScrollDeltaSquared)); 271 GestureConfiguration::set_min_swipe_speed( 272 prefs_->GetDouble( 273 prefs::kMinSwipeSpeed)); 274 GestureConfiguration::set_min_touch_down_duration_in_seconds_for_click( 275 prefs_->GetDouble( 276 prefs::kMinTouchDownDurationInSecondsForClick)); 277 GestureConfiguration::set_points_buffered_for_velocity( 278 prefs_->GetInteger( 279 prefs::kPointsBufferedForVelocity)); 280 GestureConfiguration::set_rail_break_proportion( 281 prefs_->GetDouble( 282 prefs::kRailBreakProportion)); 283 GestureConfiguration::set_rail_start_proportion( 284 prefs_->GetDouble( 285 prefs::kRailStartProportion)); 286 GestureConfiguration::set_scroll_prediction_seconds( 287 prefs_->GetDouble(prefs::kScrollPredictionSeconds)); 288 289 UpdateOverscrollPrefs(); 290 UpdateImmersiveModePrefs(); 291} 292 293void GesturePrefsObserver::UpdateOverscrollPrefs() { 294 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 295 for (size_t i = 0; i < overscroll_prefs.size(); ++i) { 296 content::SetOverscrollConfig(overscroll_prefs[i].config, 297 static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name))); 298 } 299} 300 301void GesturePrefsObserver::UpdateImmersiveModePrefs() { 302#if defined(USE_ASH) 303 ImmersiveFullscreenConfiguration::set_immersive_mode_reveal_delay_ms( 304 prefs_->GetInteger(prefs::kImmersiveModeRevealDelayMs)); 305 ImmersiveFullscreenConfiguration:: 306 set_immersive_mode_reveal_x_threshold_pixels( 307 prefs_->GetInteger(prefs::kImmersiveModeRevealXThresholdPixels)); 308#endif // USE_ASH 309} 310 311void GesturePrefsObserver::Notify() { 312 // Must do a notify to distribute the changes to all renderers. 313 content::NotificationService* service = 314 content::NotificationService::current(); 315 service->Notify(chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED, 316 content::Source<GesturePrefsObserver>(this), 317 content::NotificationService::NoDetails()); 318} 319 320} // namespace 321 322// static 323GesturePrefsObserverFactoryAura* 324GesturePrefsObserverFactoryAura::GetInstance() { 325 return Singleton<GesturePrefsObserverFactoryAura>::get(); 326} 327 328GesturePrefsObserverFactoryAura::GesturePrefsObserverFactoryAura() 329 : BrowserContextKeyedServiceFactory( 330 "GesturePrefsObserverAura", 331 BrowserContextDependencyManager::GetInstance()) {} 332 333GesturePrefsObserverFactoryAura::~GesturePrefsObserverFactoryAura() {} 334 335BrowserContextKeyedService* 336GesturePrefsObserverFactoryAura::BuildServiceInstanceFor( 337 content::BrowserContext* profile) const { 338 return new GesturePrefsObserver(static_cast<Profile*>(profile)->GetPrefs()); 339} 340 341void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs( 342 user_prefs::PrefRegistrySyncable* registry) { 343 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 344 345 for (size_t i = 0; i < overscroll_prefs.size(); ++i) { 346 registry->RegisterDoublePref( 347 overscroll_prefs[i].pref_name, 348 content::GetOverscrollConfig(overscroll_prefs[i].config), 349 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 350 } 351} 352 353void GesturePrefsObserverFactoryAura::RegisterFlingCurveParameters( 354 user_prefs::PrefRegistrySyncable* registry) { 355 content::RendererPreferences def_prefs; 356 357 for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); i++) 358 registry->RegisterDoublePref( 359 kFlingTouchpadPrefs[i], 360 def_prefs.touchpad_fling_profile[i], 361 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 362 363 for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); i++) 364 registry->RegisterDoublePref( 365 kFlingTouchscreenPrefs[i], 366 def_prefs.touchscreen_fling_profile[i], 367 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 368} 369 370void GesturePrefsObserverFactoryAura::RegisterImmersiveModePrefs( 371 user_prefs::PrefRegistrySyncable* registry) { 372#if defined(USE_ASH) 373 registry->RegisterIntegerPref( 374 prefs::kImmersiveModeRevealDelayMs, 375 ImmersiveFullscreenConfiguration::immersive_mode_reveal_delay_ms(), 376 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 377 registry->RegisterIntegerPref( 378 prefs::kImmersiveModeRevealXThresholdPixels, 379 ImmersiveFullscreenConfiguration:: 380 immersive_mode_reveal_x_threshold_pixels(), 381 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 382#endif // USE_ASH 383} 384 385void GesturePrefsObserverFactoryAura::RegisterProfilePrefs( 386 user_prefs::PrefRegistrySyncable* registry) { 387 registry->RegisterDoublePref( 388 prefs::kFlingAccelerationCurveCoefficient0, 389 GestureConfiguration::fling_acceleration_curve_coefficients(0), 390 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 391 registry->RegisterDoublePref( 392 prefs::kFlingAccelerationCurveCoefficient1, 393 GestureConfiguration::fling_acceleration_curve_coefficients(1), 394 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 395 registry->RegisterDoublePref( 396 prefs::kFlingAccelerationCurveCoefficient2, 397 GestureConfiguration::fling_acceleration_curve_coefficients(2), 398 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 399 registry->RegisterDoublePref( 400 prefs::kFlingAccelerationCurveCoefficient3, 401 GestureConfiguration::fling_acceleration_curve_coefficients(3), 402 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 403 registry->RegisterIntegerPref( 404 prefs::kFlingMaxCancelToDownTimeInMs, 405 GestureConfiguration::fling_max_cancel_to_down_time_in_ms(), 406 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 407 registry->RegisterIntegerPref( 408 prefs::kFlingMaxTapGapTimeInMs, 409 GestureConfiguration::fling_max_tap_gap_time_in_ms(), 410 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 411 registry->RegisterIntegerPref( 412 prefs::kTabScrubActivationDelayInMS, 413 GestureConfiguration::tab_scrub_activation_delay_in_ms(), 414 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 415 registry->RegisterDoublePref( 416 prefs::kFlingVelocityCap, 417 GestureConfiguration::fling_velocity_cap(), 418 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 419 registry->RegisterDoublePref( 420 prefs::kLongPressTimeInSeconds, 421 GestureConfiguration::long_press_time_in_seconds(), 422 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 423 registry->RegisterDoublePref( 424 prefs::kSemiLongPressTimeInSeconds, 425 GestureConfiguration::semi_long_press_time_in_seconds(), 426 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 427 registry->RegisterDoublePref( 428 prefs::kMaxDistanceForTwoFingerTapInPixels, 429 GestureConfiguration::max_distance_for_two_finger_tap_in_pixels(), 430 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 431 registry->RegisterDoublePref( 432 prefs::kMaxSecondsBetweenDoubleClick, 433 GestureConfiguration::max_seconds_between_double_click(), 434 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 435 registry->RegisterDoublePref( 436 prefs::kMaxSeparationForGestureTouchesInPixels, 437 GestureConfiguration::max_separation_for_gesture_touches_in_pixels(), 438 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 439 registry->RegisterDoublePref( 440 prefs::kMaxSwipeDeviationRatio, 441 GestureConfiguration::max_swipe_deviation_ratio(), 442 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 443 registry->RegisterDoublePref( 444 prefs::kMaxTouchDownDurationInSecondsForClick, 445 GestureConfiguration::max_touch_down_duration_in_seconds_for_click(), 446 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 447 registry->RegisterDoublePref( 448 prefs::kMaxTouchMoveInPixelsForClick, 449 GestureConfiguration::max_touch_move_in_pixels_for_click(), 450 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 451 registry->RegisterDoublePref( 452 prefs::kMaxDistanceBetweenTapsForDoubleTap, 453 GestureConfiguration::max_distance_between_taps_for_double_tap(), 454 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 455 registry->RegisterDoublePref( 456 prefs::kMinDistanceForPinchScrollInPixels, 457 GestureConfiguration::min_distance_for_pinch_scroll_in_pixels(), 458 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 459 registry->RegisterDoublePref( 460 prefs::kMinFlickSpeedSquared, 461 GestureConfiguration::min_flick_speed_squared(), 462 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 463 registry->RegisterDoublePref( 464 prefs::kMinPinchUpdateDistanceInPixels, 465 GestureConfiguration::min_pinch_update_distance_in_pixels(), 466 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 467 registry->RegisterDoublePref( 468 prefs::kMinRailBreakVelocity, 469 GestureConfiguration::min_rail_break_velocity(), 470 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 471 registry->RegisterDoublePref( 472 prefs::kMinScrollDeltaSquared, 473 GestureConfiguration::min_scroll_delta_squared(), 474 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 475 registry->RegisterDoublePref( 476 prefs::kMinSwipeSpeed, 477 GestureConfiguration::min_swipe_speed(), 478 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 479 registry->RegisterDoublePref( 480 prefs::kMinTouchDownDurationInSecondsForClick, 481 GestureConfiguration::min_touch_down_duration_in_seconds_for_click(), 482 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 483 registry->RegisterIntegerPref( 484 prefs::kPointsBufferedForVelocity, 485 GestureConfiguration::points_buffered_for_velocity(), 486 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 487 registry->RegisterDoublePref( 488 prefs::kRailBreakProportion, 489 GestureConfiguration::rail_break_proportion(), 490 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 491 registry->RegisterDoublePref( 492 prefs::kRailStartProportion, 493 GestureConfiguration::rail_start_proportion(), 494 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 495 registry->RegisterDoublePref( 496 prefs::kScrollPredictionSeconds, 497 GestureConfiguration::scroll_prediction_seconds(), 498 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 499 500 // Register for migration. 501 registry->RegisterDoublePref( 502 kTouchScreenFlingAccelerationAdjustment, 503 0.0, 504 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 505 506 RegisterOverscrollPrefs(registry); 507 RegisterFlingCurveParameters(registry); 508 RegisterImmersiveModePrefs(registry); 509 510 // Register pref for a one-time wipe of all gesture preferences. 511 registry->RegisterBooleanPref( 512 prefs::kGestureConfigIsTrustworthy, 513 false, 514 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 515} 516 517bool 518GesturePrefsObserverFactoryAura::ServiceIsCreatedWithBrowserContext() const { 519 // Create the observer as soon as the profile is created. 520 return true; 521} 522 523content::BrowserContext* 524GesturePrefsObserverFactoryAura::GetBrowserContextToUse( 525 content::BrowserContext* context) const { 526 // Use same gesture preferences on incognito windows. 527 return chrome::GetBrowserContextRedirectedInIncognito(context); 528} 529 530bool GesturePrefsObserverFactoryAura::ServiceIsNULLWhileTesting() const { 531 // Some tests replace the PrefService of the TestingProfile after the 532 // GesturePrefsObserver has been created, which makes Shutdown() 533 // remove the registrar from a non-existent PrefService. 534 return true; 535} 536