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