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"
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chromeos/ime/input_method_manager.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass TracingManager;
24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs {
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class User;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace input_method {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputMethodManager;
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Preferences class handles Chrome OS preferences. When the class
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is first initialized, it will initialize the OS settings to what's stored in
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the preferences. These include touchpad settings, etc.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the preferences change, we change the settings to reflect the new value.
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass Preferences : public PrefServiceSyncableObserver,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    public ash::ShellObserver,
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                    public user_manager::UserManager::UserSessionStateObserver {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Preferences();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Preferences(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      input_method::InputMethodManager* input_method_manager);  // for testing
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~Preferences();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // These method will register the prefs associated with Chrome OS settings.
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void RegisterPrefs(PrefRegistrySimple* registry);
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This method will initialize Chrome OS settings to values in user prefs.
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |user| is the user owning this preferences.
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void Init(Profile* profile, const user_manager::User* user);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void InitUserPrefsForTesting(
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      PrefServiceSyncable* prefs,
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const user_manager::User* user,
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      scoped_refptr<input_method::InputMethodManager::State> ime_state);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodListForTesting();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  enum ApplyReason {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_INITIALIZATION,
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_ACTIVE_USER_CHANGED,
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    REASON_PREF_CHANGED
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes all member prefs.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitUserPrefs(PrefServiceSyncable* prefs);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Callback method for preference changes.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPreferenceChanged(const std::string& pref_name);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This will set the OS settings when the preference changed or user owning
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // these preferences became active. Also this method is called on
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // initialization. The reason of call is stored in |reason| parameter.
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |pref_name| keeps name of changed preference in |reason| is
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |REASON_PREF_CHANGED|, otherwise it is empty.
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void ApplyPreferences(ApplyReason reason,
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const std::string& pref_name);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A variant of SetLanguageConfigStringList. You can pass comma-separated
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // values. Examples of |value|: "", "Control+space,Hiragana"
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetLanguageConfigStringListAsCSV(const char* section,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const char* name,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& value);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Restores the user's preferred input method / keyboard layout on signing in.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInputMethodList();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the initial key repeat delay and key repeat interval following
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // current prefs values. We set the delay and interval at once since an
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // underlying XKB API requires it.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAutoRepeatRate();
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Force natural scroll to on if --enable-natural-scroll-default is specified
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // on the cmd line.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ForceNaturalScrollDefault();
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PrefServiceSyncableObserver implementation.
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnIsSyncingChanged() OVERRIDE;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Overriden from ash::ShellObserver.
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Overriden form user_manager::UserManager::UserSessionStateObserver.
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ActiveUserChanged(
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const user_manager::User* active_user) OVERRIDE;
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void ActivateInputMethods(const user_manager::User* active_user);
11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefServiceSyncable* prefs_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  input_method::InputMethodManager* input_method_manager_;
118bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  scoped_ptr<TracingManager> tracing_manager_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
120bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  BooleanPrefMember performance_tracing_enabled_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_to_click_enabled_;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember tap_dragging_enabled_;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember three_finger_click_enabled_;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember natural_scroll_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember vert_edge_scroll_enabled_;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember speed_factor_;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember mouse_sensitivity_;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember touchpad_sensitivity_;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember primary_mouse_button_right_;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FilePathPrefMember download_default_directory_;
1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  BooleanPrefMember touch_hud_projection_enabled_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Input method preferences.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember preload_engines_;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember current_input_method_;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember previous_input_method_;
137b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  StringPrefMember enabled_extension_imes_;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember xkb_auto_repeat_enabled_;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_delay_pref_;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember xkb_auto_repeat_interval_pref_;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // User owning these preferences.
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const user_manager::User* user_;
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Whether user is a primary user.
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool user_is_primary_;
1480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Input Methods state for this user.
15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_refptr<input_method::InputMethodManager::State> ime_state_;
15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Preferences);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
158