Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Unified Diff: chrome/browser/extensions/extension_prefs.h

Issue 5213002: Fix for Bug 50726 "Save extension list and "winning" prefs from extensions" (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Temporary hack to fix regression in unit tests Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_prefs.h
diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h
index 11c38430571bcbbbc6eedc8adfd62872c3cfcb8c..3abc0327ece32af507cf6a0036039db583bca8eb 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
Aaron Boodman 2010/11/23 20:35:13 comment nit: maybe: internal state for the extensi
battre (please use the other) 2010/11/30 17:46:53 Done.
+// - per-extension preferences:
+// meta-preferences describing properties of the extension like
Aaron Boodman 2010/11/23 20:35:13 internal state of an individual extension, such as
battre (please use the other) 2010/11/30 17:46:53 I think "internal state" does not really fit stuff
+// 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.
Aaron Boodman 2010/11/23 20:35:13 TODO(aa): Is this information relevant to readers
battre (please use the other) 2010/11/30 17:46:53 Do you refer to the nomenclature of the three diff
class ExtensionPrefs {
public:
// Key name for a preference that keeps track of per-extension settings. This
@@ -28,6 +39,12 @@ class ExtensionPrefs {
typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo;
+ // Vector containing identifiers for preferences.
+ typedef std::vector<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
@@ -73,7 +90,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);
@@ -198,11 +215,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_.
@@ -244,6 +273,14 @@ 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;
+
+ // Returns all installed and enabled extensions
+ void GetEnabledExtensions(ExtensionIdSet* out) const;
Aaron Boodman 2010/11/23 20:35:13 This method seems generally useful. Make public?
battre (please use the other) 2010/11/30 17:46:53 Done.
+
// Serializes the data and schedules a persistent save via the |PrefService|.
// Additionally fires a PREF_CHANGED notification with the top-level
// |kExtensionsPref| path set.
@@ -261,6 +298,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;
+
+ // Grant access to GetInstallTime.
+ friend struct InstallTimeComparator;
+
+ // 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 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,
+ PrefKeySet *out) const;
+
// The pref service specific to this set of extension prefs.
PrefService* prefs_;

Powered by Google App Engine
This is Rietveld 408576698