| // Copyright 2017 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_EXTENSIONS_API_SETTINGS_PRIVATE_GENERATED_PREF_H_ |
| #define CHROME_BROWSER_EXTENSIONS_API_SETTINGS_PRIVATE_GENERATED_PREF_H_ |
| |
| #include <string> |
| #include "base/observer_list.h" |
| #include "chrome/browser/extensions/api/settings_private/prefs_util_enums.h" |
| #include "components/content_settings/core/common/content_settings.h" |
| #include "components/prefs/pref_service.h" |
| |
| namespace base { |
| class Value; |
| } |
| |
| namespace extensions { |
| namespace api { |
| namespace settings_private { |
| struct PrefObject; |
| } // namespace settings_private |
| } // namespace api |
| |
| namespace settings_private { |
| |
| // Base class for generated preference implementation. |
| // These are the "preferences" that exist in settings_private API only |
| // to simplify creating Settings UI for something not directly attached to |
| // user preference. |
| class GeneratedPref { |
| public: |
| class Observer { |
| public: |
| Observer(); |
| |
| Observer(const Observer&) = delete; |
| Observer& operator=(const Observer&) = delete; |
| |
| virtual ~Observer(); |
| |
| // This method is called to notify observer that visible value |
| // of the preference has changed. |
| virtual void OnGeneratedPrefChanged(const std::string& pref_name) = 0; |
| }; |
| |
| GeneratedPref(const GeneratedPref&) = delete; |
| GeneratedPref& operator=(const GeneratedPref&) = delete; |
| |
| virtual ~GeneratedPref(); |
| |
| // Returns fully populated PrefObject. |
| virtual api::settings_private::PrefObject GetPrefObject() const = 0; |
| |
| // Updates "preference" value. |
| virtual SetPrefResult SetPref(const base::Value* value) = 0; |
| |
| // Modify observer list. |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| protected: |
| GeneratedPref(); |
| |
| // Call this when the pref value changes. |
| void NotifyObservers(const std::string& pref_name); |
| |
| // Sets controlled_by for |pref_object| based on provided |pref| for a limited |
| // subset of controlled_by sources relevant to generated pref use cases. |
| static void ApplyControlledByFromPref( |
| api::settings_private::PrefObject* pref_object, |
| const PrefService::Preference* pref); |
| |
| // Sets controlled_by for |pref_object| base on provided |setting_source| |
| // for a limited subset of controlled_by sources relevant for content |
| // settings. |
| static void ApplyControlledByFromContentSettingSource( |
| api::settings_private::PrefObject* pref_object, |
| content_settings::SettingSource setting_source); |
| |
| // Adds the provided |value| to the user selectable values of |pref_object|, |
| // creating the base::Value vector if required. |
| static void AddUserSelectableValue( |
| extensions::api::settings_private::PrefObject* pref_object, |
| int value); |
| |
| private: |
| base::ObserverList<Observer>::Unchecked observers_; |
| }; |
| |
| } // namespace settings_private |
| } // namespace extensions |
| |
| #endif // CHROME_BROWSER_EXTENSIONS_API_SETTINGS_PRIVATE_GENERATED_PREF_H_ |