Index: chrome/browser/prefs/pref_model_associator.cc |
diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc |
index bcf87eae3940054d6e437bfa7e327325cb99a16c..5ddbf1fbb937b8b7a3451b0e7255c7e144ec9b23 100644 |
--- a/chrome/browser/prefs/pref_model_associator.cc |
+++ b/chrome/browser/prefs/pref_model_associator.cc |
@@ -471,26 +471,10 @@ syncer::SyncError PrefModelAssociator::ProcessSyncChanges( |
for (iter = change_list.begin(); iter != change_list.end(); ++iter) { |
DCHECK_EQ(type_, iter->sync_data().GetDataType()); |
- std::string name; |
const sync_pb::PreferenceSpecifics& pref_specifics = |
GetSpecifics(iter->sync_data()); |
- scoped_ptr<base::Value> value(ReadPreferenceSpecifics(pref_specifics, |
- &name)); |
- |
- if (iter->change_type() == syncer::SyncChange::ACTION_DELETE) { |
- // We never delete preferences. |
- NOTREACHED() << "Attempted to process sync delete change for " << name |
- << ". Skipping."; |
- continue; |
- } |
- |
- // Skip values we can't deserialize. |
- // TODO(zea): consider taking some further action such as erasing the bad |
- // data. |
- if (!value.get()) |
- continue; |
- |
+ std::string name = pref_specifics.name(); |
// It is possible that we may receive a change to a preference we do not |
// want to sync. For example if the user is syncing a Mac client and a |
// Windows client, the Windows client does not support |
@@ -506,9 +490,18 @@ syncer::SyncError PrefModelAssociator::ProcessSyncChanges( |
if (!IsPrefRegistered(pref_name)) |
continue; |
- const PrefService::Preference* pref = |
- pref_service_->FindPreference(pref_name); |
- DCHECK(pref); |
+ if (iter->change_type() == syncer::SyncChange::ACTION_DELETE) { |
+ pref_service_->ClearPref(pref_name); |
+ continue; |
+ } |
+ |
+ scoped_ptr<base::Value> value(ReadPreferenceSpecifics(pref_specifics)); |
+ if (!value.get()) { |
+ // Skip values we can't deserialize. |
+ // TODO(zea): consider taking some further action such as erasing the bad |
+ // data. |
+ continue; |
+ } |
// This will only modify the user controlled value store, which takes |
// priority over the default value but is ignored if the preference is |
@@ -526,8 +519,7 @@ syncer::SyncError PrefModelAssociator::ProcessSyncChanges( |
} |
base::Value* PrefModelAssociator::ReadPreferenceSpecifics( |
- const sync_pb::PreferenceSpecifics& preference, |
- std::string* name) { |
+ const sync_pb::PreferenceSpecifics& preference) { |
base::JSONReader reader; |
scoped_ptr<base::Value> value(reader.ReadToValue(preference.value())); |
if (!value.get()) { |
@@ -536,7 +528,6 @@ base::Value* PrefModelAssociator::ReadPreferenceSpecifics( |
LOG(ERROR) << err; |
return NULL; |
} |
- *name = preference.name(); |
return value.release(); |
} |