- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / preferences.h
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
6 #define CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "ash/shell_observer.h"
12 #include "base/compiler_specific.h"
13 #include "base/prefs/pref_member.h"
14 #include "chrome/browser/chromeos/language_preferences.h"
15 #include "chrome/browser/prefs/pref_service_syncable_observer.h"
16
17 class PrefRegistrySimple;
18 class PrefService;
19 class PrefServiceSyncable;
20
21 class TracingManager;
22
23 namespace user_prefs {
24 class PrefRegistrySyncable;
25 }
26
27 namespace chromeos {
28
29 namespace input_method {
30 class InputMethodManager;
31 }
32
33 // The Preferences class handles Chrome OS preferences. When the class
34 // is first initialized, it will initialize the OS settings to what's stored in
35 // the preferences. These include touchpad settings, etc.
36 // When the preferences change, we change the settings to reflect the new value.
37 class Preferences : public PrefServiceSyncableObserver,
38                     public ash::ShellObserver {
39  public:
40   Preferences();
41   explicit Preferences(
42       input_method::InputMethodManager* input_method_manager);  // for testing
43   virtual ~Preferences();
44
45   // These method will register the prefs associated with Chrome OS settings.
46   static void RegisterPrefs(PrefRegistrySimple* registry);
47   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
48
49   // This method will initialize Chrome OS settings to values in user prefs.
50   // |is_primary_user| is true if preferences are initialized for primary user
51   // in multi-profile session.
52   void Init(PrefServiceSyncable* prefs, bool is_primary_user);
53
54   void InitUserPrefsForTesting(PrefServiceSyncable* prefs);
55   void SetInputMethodListForTesting();
56
57  private:
58   // Initializes all member prefs.
59   void InitUserPrefs(PrefServiceSyncable* prefs);
60
61   // Callback method for preference changes.
62   void OnPreferenceChanged(const std::string& pref_name);
63
64   // This will set the OS settings when the preference changes.
65   // If this method is called with NULL, it will set all OS settings to what's
66   // stored in the preferences.
67   void NotifyPrefChanged(const std::string* pref_name);
68
69   // A variant of SetLanguageConfigStringList. You can pass comma-separated
70   // values. Examples of |value|: "", "Control+space,Hiragana"
71   void SetLanguageConfigStringListAsCSV(const char* section,
72                                         const char* name,
73                                         const std::string& value);
74
75   // Restores the user's preferred input method / keyboard layout on signing in.
76   void SetInputMethodList();
77
78   // Updates the initial key repeat delay and key repeat interval following
79   // current prefs values. We set the delay and interval at once since an
80   // underlying XKB API requires it.
81   void UpdateAutoRepeatRate();
82
83   // Force natural scroll to on if --enable-natural-scroll-default is specified
84   // on the cmd line.
85   void ForceNaturalScrollDefault();
86
87   // PrefServiceSyncableObserver implementation.
88   virtual void OnIsSyncingChanged() OVERRIDE;
89
90   // Overriden from ash::ShellObserver.
91   virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
92
93   PrefServiceSyncable* prefs_;
94
95   input_method::InputMethodManager* input_method_manager_;
96   scoped_ptr<TracingManager> tracing_manager_;
97
98   BooleanPrefMember performance_tracing_enabled_;
99   BooleanPrefMember tap_to_click_enabled_;
100   BooleanPrefMember tap_dragging_enabled_;
101   BooleanPrefMember three_finger_click_enabled_;
102   BooleanPrefMember natural_scroll_;
103   BooleanPrefMember vert_edge_scroll_enabled_;
104   BooleanPrefMember a11y_spoken_feedback_enabled_;
105   BooleanPrefMember a11y_high_contrast_enabled_;
106   BooleanPrefMember a11y_screen_magnifier_enabled_;
107   IntegerPrefMember a11y_screen_magnifier_type_;
108   DoublePrefMember a11y_screen_magnifier_scale_;
109   IntegerPrefMember speed_factor_;
110   IntegerPrefMember mouse_sensitivity_;
111   IntegerPrefMember touchpad_sensitivity_;
112   BooleanPrefMember primary_mouse_button_right_;
113   BooleanPrefMember use_24hour_clock_;
114   BooleanPrefMember disable_drive_;
115   BooleanPrefMember disable_drive_over_cellular_;
116   BooleanPrefMember disable_drive_hosted_files_;
117   FilePathPrefMember download_default_directory_;
118   FilePathPrefMember select_file_last_directory_;
119   FilePathPrefMember save_file_default_directory_;
120   BooleanPrefMember touch_hud_projection_enabled_;
121
122   // Input method preferences.
123   StringPrefMember preferred_languages_;
124   StringPrefMember preload_engines_;
125   StringPrefMember current_input_method_;
126   StringPrefMember previous_input_method_;
127   StringPrefMember enabled_extension_imes_;
128
129   BooleanPrefMember xkb_auto_repeat_enabled_;
130   IntegerPrefMember xkb_auto_repeat_delay_pref_;
131   IntegerPrefMember xkb_auto_repeat_interval_pref_;
132
133   // True if this preferences instance is for primary user.
134   bool is_primary_user_prefs_;
135
136   DISALLOW_COPY_AND_ASSIGN(Preferences);
137 };
138
139 }  // namespace chromeos
140
141 #endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_