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

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

Issue 4438001: First part to fix Bug 50726 "Save extension list and "winning" prefs from extensions" (Closed) Base URL: http://git.chromium.org/git/chromium.git/@trunk
Patch Set: whitespaces 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
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/extensions/extension_prefs_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_prefs.cc
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index bf80550c19dc12b8f73e0b45464852889ca3dc5d..785a26ebae7621c32e3e807065a7b3c199559fbe 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -41,6 +41,11 @@ const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable";
// object stored in the Preferences file. The extensions are stored by ID.
const char kExtensionToolbar[] = "extensions.toolbar";
+// An ordered list of extension IDs that determines which extension overwrites
+// the values of other extensions. The last extension wins.
+// The ExtensionPrefStore reads and writes this list to respect the precedences.
+const char kExtensionsPrecedence[] = "extensions.precedence";
+
// The key for a serialized Time value indicating the start of the day (from the
// server's perspective) an extension last included a "ping" parameter during
// its update check.
@@ -209,6 +214,39 @@ DictionaryValue* ExtensionPrefs::CopyCurrentExtensions() {
return new DictionaryValue;
}
+void ExtensionPrefs::PersistExtensionPrecedences(
+ const std::vector<std::string>& precedence) {
+ ListValue* stored_precedence =
+ pref_service()->GetMutableList(kExtensionsPrecedence);
+
+ stored_precedence->Clear();
+
+ std::vector<std::string>::const_iterator i;
+ for (i = precedence.begin(); i != precedence.end(); ++i)
+ stored_precedence->Append(Value::CreateStringValue(*i));
+ pref_service()->ScheduleSavePersistentPrefs();
+}
+
+void ExtensionPrefs::GetExtensionPrecedences(
+ std::vector<std::string>* precedence) const {
+ precedence->clear();
+
+ const ListValue* stored_precedence =
+ pref_service()->GetList(kExtensionsPrecedence);
+ if (stored_precedence) {
+ precedence->reserve(stored_precedence->GetSize());
+ for (ListValue::const_iterator i = stored_precedence->begin();
+ i != stored_precedence->end(); ++i) {
+ std::string ext_id;
+ if (!(*i)->GetAsString(&ext_id)) {
+ LOG(WARNING) << "Invalid entry in " << kExtensionsPrecedence;
+ continue;
+ }
+ precedence->push_back(ext_id);
+ }
+ }
+}
+
bool ExtensionPrefs::ReadBooleanFromPref(
DictionaryValue* ext, const std::string& pref_key) {
if (!ext->HasKey(pref_key)) return false;
@@ -905,4 +943,5 @@ void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterListPref(prefs::kExtensionInstallDenyList);
prefs->RegisterListPref(prefs::kExtensionInstallForceList);
prefs->RegisterStringPref(kWebStoreLogin, std::string() /* default_value */);
+ prefs->RegisterListPref(kExtensionsPrecedence);
}
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/extensions/extension_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698