OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/prefs/pref_model_associator.h" | 5 #include "chrome/browser/prefs/pref_model_associator.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/json/json_string_value_serializer.h" | 9 #include "base/json/json_string_value_serializer.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
471 for (iter = change_list.begin(); iter != change_list.end(); ++iter) { | 471 for (iter = change_list.begin(); iter != change_list.end(); ++iter) { |
472 DCHECK_EQ(type_, iter->sync_data().GetDataType()); | 472 DCHECK_EQ(type_, iter->sync_data().GetDataType()); |
473 | 473 |
474 std::string name; | 474 std::string name; |
475 const sync_pb::PreferenceSpecifics& pref_specifics = | 475 const sync_pb::PreferenceSpecifics& pref_specifics = |
476 GetSpecifics(iter->sync_data()); | 476 GetSpecifics(iter->sync_data()); |
477 | 477 |
478 scoped_ptr<base::Value> value(ReadPreferenceSpecifics(pref_specifics, | 478 scoped_ptr<base::Value> value(ReadPreferenceSpecifics(pref_specifics, |
479 &name)); | 479 &name)); |
480 | 480 |
481 if (iter->change_type() == syncer::SyncChange::ACTION_DELETE) { | 481 if (iter->change_type() != syncer::SyncChange::ACTION_DELETE && |
Nicolas Zea
2014/08/08 17:38:32
does the ACTION_DELETE condition still need to be
| |
482 // We never delete preferences. | 482 !value.get()) { |
483 NOTREACHED() << "Attempted to process sync delete change for " << name | 483 // Skip values we can't deserialize. |
484 << ". Skipping."; | 484 // TODO(zea): consider taking some further action such as erasing the bad |
485 // data. | |
485 continue; | 486 continue; |
486 } | 487 } |
487 | 488 |
488 // Skip values we can't deserialize. | |
489 // TODO(zea): consider taking some further action such as erasing the bad | |
490 // data. | |
491 if (!value.get()) | |
492 continue; | |
493 | |
494 // It is possible that we may receive a change to a preference we do not | 489 // It is possible that we may receive a change to a preference we do not |
495 // want to sync. For example if the user is syncing a Mac client and a | 490 // want to sync. For example if the user is syncing a Mac client and a |
496 // Windows client, the Windows client does not support | 491 // Windows client, the Windows client does not support |
497 // kConfirmToQuitEnabled. Ignore updates from these preferences. | 492 // kConfirmToQuitEnabled. Ignore updates from these preferences. |
498 const char* pref_name = name.c_str(); | 493 const char* pref_name = name.c_str(); |
499 std::string new_name; | 494 std::string new_name; |
500 // We migrated this preference name, so do as if the name had not changed. | 495 // We migrated this preference name, so do as if the name had not changed. |
501 if (IsOldMigratedPreference(pref_name)) { | 496 if (IsOldMigratedPreference(pref_name)) { |
502 new_name = GetNewMigratedPreferenceName(pref_name); | 497 new_name = GetNewMigratedPreferenceName(pref_name); |
503 pref_name = new_name.c_str(); | 498 pref_name = new_name.c_str(); |
504 } | 499 } |
505 | 500 |
506 if (!IsPrefRegistered(pref_name)) | 501 if (!IsPrefRegistered(pref_name)) |
507 continue; | 502 continue; |
508 | 503 |
509 const PrefService::Preference* pref = | 504 const PrefService::Preference* pref = |
510 pref_service_->FindPreference(pref_name); | 505 pref_service_->FindPreference(pref_name); |
511 DCHECK(pref); | 506 DCHECK(pref); |
512 | 507 |
513 // This will only modify the user controlled value store, which takes | 508 // This will only modify the user controlled value store, which takes |
514 // priority over the default value but is ignored if the preference is | 509 // priority over the default value but is ignored if the preference is |
515 // policy controlled. | 510 // policy controlled. |
516 pref_service_->Set(pref_name, *value); | 511 if (iter->change_type() != syncer::SyncChange::ACTION_DELETE) { |
512 pref_service_->Set(pref_name, *value); | |
513 } else { | |
514 pref_service_->Set(pref_name, | |
515 *pref_service_->GetDefaultPrefValue(pref_name)); | |
gab
2014/08/08 12:55:43
You should just do pref_service_->ClearPref(pref_n
Nicolas Zea
2014/08/08 17:38:32
Agreed. This will actually sync the default value
| |
516 } | |
517 | 517 |
518 NotifySyncedPrefObservers(name, true /*from_sync*/); | 518 NotifySyncedPrefObservers(name, true /*from_sync*/); |
519 | 519 |
520 // Keep track of any newly synced preferences. | 520 // Keep track of any newly synced preferences. |
521 if (iter->change_type() == syncer::SyncChange::ACTION_ADD) { | 521 if (iter->change_type() == syncer::SyncChange::ACTION_ADD) { |
522 synced_preferences_.insert(name); | 522 synced_preferences_.insert(name); |
523 } | 523 } |
524 } | 524 } |
525 return syncer::SyncError(); | 525 return syncer::SyncError(); |
526 } | 526 } |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
655 void PrefModelAssociator::NotifySyncedPrefObservers(const std::string& path, | 655 void PrefModelAssociator::NotifySyncedPrefObservers(const std::string& path, |
656 bool from_sync) const { | 656 bool from_sync) const { |
657 SyncedPrefObserverMap::const_iterator observer_iter = | 657 SyncedPrefObserverMap::const_iterator observer_iter = |
658 synced_pref_observers_.find(path); | 658 synced_pref_observers_.find(path); |
659 if (observer_iter == synced_pref_observers_.end()) | 659 if (observer_iter == synced_pref_observers_.end()) |
660 return; | 660 return; |
661 SyncedPrefObserverList* observers = observer_iter->second; | 661 SyncedPrefObserverList* observers = observer_iter->second; |
662 FOR_EACH_OBSERVER(SyncedPrefObserver, *observers, | 662 FOR_EACH_OBSERVER(SyncedPrefObserver, *observers, |
663 OnSyncedPrefChanged(path, from_sync)); | 663 OnSyncedPrefChanged(path, from_sync)); |
664 } | 664 } |
OLD | NEW |