gesture_prefs_observer_factory_aura.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/overscroll_configuration.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/renderer_preferences.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/gestures/gesture_configuration.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/wm/workspace/workspace_cycler_configuration.h"
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/immersive_fullscreen_configuration.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ash::WorkspaceCyclerConfiguration;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ui::GestureConfiguration;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(rjkroege): Remove this deprecated pref in M29. http://crbug.com/160243.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTouchScreenFlingAccelerationAdjustment[] =
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "gesture.touchscreen_fling_acceleration_adjustment";
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct OverscrollPref {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const char* pref_name;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::OverscrollConfig config;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::vector<OverscrollPref>& GetOverscrollPrefs() {
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CR_DEFINE_STATIC_LOCAL(std::vector<OverscrollPref>, overscroll_prefs, ());
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (overscroll_prefs.empty()) {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    using namespace content;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const OverscrollPref kOverscrollPrefs[] = {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kOverscrollHorizontalThresholdComplete,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE },
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kOverscrollVerticalThresholdComplete,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE },
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kOverscrollMinimumThresholdStart,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        OVERSCROLL_CONFIG_MIN_THRESHOLD_START },
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kOverscrollHorizontalResistThreshold,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER },
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kOverscrollVerticalResistThreshold,
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        OVERSCROLL_CONFIG_VERT_RESIST_AFTER },
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    overscroll_prefs.assign(kOverscrollPrefs,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            kOverscrollPrefs + arraysize(kOverscrollPrefs));
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return overscroll_prefs;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)const char* kImmersiveModePrefs[] = {
72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  prefs::kImmersiveModeRevealDelayMs,
73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  prefs::kImmersiveModeRevealXThresholdPixels,
74b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)};
75b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WorkspaceCyclerPref {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const char* pref_name;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WorkspaceCyclerConfiguration::Property property;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::vector<WorkspaceCyclerPref>& GetWorkspaceCyclerPrefs() {
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CR_DEFINE_STATIC_LOCAL(std::vector<WorkspaceCyclerPref>, cycler_prefs, ());
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cycler_prefs.empty()) {
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const WorkspaceCyclerPref kCyclerPrefs[] = {
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerShallowerThanSelectedYOffsets,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::SHALLOWER_THAN_SELECTED_Y_OFFSETS },
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerDeeperThanSelectedYOffsets,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::DEEPER_THAN_SELECTED_Y_OFFSETS },
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerSelectedYOffset,
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::SELECTED_Y_OFFSET },
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerSelectedScale,
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::SELECTED_SCALE },
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerMinScale,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::MIN_SCALE },
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerMaxScale,
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::MAX_SCALE },
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerMinBrightness,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::MIN_BRIGHTNESS },
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerBackgroundOpacity,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::BACKGROUND_OPACITY },
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerDesktopWorkspaceBrightness,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::DESKTOP_WORKSPACE_BRIGHTNESS },
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerDistanceToInitiateCycling,
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::DISTANCE_TO_INITIATE_CYCLING },
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerScrollDistanceToCycleToNextWorkspace,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            SCROLL_DISTANCE_TO_CYCLE_TO_NEXT_WORKSPACE },
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerCyclerStepAnimationDurationRatio,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::CYCLER_STEP_ANIMATION_DURATION_RATIO },
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerStartCyclerAnimationDuration,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::START_CYCLER_ANIMATION_DURATION },
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      { prefs::kWorkspaceCyclerStopCyclerAnimationDuration,
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WorkspaceCyclerConfiguration::STOP_CYCLER_ANIMATION_DURATION },
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cycler_prefs.assign(kCyclerPrefs, kCyclerPrefs + arraysize(kCyclerPrefs));
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return cycler_prefs;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class manages gesture configuration preferences.
12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class GesturePrefsObserver : public BrowserContextKeyedService {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit GesturePrefsObserver(PrefService* prefs);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~GesturePrefsObserver();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // BrowserContextKeyedService implementation.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Notification callback invoked when browser-side preferences
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // are updated and need to be pushed into ui::GesturePreferences.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Update();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Notification callback invoked when the fling deacceleration
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // gesture preferences are changed from chrome://gesture.
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Broadcasts the changes all renderers where they are used.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Notify();
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Notification helper to push overscroll preferences into
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // content.
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateOverscrollPrefs();
143b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
144b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UpdateImmersiveModePrefs();
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateWorkspaceCyclerPrefs();
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefChangeRegistrar registrar_;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs_;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GesturePrefsObserver);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The list of prefs we want to observe.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that this collection of settings should correspond to the settings used
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in ui/base/gestures/gesture_configuration.h
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kPrefsToObserve[] = {
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingAccelerationCurveCoefficient0,
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingAccelerationCurveCoefficient1,
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingAccelerationCurveCoefficient2,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingAccelerationCurveCoefficient3,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingMaxCancelToDownTimeInMs,
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingMaxTapGapTimeInMs,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kTabScrubActivationDelayInMS,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingVelocityCap,
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kLongPressTimeInSeconds,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxDistanceForTwoFingerTapInPixels,
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxSecondsBetweenDoubleClick,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxSeparationForGestureTouchesInPixels,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxSwipeDeviationRatio,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxTouchDownDurationInSecondsForClick,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMaxTouchMoveInPixelsForClick,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinDistanceForPinchScrollInPixels,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinFlickSpeedSquared,
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinPinchUpdateDistanceInPixels,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinRailBreakVelocity,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinScrollDeltaSquared,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinSwipeSpeed,
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kMinTouchDownDurationInSecondsForClick,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kPointsBufferedForVelocity,
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kRailBreakProportion,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kRailStartProportion,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs::kSemiLongPressTimeInSeconds,
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* kFlingTouchpadPrefs[] = {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchpadAlpha,
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchpadBeta,
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchpadGamma
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* kFlingTouchscreenPrefs[] = {
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchscreenAlpha,
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchscreenBeta,
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs::kFlingCurveTouchscreenGamma,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserver::GesturePrefsObserver(PrefService* prefs)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : prefs_(prefs) {
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Clear for migration.
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs->ClearPref(kTouchScreenFlingAccelerationAdjustment);
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Init(prefs);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.RemoveAll();
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Closure callback = base::Bind(&GesturePrefsObserver::Update,
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      base::Unretained(this));
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Closure notify_callback = base::Bind(&GesturePrefsObserver::Notify,
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             base::Unretained(this));
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar_.Add(kPrefsToObserve[i], callback);
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < overscroll_prefs.size(); ++i)
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar_.Add(overscroll_prefs[i].pref_name, callback);
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); ++i)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar_.Add(kFlingTouchpadPrefs[i], notify_callback);
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); ++i)
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar_.Add(kFlingTouchscreenPrefs[i], notify_callback);
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
223b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  for (size_t i = 0; i < arraysize(kImmersiveModePrefs); ++i)
224b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    registrar_.Add(kImmersiveModePrefs[i], callback);
225b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<WorkspaceCyclerPref>& cycler_prefs =
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetWorkspaceCyclerPrefs();
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < cycler_prefs.size(); ++i)
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar_.Add(cycler_prefs[i].pref_name, callback);
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Update();
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserver::~GesturePrefsObserver() {}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GesturePrefsObserver::Shutdown() {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.RemoveAll();
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GesturePrefsObserver::Update() {
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_acceleration_curve_coefficients(0,
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient0));
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_acceleration_curve_coefficients(1,
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient1));
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_acceleration_curve_coefficients(2,
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient2));
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_acceleration_curve_coefficients(3,
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetDouble(prefs::kFlingAccelerationCurveCoefficient3));
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_max_cancel_to_down_time_in_ms(
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetInteger(prefs::kFlingMaxCancelToDownTimeInMs));
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_max_tap_gap_time_in_ms(
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetInteger(prefs::kFlingMaxTapGapTimeInMs));
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_tab_scrub_activation_delay_in_ms(
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetInteger(prefs::kTabScrubActivationDelayInMS));
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GestureConfiguration::set_fling_velocity_cap(
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs_->GetDouble(prefs::kFlingVelocityCap));
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_long_press_time_in_seconds(
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kLongPressTimeInSeconds));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_semi_long_press_time_in_seconds(
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kSemiLongPressTimeInSeconds));
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_distance_for_two_finger_tap_in_pixels(
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxDistanceForTwoFingerTapInPixels));
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_seconds_between_double_click(
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxSecondsBetweenDoubleClick));
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_separation_for_gesture_touches_in_pixels(
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxSeparationForGestureTouchesInPixels));
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_swipe_deviation_ratio(
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxSwipeDeviationRatio));
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_touch_down_duration_in_seconds_for_click(
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxTouchDownDurationInSecondsForClick));
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_touch_move_in_pixels_for_click(
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxTouchMoveInPixelsForClick));
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_max_distance_between_taps_for_double_tap(
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMaxDistanceBetweenTapsForDoubleTap));
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_distance_for_pinch_scroll_in_pixels(
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinDistanceForPinchScrollInPixels));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_flick_speed_squared(
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinFlickSpeedSquared));
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_pinch_update_distance_in_pixels(
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinPinchUpdateDistanceInPixels));
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_rail_break_velocity(
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinRailBreakVelocity));
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_scroll_delta_squared(
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinScrollDeltaSquared));
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_swipe_speed(
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinSwipeSpeed));
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_min_touch_down_duration_in_seconds_for_click(
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kMinTouchDownDurationInSecondsForClick));
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_points_buffered_for_velocity(
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetInteger(
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kPointsBufferedForVelocity));
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_rail_break_proportion(
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kRailBreakProportion));
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConfiguration::set_rail_start_proportion(
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs_->GetDouble(
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs::kRailStartProportion));
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateOverscrollPrefs();
316b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  UpdateImmersiveModePrefs();
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateWorkspaceCyclerPrefs();
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserver::UpdateOverscrollPrefs() {
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < overscroll_prefs.size(); ++i) {
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    content::SetOverscrollConfig(overscroll_prefs[i].config,
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name)));
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
328b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void GesturePrefsObserver::UpdateImmersiveModePrefs() {
329b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(USE_ASH)
33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ImmersiveFullscreenConfiguration::set_immersive_mode_reveal_delay_ms(
331b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      prefs_->GetInteger(prefs::kImmersiveModeRevealDelayMs));
33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ImmersiveFullscreenConfiguration::
33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      set_immersive_mode_reveal_x_threshold_pixels(
33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          prefs_->GetInteger(prefs::kImmersiveModeRevealXThresholdPixels));
335b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif  // USE_ASH
336b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
337b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserver::UpdateWorkspaceCyclerPrefs() {
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<WorkspaceCyclerPref>& cycler_prefs =
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetWorkspaceCyclerPrefs();
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < cycler_prefs.size(); ++i) {
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WorkspaceCyclerConfiguration::Property property =
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        cycler_prefs[i].property;
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (WorkspaceCyclerConfiguration::IsListProperty(property)) {
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WorkspaceCyclerConfiguration::SetListValue(property,
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          *prefs_->GetList(cycler_prefs[i].pref_name));
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else {
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WorkspaceCyclerConfiguration::SetDouble(property,
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          prefs_->GetDouble(cycler_prefs[i].pref_name));
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserver::Notify() {
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Must do a notify to distribute the changes to all renderers.
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::NotificationService* service =
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::NotificationService::current();
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service->Notify(chrome::NOTIFICATION_BROWSER_FLING_CURVE_PARAMETERS_CHANGED,
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  content::Source<GesturePrefsObserver>(this),
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  content::NotificationService::NoDetails());
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserverFactoryAura*
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserverFactoryAura::GetInstance() {
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Singleton<GesturePrefsObserverFactoryAura>::get();
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserverFactoryAura::GesturePrefsObserverFactoryAura()
37490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
37590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "GesturePrefsObserverAura",
37690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {}
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GesturePrefsObserverFactoryAura::~GesturePrefsObserverFactoryAura() {}
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService*
38190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GesturePrefsObserverFactoryAura::BuildServiceInstanceFor(
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* profile) const {
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new GesturePrefsObserver(static_cast<Profile*>(profile)->GetPrefs());
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs(
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < overscroll_prefs.size(); ++i) {
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registry->RegisterDoublePref(
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        overscroll_prefs[i].pref_name,
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        content::GetOverscrollConfig(overscroll_prefs[i].config),
394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserverFactoryAura::RegisterFlingCurveParameters(
399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::RendererPreferences def_prefs;
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < arraysize(kFlingTouchpadPrefs); i++)
403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    registry->RegisterDoublePref(
404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        kFlingTouchpadPrefs[i],
405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        def_prefs.touchpad_fling_profile[i],
406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < arraysize(kFlingTouchscreenPrefs); i++)
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    registry->RegisterDoublePref(
410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        kFlingTouchscreenPrefs[i],
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        def_prefs.touchscreen_fling_profile[i],
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
415b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void GesturePrefsObserverFactoryAura::RegisterImmersiveModePrefs(
416b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
417b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(USE_ASH)
418b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  registry->RegisterIntegerPref(
419b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      prefs::kImmersiveModeRevealDelayMs,
42090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ImmersiveFullscreenConfiguration::immersive_mode_reveal_delay_ms(),
421b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
422b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  registry->RegisterIntegerPref(
423b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      prefs::kImmersiveModeRevealXThresholdPixels,
42490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ImmersiveFullscreenConfiguration::
42590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          immersive_mode_reveal_x_threshold_pixels(),
426b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
427b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif  // USE_ASH
428b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
429b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserverFactoryAura::RegisterWorkspaceCyclerPrefs(
431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH)
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<WorkspaceCyclerPref>& cycler_prefs =
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetWorkspaceCyclerPrefs();
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < cycler_prefs.size(); ++i) {
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WorkspaceCyclerConfiguration::Property property =
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        cycler_prefs[i].property;
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (WorkspaceCyclerConfiguration::IsListProperty(property)) {
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      registry->RegisterListPref(
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          cycler_prefs[i].pref_name,
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          WorkspaceCyclerConfiguration::GetListValue(property).DeepCopy(),
442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else {
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      registry->RegisterDoublePref(
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          cycler_prefs[i].pref_name,
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          WorkspaceCyclerConfiguration::GetDouble(property),
447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // USE_ASH
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GesturePrefsObserverFactoryAura::RegisterUserPrefs(
454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingAccelerationCurveCoefficient0,
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_acceleration_curve_coefficients(0),
458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingAccelerationCurveCoefficient1,
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_acceleration_curve_coefficients(1),
462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingAccelerationCurveCoefficient2,
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_acceleration_curve_coefficients(2),
466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingAccelerationCurveCoefficient3,
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_acceleration_curve_coefficients(3),
470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterIntegerPref(
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingMaxCancelToDownTimeInMs,
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_max_cancel_to_down_time_in_ms(),
474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterIntegerPref(
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingMaxTapGapTimeInMs,
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_max_tap_gap_time_in_ms(),
478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterIntegerPref(
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kTabScrubActivationDelayInMS,
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::tab_scrub_activation_delay_in_ms(),
482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kFlingVelocityCap,
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GestureConfiguration::fling_velocity_cap(),
486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kLongPressTimeInSeconds,
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::long_press_time_in_seconds(),
490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kSemiLongPressTimeInSeconds,
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::semi_long_press_time_in_seconds(),
494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxDistanceForTwoFingerTapInPixels,
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_distance_for_two_finger_tap_in_pixels(),
498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxSecondsBetweenDoubleClick,
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_seconds_between_double_click(),
502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxSeparationForGestureTouchesInPixels,
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_separation_for_gesture_touches_in_pixels(),
506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxSwipeDeviationRatio,
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_swipe_deviation_ratio(),
510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxTouchDownDurationInSecondsForClick,
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_touch_down_duration_in_seconds_for_click(),
514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxTouchMoveInPixelsForClick,
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_touch_move_in_pixels_for_click(),
518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMaxDistanceBetweenTapsForDoubleTap,
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::max_distance_between_taps_for_double_tap(),
522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinDistanceForPinchScrollInPixels,
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_distance_for_pinch_scroll_in_pixels(),
526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinFlickSpeedSquared,
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_flick_speed_squared(),
530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinPinchUpdateDistanceInPixels,
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_pinch_update_distance_in_pixels(),
534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinRailBreakVelocity,
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_rail_break_velocity(),
538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinScrollDeltaSquared,
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_scroll_delta_squared(),
542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinSwipeSpeed,
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_swipe_speed(),
546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kMinTouchDownDurationInSecondsForClick,
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::min_touch_down_duration_in_seconds_for_click(),
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterIntegerPref(
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kPointsBufferedForVelocity,
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::points_buffered_for_velocity(),
554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kRailBreakProportion,
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::rail_break_proportion(),
558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterDoublePref(
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kRailStartProportion,
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GestureConfiguration::rail_start_proportion(),
562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Register for migration.
565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  registry->RegisterDoublePref(
566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      kTouchScreenFlingAccelerationAdjustment,
567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      0.0,
568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RegisterOverscrollPrefs(registry);
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RegisterFlingCurveParameters(registry);
572b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  RegisterImmersiveModePrefs(registry);
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RegisterWorkspaceCyclerPrefs(registry);
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool
57790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GesturePrefsObserverFactoryAura::ServiceIsCreatedWithBrowserContext() const {
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create the observer as soon as the profile is created.
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext*
583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)GesturePrefsObserverFactoryAura::GetBrowserContextToUse(
584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* context) const {
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use same gesture preferences on incognito windows.
586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return chrome::GetBrowserContextRedirectedInIncognito(context);
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GesturePrefsObserverFactoryAura::ServiceIsNULLWhileTesting() const {
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Some tests replace the PrefService of the TestingProfile after the
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GesturePrefsObserver has been created, which makes Shutdown()
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // remove the registrar from a non-existent PrefService.
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595