gesture_prefs_observer_factory_aura.cc revision 558790d6acca3451cf3a6b497803a5f07d0bec58
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 registrar_.Init(prefs); 155 registrar_.RemoveAll(); 156 base::Closure callback = base::Bind(&GesturePrefsObserver::Update, 157 base::Unretained(this)); 158 159 base::Closure notify_callback = base::Bind(&GesturePrefsObserver::Notify, 160 base::Unretained(this)); 161 162 for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i) 163 registrar_.Add(kPrefsToObserve[i], callback); 164 165 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 166 for (size_t i = 0; i < overscroll_prefs.size(); ++i) 167 registrar_.Add(overscroll_prefs[i].pref_name, callback); 168 169 for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); ++i) 170 registrar_.Add(kFlingTouchpadPrefs[i], notify_callback); 171 for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); ++i) 172 registrar_.Add(kFlingTouchscreenPrefs[i], notify_callback); 173 174#if defined(USE_ASH) 175 for (size_t i = 0; i < arraysize(kImmersiveModePrefs); ++i) 176 registrar_.Add(kImmersiveModePrefs[i], callback); 177#endif // USE_ASH 178 Update(); 179} 180 181GesturePrefsObserver::~GesturePrefsObserver() {} 182 183void GesturePrefsObserver::Shutdown() { 184 registrar_.RemoveAll(); 185} 186 187void GesturePrefsObserver::Update() { 188 GestureConfiguration::set_fling_acceleration_curve_coefficients(0, 189 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient0)); 190 GestureConfiguration::set_fling_acceleration_curve_coefficients(1, 191 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient1)); 192 GestureConfiguration::set_fling_acceleration_curve_coefficients(2, 193 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient2)); 194 GestureConfiguration::set_fling_acceleration_curve_coefficients(3, 195 prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient3)); 196 GestureConfiguration::set_fling_max_cancel_to_down_time_in_ms( 197 prefs_->GetInteger(prefs::kFlingMaxCancelToDownTimeInMs)); 198 GestureConfiguration::set_fling_max_tap_gap_time_in_ms( 199 prefs_->GetInteger(prefs::kFlingMaxTapGapTimeInMs)); 200 GestureConfiguration::set_tab_scrub_activation_delay_in_ms( 201 prefs_->GetInteger(prefs::kTabScrubActivationDelayInMS)); 202 GestureConfiguration::set_fling_velocity_cap( 203 prefs_->GetDouble(prefs::kFlingVelocityCap)); 204 GestureConfiguration::set_long_press_time_in_seconds( 205 prefs_->GetDouble( 206 prefs::kLongPressTimeInSeconds)); 207 GestureConfiguration::set_semi_long_press_time_in_seconds( 208 prefs_->GetDouble( 209 prefs::kSemiLongPressTimeInSeconds)); 210 GestureConfiguration::set_max_distance_for_two_finger_tap_in_pixels( 211 prefs_->GetDouble( 212 prefs::kMaxDistanceForTwoFingerTapInPixels)); 213 GestureConfiguration::set_max_seconds_between_double_click( 214 prefs_->GetDouble( 215 prefs::kMaxSecondsBetweenDoubleClick)); 216 GestureConfiguration::set_max_separation_for_gesture_touches_in_pixels( 217 prefs_->GetDouble( 218 prefs::kMaxSeparationForGestureTouchesInPixels)); 219 GestureConfiguration::set_max_swipe_deviation_ratio( 220 prefs_->GetDouble( 221 prefs::kMaxSwipeDeviationRatio)); 222 GestureConfiguration::set_max_touch_down_duration_in_seconds_for_click( 223 prefs_->GetDouble( 224 prefs::kMaxTouchDownDurationInSecondsForClick)); 225 GestureConfiguration::set_max_touch_move_in_pixels_for_click( 226 prefs_->GetDouble( 227 prefs::kMaxTouchMoveInPixelsForClick)); 228 GestureConfiguration::set_max_distance_between_taps_for_double_tap( 229 prefs_->GetDouble( 230 prefs::kMaxDistanceBetweenTapsForDoubleTap)); 231 GestureConfiguration::set_min_distance_for_pinch_scroll_in_pixels( 232 prefs_->GetDouble( 233 prefs::kMinDistanceForPinchScrollInPixels)); 234 GestureConfiguration::set_min_flick_speed_squared( 235 prefs_->GetDouble( 236 prefs::kMinFlickSpeedSquared)); 237 GestureConfiguration::set_min_pinch_update_distance_in_pixels( 238 prefs_->GetDouble( 239 prefs::kMinPinchUpdateDistanceInPixels)); 240 GestureConfiguration::set_min_rail_break_velocity( 241 prefs_->GetDouble( 242 prefs::kMinRailBreakVelocity)); 243 GestureConfiguration::set_min_scroll_delta_squared( 244 prefs_->GetDouble( 245 prefs::kMinScrollDeltaSquared)); 246 GestureConfiguration::set_min_swipe_speed( 247 prefs_->GetDouble( 248 prefs::kMinSwipeSpeed)); 249 GestureConfiguration::set_min_touch_down_duration_in_seconds_for_click( 250 prefs_->GetDouble( 251 prefs::kMinTouchDownDurationInSecondsForClick)); 252 GestureConfiguration::set_points_buffered_for_velocity( 253 prefs_->GetInteger( 254 prefs::kPointsBufferedForVelocity)); 255 GestureConfiguration::set_rail_break_proportion( 256 prefs_->GetDouble( 257 prefs::kRailBreakProportion)); 258 GestureConfiguration::set_rail_start_proportion( 259 prefs_->GetDouble( 260 prefs::kRailStartProportion)); 261 GestureConfiguration::set_scroll_prediction_seconds( 262 prefs_->GetDouble(prefs::kScrollPredictionSeconds)); 263 264 UpdateOverscrollPrefs(); 265 UpdateImmersiveModePrefs(); 266} 267 268void GesturePrefsObserver::UpdateOverscrollPrefs() { 269 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 270 for (size_t i = 0; i < overscroll_prefs.size(); ++i) { 271 content::SetOverscrollConfig(overscroll_prefs[i].config, 272 static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name))); 273 } 274} 275 276void GesturePrefsObserver::UpdateImmersiveModePrefs() { 277#if defined(USE_ASH) 278 ImmersiveFullscreenConfiguration::set_immersive_mode_reveal_delay_ms( 279 prefs_->GetInteger(prefs::kImmersiveModeRevealDelayMs)); 280 ImmersiveFullscreenConfiguration:: 281 set_immersive_mode_reveal_x_threshold_pixels( 282 prefs_->GetInteger(prefs::kImmersiveModeRevealXThresholdPixels)); 283#endif // USE_ASH 284} 285 286void GesturePrefsObserver::Notify() { 287 // Must do a notify to distribute the changes to all renderers. 288 content::NotificationService* service = 289 content::NotificationService::current(); 290 service->Notify(chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED, 291 content::Source<GesturePrefsObserver>(this), 292 content::NotificationService::NoDetails()); 293} 294 295} // namespace 296 297// static 298GesturePrefsObserverFactoryAura* 299GesturePrefsObserverFactoryAura::GetInstance() { 300 return Singleton<GesturePrefsObserverFactoryAura>::get(); 301} 302 303GesturePrefsObserverFactoryAura::GesturePrefsObserverFactoryAura() 304 : BrowserContextKeyedServiceFactory( 305 "GesturePrefsObserverAura", 306 BrowserContextDependencyManager::GetInstance()) {} 307 308GesturePrefsObserverFactoryAura::~GesturePrefsObserverFactoryAura() {} 309 310BrowserContextKeyedService* 311GesturePrefsObserverFactoryAura::BuildServiceInstanceFor( 312 content::BrowserContext* profile) const { 313 return new GesturePrefsObserver(static_cast<Profile*>(profile)->GetPrefs()); 314} 315 316void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs( 317 user_prefs::PrefRegistrySyncable* registry) { 318 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs(); 319 320 for (size_t i = 0; i < overscroll_prefs.size(); ++i) { 321 registry->RegisterDoublePref( 322 overscroll_prefs[i].pref_name, 323 content::GetOverscrollConfig(overscroll_prefs[i].config), 324 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 325 } 326} 327 328void GesturePrefsObserverFactoryAura::RegisterFlingCurveParameters( 329 user_prefs::PrefRegistrySyncable* registry) { 330 content::RendererPreferences def_prefs; 331 332 for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); i++) 333 registry->RegisterDoublePref( 334 kFlingTouchpadPrefs[i], 335 def_prefs.touchpad_fling_profile[i], 336 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 337 338 for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); i++) 339 registry->RegisterDoublePref( 340 kFlingTouchscreenPrefs[i], 341 def_prefs.touchscreen_fling_profile[i], 342 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 343} 344 345void GesturePrefsObserverFactoryAura::RegisterImmersiveModePrefs( 346 user_prefs::PrefRegistrySyncable* registry) { 347#if defined(USE_ASH) 348 registry->RegisterIntegerPref( 349 prefs::kImmersiveModeRevealDelayMs, 350 ImmersiveFullscreenConfiguration::immersive_mode_reveal_delay_ms(), 351 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 352 registry->RegisterIntegerPref( 353 prefs::kImmersiveModeRevealXThresholdPixels, 354 ImmersiveFullscreenConfiguration:: 355 immersive_mode_reveal_x_threshold_pixels(), 356 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 357#endif // USE_ASH 358} 359 360void GesturePrefsObserverFactoryAura::RegisterProfilePrefs( 361 user_prefs::PrefRegistrySyncable* registry) { 362 registry->RegisterDoublePref( 363 prefs::kFlingAccelerationCurveCoefficient0, 364 GestureConfiguration::fling_acceleration_curve_coefficients(0), 365 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 366 registry->RegisterDoublePref( 367 prefs::kFlingAccelerationCurveCoefficient1, 368 GestureConfiguration::fling_acceleration_curve_coefficients(1), 369 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 370 registry->RegisterDoublePref( 371 prefs::kFlingAccelerationCurveCoefficient2, 372 GestureConfiguration::fling_acceleration_curve_coefficients(2), 373 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 374 registry->RegisterDoublePref( 375 prefs::kFlingAccelerationCurveCoefficient3, 376 GestureConfiguration::fling_acceleration_curve_coefficients(3), 377 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 378 registry->RegisterIntegerPref( 379 prefs::kFlingMaxCancelToDownTimeInMs, 380 GestureConfiguration::fling_max_cancel_to_down_time_in_ms(), 381 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 382 registry->RegisterIntegerPref( 383 prefs::kFlingMaxTapGapTimeInMs, 384 GestureConfiguration::fling_max_tap_gap_time_in_ms(), 385 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 386 registry->RegisterIntegerPref( 387 prefs::kTabScrubActivationDelayInMS, 388 GestureConfiguration::tab_scrub_activation_delay_in_ms(), 389 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 390 registry->RegisterDoublePref( 391 prefs::kFlingVelocityCap, 392 GestureConfiguration::fling_velocity_cap(), 393 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 394 registry->RegisterDoublePref( 395 prefs::kLongPressTimeInSeconds, 396 GestureConfiguration::long_press_time_in_seconds(), 397 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 398 registry->RegisterDoublePref( 399 prefs::kSemiLongPressTimeInSeconds, 400 GestureConfiguration::semi_long_press_time_in_seconds(), 401 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 402 registry->RegisterDoublePref( 403 prefs::kMaxDistanceForTwoFingerTapInPixels, 404 GestureConfiguration::max_distance_for_two_finger_tap_in_pixels(), 405 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 406 registry->RegisterDoublePref( 407 prefs::kMaxSecondsBetweenDoubleClick, 408 GestureConfiguration::max_seconds_between_double_click(), 409 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 410 registry->RegisterDoublePref( 411 prefs::kMaxSeparationForGestureTouchesInPixels, 412 GestureConfiguration::max_separation_for_gesture_touches_in_pixels(), 413 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 414 registry->RegisterDoublePref( 415 prefs::kMaxSwipeDeviationRatio, 416 GestureConfiguration::max_swipe_deviation_ratio(), 417 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 418 registry->RegisterDoublePref( 419 prefs::kMaxTouchDownDurationInSecondsForClick, 420 GestureConfiguration::max_touch_down_duration_in_seconds_for_click(), 421 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 422 registry->RegisterDoublePref( 423 prefs::kMaxTouchMoveInPixelsForClick, 424 GestureConfiguration::max_touch_move_in_pixels_for_click(), 425 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 426 registry->RegisterDoublePref( 427 prefs::kMaxDistanceBetweenTapsForDoubleTap, 428 GestureConfiguration::max_distance_between_taps_for_double_tap(), 429 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 430 registry->RegisterDoublePref( 431 prefs::kMinDistanceForPinchScrollInPixels, 432 GestureConfiguration::min_distance_for_pinch_scroll_in_pixels(), 433 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 434 registry->RegisterDoublePref( 435 prefs::kMinFlickSpeedSquared, 436 GestureConfiguration::min_flick_speed_squared(), 437 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 438 registry->RegisterDoublePref( 439 prefs::kMinPinchUpdateDistanceInPixels, 440 GestureConfiguration::min_pinch_update_distance_in_pixels(), 441 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 442 registry->RegisterDoublePref( 443 prefs::kMinRailBreakVelocity, 444 GestureConfiguration::min_rail_break_velocity(), 445 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 446 registry->RegisterDoublePref( 447 prefs::kMinScrollDeltaSquared, 448 GestureConfiguration::min_scroll_delta_squared(), 449 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 450 registry->RegisterDoublePref( 451 prefs::kMinSwipeSpeed, 452 GestureConfiguration::min_swipe_speed(), 453 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 454 registry->RegisterDoublePref( 455 prefs::kMinTouchDownDurationInSecondsForClick, 456 GestureConfiguration::min_touch_down_duration_in_seconds_for_click(), 457 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 458 registry->RegisterIntegerPref( 459 prefs::kPointsBufferedForVelocity, 460 GestureConfiguration::points_buffered_for_velocity(), 461 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 462 registry->RegisterDoublePref( 463 prefs::kRailBreakProportion, 464 GestureConfiguration::rail_break_proportion(), 465 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 466 registry->RegisterDoublePref( 467 prefs::kRailStartProportion, 468 GestureConfiguration::rail_start_proportion(), 469 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 470 registry->RegisterDoublePref( 471 prefs::kScrollPredictionSeconds, 472 GestureConfiguration::scroll_prediction_seconds(), 473 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 474 475 // Register for migration. 476 registry->RegisterDoublePref( 477 kTouchScreenFlingAccelerationAdjustment, 478 0.0, 479 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 480 481 RegisterOverscrollPrefs(registry); 482 RegisterFlingCurveParameters(registry); 483 RegisterImmersiveModePrefs(registry); 484} 485 486bool 487GesturePrefsObserverFactoryAura::ServiceIsCreatedWithBrowserContext() const { 488 // Create the observer as soon as the profile is created. 489 return true; 490} 491 492content::BrowserContext* 493GesturePrefsObserverFactoryAura::GetBrowserContextToUse( 494 content::BrowserContext* context) const { 495 // Use same gesture preferences on incognito windows. 496 return chrome::GetBrowserContextRedirectedInIncognito(context); 497} 498 499bool GesturePrefsObserverFactoryAura::ServiceIsNULLWhileTesting() const { 500 // Some tests replace the PrefService of the TestingProfile after the 501 // GesturePrefsObserver has been created, which makes Shutdown() 502 // remove the registrar from a non-existent PrefService. 503 return true; 504} 505