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