| // Copyright 2012 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CHROME_BROWSER_ASH_PREFERENCES_H_ | 
 | #define CHROME_BROWSER_ASH_PREFERENCES_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/memory/raw_ptr.h" | 
 | #include "base/memory/weak_ptr.h" | 
 | #include "chrome/browser/ash/language_preferences.h" | 
 | #include "chromeos/ash/components/dbus/update_engine/update_engine_client.h" | 
 | #include "chromeos/crosapi/mojom/cros_display_config.mojom.h" | 
 | #include "components/prefs/pref_change_registrar.h" | 
 | #include "components/prefs/pref_member.h" | 
 | #include "components/sync_preferences/pref_service_syncable_observer.h" | 
 | #include "components/user_manager/user_manager.h" | 
 | #include "mojo/public/cpp/bindings/remote.h" | 
 | #include "ui/base/ime/ash/input_method_manager.h" | 
 |  | 
 | class ContentTracingManager; | 
 | class PrefRegistrySimple; | 
 |  | 
 | namespace chromeos { | 
 | class User; | 
 | } | 
 |  | 
 | namespace sync_preferences { | 
 | class PrefServiceSyncable; | 
 | }  // namespace sync_preferences | 
 |  | 
 | namespace user_prefs { | 
 | class PrefRegistrySyncable; | 
 | }  // namespace user_prefs | 
 |  | 
 | namespace ash { | 
 |  | 
 | namespace input_method { | 
 | class InputMethodSyncer; | 
 | } | 
 |  | 
 | // The Preferences class handles Chrome OS preferences. When the class | 
 | // is first initialized, it will initialize the OS settings to what's stored in | 
 | // the preferences. These include touchpad settings, etc. | 
 | // When the preferences change, we change the settings to reflect the new value. | 
 | class Preferences : public sync_preferences::PrefServiceSyncableObserver, | 
 |                     public user_manager::UserManager::UserSessionStateObserver, | 
 |                     public UpdateEngineClient::Observer { | 
 |  public: | 
 |   Preferences(); | 
 |   explicit Preferences( | 
 |       input_method::InputMethodManager* input_method_manager);  // for testing | 
 |  | 
 |   Preferences(const Preferences&) = delete; | 
 |   Preferences& operator=(const Preferences&) = delete; | 
 |  | 
 |   ~Preferences() override; | 
 |  | 
 |   // These method will register the prefs associated with Chrome OS settings. | 
 |   static void RegisterPrefs(PrefRegistrySimple* registry); | 
 |   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | 
 |  | 
 |   // This method will initialize Chrome OS settings to values in user prefs. | 
 |   // |user| is the user owning this preferences. | 
 |   void Init(Profile* profile, const user_manager::User* user); | 
 |  | 
 |   void InitPrefsForTesting(sync_preferences::PrefServiceSyncable* prefs); | 
 |   void InitUserPrefsForTesting( | 
 |       sync_preferences::PrefServiceSyncable* prefs, | 
 |       const user_manager::User* user, | 
 |       scoped_refptr<input_method::InputMethodManager::State> ime_state); | 
 |   void SetInputMethodListForTesting(); | 
 |  | 
 |  private: | 
 |   enum ApplyReason { | 
 |     REASON_INITIALIZATION, | 
 |     REASON_ACTIVE_USER_CHANGED, | 
 |     REASON_PREF_CHANGED | 
 |   }; | 
 |  | 
 |   // Initializes all member prefs. | 
 |   void InitUserPrefs(sync_preferences::PrefServiceSyncable* prefs); | 
 |  | 
 |   // Callback method for preference changes. | 
 |   void OnPreferenceChanged(const std::string& pref_name); | 
 |  | 
 |   // Add a sample to the appropriate UMA histogram for a boolean preference. | 
 |   void ReportBooleanPrefApplication(ApplyReason reason, | 
 |                                     const std::string& changed_histogram_name, | 
 |                                     const std::string& started_histogram_name, | 
 |                                     bool sample); | 
 |  | 
 |   // Add a sample to the appropriate UMA histogram for a sensitivity preference. | 
 |   void ReportSensitivityPrefApplication( | 
 |       ApplyReason reason, | 
 |       const std::string& changed_histogram_name, | 
 |       const std::string& started_histogram_name, | 
 |       int sensitivity_int); | 
 |  | 
 |   // Add a sample to the appropriate UMA histogram for a time/rate preference. | 
 |   void ReportTimePrefApplication(ApplyReason reason, | 
 |                                  const std::string& changed_histogram_name, | 
 |                                  const std::string& started_histogram_name, | 
 |                                  base::TimeDelta duration); | 
 |  | 
 |   // This will set the OS settings when the preference changed or the user | 
 |   // owning these preferences became active. Also this method is called on | 
 |   // initialization. The reason of the call is stored as the |reason| parameter. | 
 |   // |pref_name| is the name of the changed preference if the |reason| is | 
 |   // |REASON_PREF_CHANGED|, otherwise it is empty. | 
 |   void ApplyPreferences(ApplyReason reason, | 
 |                         const std::string& pref_name); | 
 |  | 
 |   // A variant of SetLanguageConfigStringList. You can pass comma-separated | 
 |   // values. Examples of |value|: "", "Control+space,Hiragana" | 
 |   void SetLanguageConfigStringListAsCSV(const char* section, | 
 |                                         const char* name, | 
 |                                         const std::string& value); | 
 |  | 
 |   // Restores the user's preferred input method / keyboard layout on signing in. | 
 |   void SetInputMethodList(); | 
 |  | 
 |   // Updates the initial key repeat delay and key repeat interval following | 
 |   // current prefs values. We set the delay and interval at once since an | 
 |   // underlying XKB API requires it. | 
 |   void UpdateAutoRepeatRate(); | 
 |  | 
 |   // Force natural scroll to on if --enable-natural-scroll-default is specified | 
 |   // on the cmd line. | 
 |   void ForceNaturalScrollDefault(); | 
 |  | 
 |   // sync_preferences::PrefServiceSyncableObserver implementation. | 
 |   void OnIsSyncingChanged() override; | 
 |  | 
 |   // Overriden form user_manager::UserManager::UserSessionStateObserver. | 
 |   void ActiveUserChanged(user_manager::User* active_user) override; | 
 |  | 
 |   // UpdateEngineClient::Observer implementation. | 
 |   void UpdateStatusChanged(const update_engine::StatusResult& status) override; | 
 |   void OnIsConsumerAutoUpdateEnabled(std::optional<bool> enabled); | 
 |  | 
 |   raw_ptr<sync_preferences::PrefServiceSyncable> prefs_; | 
 |  | 
 |   raw_ptr<input_method::InputMethodManager> input_method_manager_; | 
 |   std::unique_ptr<ContentTracingManager> tracing_manager_; | 
 |  | 
 |   BooleanPrefMember performance_tracing_enabled_; | 
 |   BooleanPrefMember tap_to_click_enabled_; | 
 |   BooleanPrefMember three_finger_click_enabled_; | 
 |   BooleanPrefMember unified_desktop_enabled_by_default_; | 
 |   BooleanPrefMember natural_scroll_; | 
 |   BooleanPrefMember vert_edge_scroll_enabled_; | 
 |   IntegerPrefMember speed_factor_; | 
 |   IntegerPrefMember mouse_sensitivity_; | 
 |   IntegerPrefMember mouse_scroll_sensitivity_; | 
 |   IntegerPrefMember pointing_stick_sensitivity_; | 
 |   IntegerPrefMember touchpad_sensitivity_; | 
 |   IntegerPrefMember touchpad_scroll_sensitivity_; | 
 |   BooleanPrefMember primary_mouse_button_right_; | 
 |   BooleanPrefMember primary_pointing_stick_button_right_; | 
 |   BooleanPrefMember mouse_reverse_scroll_; | 
 |   BooleanPrefMember mouse_acceleration_; | 
 |   BooleanPrefMember mouse_scroll_acceleration_; | 
 |   BooleanPrefMember pointing_stick_acceleration_; | 
 |   BooleanPrefMember touchpad_acceleration_; | 
 |   BooleanPrefMember touchpad_scroll_acceleration_; | 
 |   BooleanPrefMember touchpad_haptic_feedback_; | 
 |   IntegerPrefMember touchpad_haptic_click_sensitivity_; | 
 |   FilePathPrefMember download_default_directory_; | 
 |  | 
 |   StringListPrefMember allowed_languages_; | 
 |   StringPrefMember preferred_languages_; | 
 |  | 
 |   // Input method preferences. | 
 |   StringPrefMember preload_engines_; | 
 |   StringPrefMember current_input_method_; | 
 |   StringPrefMember previous_input_method_; | 
 |  | 
 |   StringListPrefMember allowed_input_methods_; | 
 |   StringPrefMember enabled_imes_; | 
 |   BooleanPrefMember ime_menu_activated_; | 
 |  | 
 |   BooleanPrefMember long_press_diacritics_enabled_; | 
 |   BooleanPrefMember xkb_auto_repeat_enabled_; | 
 |   IntegerPrefMember xkb_auto_repeat_delay_pref_; | 
 |   IntegerPrefMember xkb_auto_repeat_interval_pref_; | 
 |  | 
 |   BooleanPrefMember pci_data_access_enabled_pref_; | 
 |  | 
 |   BooleanPrefMember consumer_auto_update_toggle_pref_; | 
 |  | 
 |   PrefChangeRegistrar pref_change_registrar_; | 
 |  | 
 |   // User owning these preferences. | 
 |   raw_ptr<const user_manager::User> user_; | 
 |  | 
 |   // Whether user is a primary user. | 
 |   bool user_is_primary_; | 
 |  | 
 |   // Input Methods state for this user. | 
 |   scoped_refptr<input_method::InputMethodManager::State> ime_state_; | 
 |  | 
 |   std::unique_ptr<input_method::InputMethodSyncer> input_method_syncer_; | 
 |  | 
 |   mojo::Remote<crosapi::mojom::CrosDisplayConfigController> | 
 |       cros_display_config_; | 
 |  | 
 |   // Note: This should remain the last member so it'll be destroyed and | 
 |   // invalidate its weak pointers before any other members are destroyed. | 
 |   base::WeakPtrFactory<Preferences> weak_ptr_factory_{this}; | 
 | }; | 
 |  | 
 | }  // namespace ash | 
 |  | 
 | #endif  // CHROME_BROWSER_ASH_PREFERENCES_H_ |