preferences.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable_observer.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass TracingManager;
23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class User;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace input_method {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputMethodManager;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Preferences class handles Chrome OS preferences. When the class
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is first initialized, it will initialize the OS settings to what's stored in
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the preferences. These include touchpad settings, etc.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the preferences change, we change the settings to reflect the new value.
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass Preferences : public PrefServiceSyncableObserver,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    public ash::ShellObserver,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    public UserManager::UserSessionStateObserver {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Preferences();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Preferences(
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      input_method::InputMethodManager* input_method_manager);  // for testing
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~Preferences();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // These method will register the prefs associated with Chrome OS settings.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RegisterPrefs(PrefRegistrySimple* registry);
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This method will initialize Chrome OS settings to values in user prefs.
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |user| is the user owning this preferences.
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void Init(PrefServiceSyncable* prefs, const user_manager::User* user);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void InitUserPrefsForTesting(PrefServiceSyncable* prefs,
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                               const user_manager::User* user);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodListForTesting();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enum ApplyReason {
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_INITIALIZATION,
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_ACTIVE_USER_CHANGED,
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_PREF_CHANGED
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes all member prefs.
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitUserPrefs(PrefServiceSyncable* prefs);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Callback method for preference changes.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPreferenceChanged(const std::string& pref_name);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This will set the OS settings when the preference changed or user owning
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // these preferences became active. Also this method is called on
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // initialization. The reason of call is stored in |reason| parameter.
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |pref_name| keeps name of changed preference in |reason| is
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |REASON_PREF_CHANGED|, otherwise it is empty.
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void ApplyPreferences(ApplyReason reason,
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const std::string& pref_name);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A variant of SetLanguageConfigStringList. You can pass comma-separated
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // values. Examples of |value|: "", "Control+space,Hiragana"
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetLanguageConfigStringListAsCSV(const char* section,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const char* name,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& value);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Restores the user's preferred input method / keyboard layout on signing in.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodList();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the initial key repeat delay and key repeat interval following
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // current prefs values. We set the delay and interval at once since an
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // underlying XKB API requires it.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAutoRepeatRate();
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Force natural scroll to on if --enable-natural-scroll-default is specified
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // on the cmd line.
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ForceNaturalScrollDefault();
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PrefServiceSyncableObserver implementation.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnIsSyncingChanged() OVERRIDE;
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Overriden from ash::ShellObserver.
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Overriden form UserManager::UserSessionStateObserver.
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ActiveUserChanged(
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const user_manager::User* active_user) OVERRIDE;
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefServiceSyncable* prefs_;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  input_method::InputMethodManager* input_method_manager_;
113bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  scoped_ptr<TracingManager> tracing_manager_;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  BooleanPrefMember performance_tracing_enabled_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_to_click_enabled_;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_dragging_enabled_;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember three_finger_click_enabled_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember natural_scroll_;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember vert_edge_scroll_enabled_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember speed_factor_;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember mouse_sensitivity_;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember touchpad_sensitivity_;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember primary_mouse_button_right_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FilePathPrefMember download_default_directory_;
1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  BooleanPrefMember touch_hud_projection_enabled_;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Input method preferences.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember preload_engines_;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember current_input_method_;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember previous_input_method_;
132b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  StringPrefMember enabled_extension_imes_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember xkb_auto_repeat_enabled_;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_delay_pref_;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_interval_pref_;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // User owning these preferences.
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const user_manager::User* user_;
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Whether user is a primary user.
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool user_is_primary_;
1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Preferences);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
150