summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_prefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_prefs.h')
-rw-r--r--chrome/browser/extensions/extension_prefs.h75
1 files changed, 71 insertions, 4 deletions
diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h
index 90f1a7f..b0f03f5 100644
--- a/chrome/browser/extensions/extension_prefs.h
+++ b/chrome/browser/extensions/extension_prefs.h
@@ -17,8 +17,20 @@
#include "googleurl/src/gurl.h"
// 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:
+// internal state for the extension system in general, not associated
+// with an individual extension, such as lastUpdateTime.
+// - per-extension preferences:
+// meta-preferences describing properties of the extension like
+// installation time, whether the extension is enabled, etc.
+// - extension controlled preferences:
+// browser preferences that an extension controls. For example, an
+// extension could use the proxy API to specify the browser's proxy
+// preference. Extension-controlled preferences are stored in
+// PrefValueStore::extension_prefs(), which this class populates and
+// maintains as the underlying extensions change.
class ExtensionPrefs {
public:
// Key name for a preference that keeps track of per-extension settings. This
@@ -28,6 +40,12 @@ class ExtensionPrefs {
typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo;
+ // Vector containing identifiers for preferences.
+ typedef std::set<std::string> PrefKeySet;
+
+ // Vector containing identifiers for extensions.
+ typedef std::vector<std::string> ExtensionIdSet;
+
// This enum is used for the launch type the user wants to use for an
// application.
// Do not remove items or re-order this enum as it is used in preferences
@@ -39,7 +57,7 @@ class ExtensionPrefs {
LAUNCH_WINDOW
};
- explicit ExtensionPrefs(PrefService* prefs, const FilePath& root_dir_);
+ explicit ExtensionPrefs(PrefService* prefs, const FilePath& root_dir);
~ExtensionPrefs();
// Returns a copy of the Extensions prefs.
@@ -75,11 +93,14 @@ 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);
+ // Returns all installed and enabled extensions
+ void GetEnabledExtensions(ExtensionIdSet* out) const;
+
// Getter and setter for browser action visibility.
bool GetBrowserActionVisibility(const Extension* extension);
void SetBrowserActionVisibility(const Extension* extension, bool visible);
@@ -233,11 +254,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.
+ virtual base::Time GetCurrentTime() const;
+
private:
// Converts absolute paths in the pref to paths relative to the
// install_directory_.
@@ -297,6 +330,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.
@@ -314,6 +352,35 @@ 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 std::string& extension_id) const;
+
+ // Fix missing preference entries in the extensions that are were introduced
+ // in a later Chrome version.
+ void FixMissingPrefs(const ExtensionIdSet& extension_ids);
+
+ // Installs the persistent extension preferences into |prefs_|'s extension
+ // pref store.
+ void InitPrefStore();
+
+ // Returns the extension controlled preference value of the extension that was
+ // installed most recently.
+ const Value* GetWinningExtensionControlledPrefValue(
+ const std::string& key) const;
+
+ // Executes UpdatePrefStore for all |pref_keys|.
+ void UpdatePrefStore(const PrefKeySet& pref_keys);
+
+ // Finds the most recently installed extension that defines a preference
+ // for |pref_key|, then stores its value in the PrefValueStore's extension
+ // pref store and sends notifications to observers in case the value changed.
+ void UpdatePrefStore(const std::string& pref_key);
+
+ // Retrieves a list of preference keys that the specified extension
+ // intends to manage. Keys are always appended, |out| is not cleared.
+ void GetExtensionControlledPrefKeys(const std::string& extension_id,
+ PrefKeySet *out) const;
+
// The pref service specific to this set of extension prefs.
PrefService* prefs_;