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