Update To 11.40.268.0
[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 #include "chromeos/ime/input_method_manager.h"
17 #include "components/user_manager/user_manager.h"
18
19 class PrefRegistrySimple;
20 class PrefService;
21 class PrefServiceSyncable;
22
23 class TracingManager;
24
25 namespace user_prefs {
26 class PrefRegistrySyncable;
27 }
28
29 namespace chromeos {
30
31 class User;
32
33 namespace input_method {
34 class InputMethodManager;
35 }
36
37 // The Preferences class handles Chrome OS preferences. When the class
38 // is first initialized, it will initialize the OS settings to what's stored in
39 // the preferences. These include touchpad settings, etc.
40 // When the preferences change, we change the settings to reflect the new value.
41 class Preferences : public PrefServiceSyncableObserver,
42                     public ash::ShellObserver,
43                     public user_manager::UserManager::UserSessionStateObserver {
44  public:
45   Preferences();
46   explicit Preferences(
47       input_method::InputMethodManager* input_method_manager);  // for testing
48   virtual ~Preferences();
49
50   // These method will register the prefs associated with Chrome OS settings.
51   static void RegisterPrefs(PrefRegistrySimple* registry);
52   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
53
54   // This method will initialize Chrome OS settings to values in user prefs.
55   // |user| is the user owning this preferences.
56   void Init(Profile* profile, const user_manager::User* user);
57
58   void InitUserPrefsForTesting(
59       PrefServiceSyncable* prefs,
60       const user_manager::User* user,
61       scoped_refptr<input_method::InputMethodManager::State> ime_state);
62   void SetInputMethodListForTesting();
63
64  private:
65   enum ApplyReason {
66     REASON_INITIALIZATION,
67     REASON_ACTIVE_USER_CHANGED,
68     REASON_PREF_CHANGED
69   };
70
71   // Initializes all member prefs.
72   void InitUserPrefs(PrefServiceSyncable* prefs);
73
74   // Callback method for preference changes.
75   void OnPreferenceChanged(const std::string& pref_name);
76
77   // This will set the OS settings when the preference changed or user owning
78   // these preferences became active. Also this method is called on
79   // initialization. The reason of call is stored in |reason| parameter.
80   // |pref_name| keeps name of changed preference in |reason| is
81   // |REASON_PREF_CHANGED|, otherwise it is empty.
82   void ApplyPreferences(ApplyReason reason,
83                         const std::string& pref_name);
84
85   // A variant of SetLanguageConfigStringList. You can pass comma-separated
86   // values. Examples of |value|: "", "Control+space,Hiragana"
87   void SetLanguageConfigStringListAsCSV(const char* section,
88                                         const char* name,
89                                         const std::string& value);
90
91   // Restores the user's preferred input method / keyboard layout on signing in.
92   void SetInputMethodList();
93
94   // Updates the initial key repeat delay and key repeat interval following
95   // current prefs values. We set the delay and interval at once since an
96   // underlying XKB API requires it.
97   void UpdateAutoRepeatRate();
98
99   // Force natural scroll to on if --enable-natural-scroll-default is specified
100   // on the cmd line.
101   void ForceNaturalScrollDefault();
102
103   // PrefServiceSyncableObserver implementation.
104   virtual void OnIsSyncingChanged() override;
105
106   // Overriden from ash::ShellObserver.
107   virtual void OnTouchHudProjectionToggled(bool enabled) override;
108
109   // Overriden form user_manager::UserManager::UserSessionStateObserver.
110   virtual void ActiveUserChanged(
111       const user_manager::User* active_user) override;
112
113   void ActivateInputMethods(const user_manager::User* active_user);
114
115   PrefServiceSyncable* prefs_;
116
117   input_method::InputMethodManager* input_method_manager_;
118   scoped_ptr<TracingManager> tracing_manager_;
119
120   BooleanPrefMember performance_tracing_enabled_;
121   BooleanPrefMember tap_to_click_enabled_;
122   BooleanPrefMember tap_dragging_enabled_;
123   BooleanPrefMember three_finger_click_enabled_;
124   BooleanPrefMember natural_scroll_;
125   BooleanPrefMember vert_edge_scroll_enabled_;
126   IntegerPrefMember speed_factor_;
127   IntegerPrefMember mouse_sensitivity_;
128   IntegerPrefMember touchpad_sensitivity_;
129   BooleanPrefMember primary_mouse_button_right_;
130   FilePathPrefMember download_default_directory_;
131   BooleanPrefMember touch_hud_projection_enabled_;
132
133   // Input method preferences.
134   StringPrefMember preload_engines_;
135   StringPrefMember current_input_method_;
136   StringPrefMember previous_input_method_;
137   StringPrefMember enabled_extension_imes_;
138
139   BooleanPrefMember xkb_auto_repeat_enabled_;
140   IntegerPrefMember xkb_auto_repeat_delay_pref_;
141   IntegerPrefMember xkb_auto_repeat_interval_pref_;
142
143   // User owning these preferences.
144   const user_manager::User* user_;
145
146   // Whether user is a primary user.
147   bool user_is_primary_;
148
149   // Input Methods state for this user.
150   scoped_refptr<input_method::InputMethodManager::State> ime_state_;
151
152   DISALLOW_COPY_AND_ASSIGN(Preferences);
153 };
154
155 }  // namespace chromeos
156
157 #endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_