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

Unified Diff: chrome/browser/prefs/pref_model_associator.cc

Issue 12033093: sync: Implementation of Priority Preferences. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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/prefs/pref_model_associator.cc
diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc
index 6773c2c3eb98a06419b67fd99d79e57e77761edf..078c0d84409ee137957d731fd8016dd95acc1892 100644
--- a/chrome/browser/prefs/pref_model_associator.cc
+++ b/chrome/browser/prefs/pref_model_associator.cc
@@ -21,12 +21,15 @@
#include "sync/protocol/sync.pb.h"
using syncer::PREFERENCES;
+using syncer::PRIORITY_PREFERENCES;
-PrefModelAssociator::PrefModelAssociator()
+PrefModelAssociator::PrefModelAssociator(syncer::ModelType type)
: models_associated_(false),
processing_syncer_changes_(false),
- pref_service_(NULL) {
+ pref_service_(NULL),
+ type_(type) {
DCHECK(CalledOnValidThread());
+ DCHECK(type_ == PREFERENCES || type_ == PRIORITY_PREFERENCES);
}
PrefModelAssociator::~PrefModelAssociator() {
@@ -43,12 +46,17 @@ void PrefModelAssociator::InitPrefAndAssociate(
VLOG(1) << "Associating preference " << pref_name;
if (sync_pref.IsValid()) {
- const sync_pb::PreferenceSpecifics& preference =
- sync_pref.GetSpecifics().preference();
- DCHECK_EQ(pref_name, preference.name());
+ const sync_pb::PreferenceSpecifics* preference;
+
+ if (type_ == PREFERENCES) {
Nicolas Zea 2013/02/25 23:47:47 Yeah, I think an anon namespace helper function wo
albertb 2013/03/01 22:01:56 Done.
+ preference = &sync_pref.GetSpecifics().preference();
+ } else {
+ preference = &sync_pref.GetSpecifics().priority_preference().preference();
+ }
+ DCHECK_EQ(pref_name, preference->name());
base::JSONReader reader;
- scoped_ptr<Value> sync_value(reader.ReadToValue(preference.value()));
+ scoped_ptr<Value> sync_value(reader.ReadToValue(preference->value()));
if (!sync_value.get()) {
LOG(ERROR) << "Failed to deserialize preference value: "
<< reader.GetErrorMessage();
@@ -67,7 +75,7 @@ void PrefModelAssociator::InitPrefAndAssociate(
LOG(WARNING) << "Sync has null value for pref " << pref_name.c_str();
pref_service_->ClearPref(pref_name.c_str());
} else if (!new_value->IsType(user_pref_value->GetType())) {
- LOG(WARNING) << "Synced value for " << preference.name()
+ LOG(WARNING) << "Synced value for " << preference->name()
<< " is of type " << new_value->GetType()
<< " which doesn't match pref type "
<< user_pref_value->GetType();
@@ -124,7 +132,7 @@ syncer::SyncMergeResult PrefModelAssociator::MergeDataAndStartSyncing(
const syncer::SyncDataList& initial_sync_data,
scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
- DCHECK_EQ(type, PREFERENCES);
+ DCHECK_EQ(type_, type);
DCHECK(CalledOnValidThread());
DCHECK(pref_service_);
DCHECK(!sync_processor_.get());
@@ -143,8 +151,15 @@ syncer::SyncMergeResult PrefModelAssociator::MergeDataAndStartSyncing(
initial_sync_data.begin();
sync_iter != initial_sync_data.end();
++sync_iter) {
- DCHECK_EQ(PREFERENCES, sync_iter->GetDataType());
- std::string sync_pref_name = sync_iter->GetSpecifics().preference().name();
+ DCHECK_EQ(type_, sync_iter->GetDataType());
+ std::string sync_pref_name;
+
+ if (type_ == PREFERENCES) {
+ sync_pref_name = sync_iter->GetSpecifics().preference().name();
+ } else {
+ sync_pref_name =
+ sync_iter->GetSpecifics().priority_preference().preference().name();
+ }
if (remaining_preferences.count(sync_pref_name) == 0) {
// We're not syncing this preference locally, ignore the sync data.
// TODO(zea): Eventually we want to be able to have the syncable service
@@ -178,7 +193,7 @@ syncer::SyncMergeResult PrefModelAssociator::MergeDataAndStartSyncing(
}
void PrefModelAssociator::StopSyncing(syncer::ModelType type) {
- DCHECK_EQ(type, PREFERENCES);
+ DCHECK_EQ(type_, type);
models_associated_ = false;
sync_processor_.reset();
sync_error_factory_.reset();
@@ -205,7 +220,7 @@ scoped_ptr<Value> PrefModelAssociator::MergePreference(
bool PrefModelAssociator::CreatePrefSyncData(
const std::string& name,
const Value& value,
- syncer::SyncData* sync_data) {
+ syncer::SyncData* sync_data) const {
if (value.IsType(Value::TYPE_NULL)) {
LOG(ERROR) << "Attempting to sync a null pref value for " << name;
return false;
@@ -221,9 +236,18 @@ bool PrefModelAssociator::CreatePrefSyncData(
}
sync_pb::EntitySpecifics specifics;
- sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference();
+ sync_pb::PreferenceSpecifics* pref_specifics;
+
+ if (type_ == PREFERENCES) {
+ pref_specifics = specifics.mutable_preference();
+ } else {
+ pref_specifics =
+ specifics.mutable_priority_preference()->mutable_preference();
+ }
+
pref_specifics->set_name(name);
pref_specifics->set_value(serialized);
+
*sync_data = syncer::SyncData::CreateLocalData(name, name, specifics);
return true;
}
@@ -293,7 +317,7 @@ Value* PrefModelAssociator::MergeDictionaryValues(
syncer::SyncDataList PrefModelAssociator::GetAllSyncData(
syncer::ModelType type)
const {
- DCHECK_EQ(PREFERENCES, type);
+ DCHECK_EQ(type_, type);
syncer::SyncDataList current_data;
for (PreferenceSet::const_iterator iter = synced_preferences_.begin();
iter != synced_preferences_.end();
@@ -325,11 +349,16 @@ syncer::SyncError PrefModelAssociator::ProcessSyncChanges(
base::AutoReset<bool> processing_changes(&processing_syncer_changes_, true);
syncer::SyncChangeList::const_iterator iter;
for (iter = change_list.begin(); iter != change_list.end(); ++iter) {
- DCHECK_EQ(PREFERENCES, iter->sync_data().GetDataType());
+ DCHECK_EQ(type_, iter->sync_data().GetDataType());
std::string name;
- sync_pb::PreferenceSpecifics pref_specifics =
- iter->sync_data().GetSpecifics().preference();
+ sync_pb::PreferenceSpecifics pref_specifics;
+ if (type_ == PREFERENCES) {
+ pref_specifics = iter->sync_data().GetSpecifics().preference();
+ } else {
+ pref_specifics =
+ iter->sync_data().GetSpecifics().priority_preference().preference();
+ }
scoped_ptr<Value> value(ReadPreferenceSpecifics(pref_specifics,
&name));

Powered by Google App Engine
This is Rietveld 408576698