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

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: Lint issues and factored out renaming of InMemoryPrefStore 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..4412b30863bc1b0adee7ff96ae1058df4102270c 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
@@ -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
@@ -57,10 +74,10 @@ class ExtensionPrefs {
void SetShelfToolstripOrder(const URLList& urls);
// Get the order that the browser actions appear in the toolbar.
- std::vector<std::string> GetToolbarOrder();
+ PrefKeySet GetToolbarOrder();
Mattias Nissler (ping if slow) 2010/11/19 16:52:20 I believe this should be ExtensionIdSet.
battre (please use the other) 2010/11/19 18:00:39 Done.
// Set the order that the browser actions appear in the toolbar.
- void SetToolbarOrder(const std::vector<std::string>& extension_ids);
+ void SetToolbarOrder(const PrefKeySet& extension_ids);
Mattias Nissler (ping if slow) 2010/11/19 16:52:20 Same here.
battre (please use the other) 2010/11/19 18:00:39 Done.
// Called when an extension is installed, so that prefs get created.
void OnExtensionInstalled(const Extension* extension,
@@ -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;
+
// 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 build.
Mattias Nissler (ping if slow) 2010/11/19 16:52:20 you mean version, not build.
battre (please use the other) 2010/11/19 18:00:39 Done.
+ 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