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); |
} |