preferences.h revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)#ifndef CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/shell_observer.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/language_preferences.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable_observer.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass TracingManager;
22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs {
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable;
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace input_method {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputMethodManager;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Preferences class handles Chrome OS preferences. When the class
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is first initialized, it will initialize the OS settings to what's stored in
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the preferences. These include touchpad settings, etc.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the preferences change, we change the settings to reflect the new value.
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass Preferences : public PrefServiceSyncableObserver,
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                    public ash::ShellObserver {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Preferences();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Preferences(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      input_method::InputMethodManager* input_method_manager);  // for testing
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~Preferences();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // These method will register the prefs associated with Chrome OS settings.
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RegisterPrefs(PrefRegistrySimple* registry);
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This method will initialize Chrome OS settings to values in user prefs.
500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // |is_primary_user| is true if preferences are initialized for primary user
510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // in multi-profile session.
520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  void Init(PrefServiceSyncable* prefs, bool is_primary_user);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitUserPrefsForTesting(PrefServiceSyncable* prefs);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodListForTesting();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes all member prefs.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitUserPrefs(PrefServiceSyncable* prefs);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Callback method for preference changes.
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPreferenceChanged(const std::string& pref_name);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This will set the OS settings when the preference changes.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this method is called with NULL, it will set all OS settings to what's
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // stored in the preferences.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void NotifyPrefChanged(const std::string* pref_name);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A variant of SetLanguageConfigStringList. You can pass comma-separated
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // values. Examples of |value|: "", "Control+space,Hiragana"
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetLanguageConfigStringListAsCSV(const char* section,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const char* name,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& value);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Restores the user's preferred input method / keyboard layout on signing in.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodList();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the initial key repeat delay and key repeat interval following
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // current prefs values. We set the delay and interval at once since an
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // underlying XKB API requires it.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAutoRepeatRate();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Force natural scroll to on if --enable-natural-scroll-default is specified
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // on the cmd line.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ForceNaturalScrollDefault();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PrefServiceSyncableObserver implementation.
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnIsSyncingChanged() OVERRIDE;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Overriden from ash::ShellObserver.
917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefServiceSyncable* prefs_;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  input_method::InputMethodManager* input_method_manager_;
96bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  scoped_ptr<TracingManager> tracing_manager_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  BooleanPrefMember performance_tracing_enabled_;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_to_click_enabled_;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_dragging_enabled_;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember three_finger_click_enabled_;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember natural_scroll_;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember vert_edge_scroll_enabled_;
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  BooleanPrefMember a11y_spoken_feedback_enabled_;
105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  BooleanPrefMember a11y_high_contrast_enabled_;
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  BooleanPrefMember a11y_screen_magnifier_enabled_;
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  IntegerPrefMember a11y_screen_magnifier_type_;
108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DoublePrefMember a11y_screen_magnifier_scale_;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember speed_factor_;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember mouse_sensitivity_;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember touchpad_sensitivity_;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember primary_mouse_button_right_;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember use_24hour_clock_;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember disable_drive_;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember disable_drive_over_cellular_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember disable_drive_hosted_files_;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FilePathPrefMember download_default_directory_;
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FilePathPrefMember select_file_last_directory_;
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FilePathPrefMember save_file_default_directory_;
1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  BooleanPrefMember touch_hud_projection_enabled_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Input method preferences.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember preferred_languages_;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember preload_engines_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember current_input_method_;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember previous_input_method_;
127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  StringPrefMember enabled_extension_imes_;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember xkb_auto_repeat_enabled_;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_delay_pref_;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_interval_pref_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // True if this preferences instance is for primary user.
1340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  bool is_primary_user_prefs_;
1350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Preferences);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
142