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

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

Issue 3323022: Create a DefaultPrefStore to hold registered application-default preference v... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 months 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_pref_store.cc
===================================================================
--- chrome/browser/extensions/extension_pref_store.cc (revision 59196)
+++ chrome/browser/extensions/extension_pref_store.cc (working copy)
@@ -87,7 +87,6 @@
// installed extensions will be trying to control any preferences, so stick
// with this simpler algorithm until it causes a problem.
void ExtensionPrefStore::UpdateOnePref(const char* path) {
- scoped_ptr<Value> old_value;
PrefService* pref_service = GetPrefService();
// There are at least two PrefServices, one for local state and one for
@@ -95,30 +94,44 @@
// in each; if this one doesn't have the desired pref registered, we ignore
// it and let the other one handle it.
// The pref_service may be NULL in unit testing.
- if (pref_service) {
- const PrefService::Preference* pref = pref_service->FindPreference(path);
- if (!pref)
+ if (pref_service && !pref_service->FindPreference(path))
return;
- old_value.reset(pref->GetValue()->DeepCopy());
- }
+ // Save the old value before removing it from the local cache.
+ Value* my_old_value_ptr = NULL;
+ prefs_->Get(path, &my_old_value_ptr);
+ scoped_ptr<Value> my_old_value;
+ if (my_old_value_ptr)
+ my_old_value.reset(my_old_value_ptr->DeepCopy());
+
// DictionaryValue::Set complains if a key is overwritten with the same
- // value, so delete it first.
+ // value, so remove it first.
prefs_->Remove(path, NULL);
// Find the first extension that wants to set this pref and use its value.
+ Value* my_new_value = NULL;
for (ExtensionStack::iterator ext_iter = extension_stack_.begin();
ext_iter != extension_stack_.end(); ++ext_iter) {
PrefValueMap::iterator value_iter = (*ext_iter)->pref_values->find(path);
if (value_iter != (*ext_iter)->pref_values->end()) {
prefs_->Set(path, (*value_iter).second->DeepCopy());
+ my_new_value = (*value_iter).second;
break;
}
}
if (pref_service) {
- pref_service->pref_notifier()->OnPreferenceSet(
- path, type_, old_value.get());
+ bool value_changed = true;
+ if (!my_old_value.get() && !my_new_value) {
+ value_changed = false;
+ } else if (my_old_value.get() &&
+ my_new_value &&
+ my_old_value->Equals(my_new_value)) {
+ value_changed = false;
+ }
+
+ if (value_changed)
+ pref_service->pref_notifier()->OnPreferenceSet(path, type_);
}
}

Powered by Google App Engine
This is Rietveld 408576698