| Index: chrome/browser/extensions/extension_prefs.h
|
| diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h
|
| index 298d03ce849aed1c541f6688858ec667586392df..f027f611c7cbb6afe41634405d396ecc087fae17 100644
|
| --- a/chrome/browser/extensions/extension_prefs.h
|
| +++ b/chrome/browser/extensions/extension_prefs.h
|
| @@ -19,6 +19,17 @@
|
| // Class for managing global and per-extension preferences.
|
| // This class is instantiated by ExtensionsService, so it should be accessed
|
| // from there.
|
| +//
|
| +// This class distinguishes the following kinds of preferences:
|
| +// - global preferences:
|
| +// not associated with extensions
|
| +// - per-extension preferences:
|
| +// meta-preferences describing properties of the extension like
|
| +// installation time, whether the extension is enabled, etc.
|
| +// - extension controlled preferences:
|
| +// global preferences that an individual extension wants to set;
|
| +// these are arbitrary preferences that are controlled by other
|
| +// sub-systems.
|
| class ExtensionPrefs {
|
| public:
|
| // Key name for a preference that keeps track of per-extension settings. This
|
| @@ -73,7 +84,7 @@ class ExtensionPrefs {
|
| bool external_uninstall);
|
|
|
| // Returns the state (enabled/disabled) of the given extension.
|
| - Extension::State GetExtensionState(const std::string& extension_id);
|
| + Extension::State GetExtensionState(const std::string& extension_id) const;
|
|
|
| // Called to change the extension's state when it is enabled/disabled.
|
| void SetExtensionState(const Extension* extension, Extension::State);
|
| @@ -194,11 +205,23 @@ class ExtensionPrefs {
|
| const std::string& data);
|
| std::string GetUpdateUrlData(const std::string& extension_id);
|
|
|
| + // Sets a preference value that is controlled by the extension. In other
|
| + // words, this is not a pref value *about* the extension but something
|
| + // global the extension wants to override.
|
| + void SetExtensionControlledPref(const std::string& extension_id,
|
| + const std::string& pref_key,
|
| + Value* value);
|
| +
|
| static void RegisterUserPrefs(PrefService* prefs);
|
|
|
| // The underlying PrefService.
|
| PrefService* pref_service() const { return prefs_; }
|
|
|
| + protected:
|
| + // For unit testing. Enables injecting an artificial clock that is used
|
| + // to query the current time, when an extension is installed.
|
| + base::Time GetCurrentTime() const;
|
| +
|
| private:
|
| // Converts absolute paths in the pref to paths relative to the
|
| // install_directory_.
|
| @@ -240,6 +263,11 @@ class ExtensionPrefs {
|
| // Same as above, but returns NULL if it doesn't exist.
|
| DictionaryValue* GetExtensionPref(const std::string& id) const;
|
|
|
| + // Returns the dictionary of preferences controlled by the specified extension
|
| + // or NULL if unknown. All entries in the dictionary contain non-expanded
|
| + // paths.
|
| + DictionaryValue* GetExtensionControlledPrefs(const std::string& id) const;
|
| +
|
| // Serializes the data and schedules a persistent save via the |PrefService|.
|
| // Additionally fires a PREF_CHANGED notification with the top-level
|
| // |kExtensionsPref| path set.
|
| @@ -257,6 +285,28 @@ class ExtensionPrefs {
|
| base::Time LastPingDayImpl(const DictionaryValue* dictionary) const;
|
| void SetLastPingDayImpl(const base::Time& time, DictionaryValue* dictionary);
|
|
|
| + // Helper method to acquire the installation time of an extension
|
| + base::Time GetInstallTime(const DictionaryValue* extension) const;
|
| +
|
| + // Installs the persistent extension preferences into |prefs_|'s extension
|
| + // pref store.
|
| + void InstallPersistedExtensionControlledPrefs();
|
| +
|
| + // Returns the extension controlled preference value of the extension that was
|
| + // installed most recently.
|
| + const Value* WinningExtensionControlledPrefValue(const std::string& key)
|
| + const;
|
| +
|
| + // Find the most recently installed extension that defines a preference
|
| + // for |pref_key|, then store its value in the PrefValueStore's extension pref
|
| + // store and send notifications to observers in case the value changed.
|
| + void UpdateWinningPref(const std::string& pref_key);
|
| +
|
| + // Retrieves a list of preference keys that the specified extension
|
| + // intents to manage.
|
| + void GetExtensionControlledPrefKeys(const std::string& extension_id,
|
| + std::vector<std::string> *out) const;
|
| +
|
| // The pref service specific to this set of extension prefs.
|
| PrefService* prefs_;
|
|
|
|
|