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

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

Issue 1326353002: Remove dependency of PrefSyncableService on Profile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pref_model_associator
Patch Set: Move files back to //chrome/browser/prefs & //chrome/test/base Created 5 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/prefs/pref_model_associator.cc
diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc
index ad7729b6d3a6f52a8f7009ebdfdd7c06bec34fbb..024bce07120cec3283dd1b6dd2248aeda0284288 100644
--- a/chrome/browser/prefs/pref_model_associator.cc
+++ b/chrome/browser/prefs/pref_model_associator.cc
@@ -13,10 +13,8 @@
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/prefs/pref_model_associator_client.h"
#include "chrome/browser/prefs/pref_service_syncable.h"
-#include "chrome/common/pref_names.h"
-#include "components/content_settings/core/browser/website_settings_info.h"
-#include "components/content_settings/core/browser/website_settings_registry.h"
#include "sync/api/sync_change.h"
#include "sync/api/sync_error_factory.h"
#include "sync/protocol/preference_specifics.pb.h"
@@ -55,7 +53,8 @@ PrefModelAssociator::PrefModelAssociator(syncer::ModelType type)
: models_associated_(false),
processing_syncer_changes_(false),
pref_service_(NULL),
- type_(type) {
+ type_(type),
+ pref_model_associator_client_(NULL) {
DCHECK(CalledOnValidThread());
DCHECK(type_ == PREFERENCES || type_ == PRIORITY_PREFERENCES);
}
@@ -73,8 +72,8 @@ void PrefModelAssociator::InitPrefAndAssociate(
const syncer::SyncData& sync_pref,
const std::string& pref_name,
syncer::SyncChangeList* sync_changes) {
- const base::Value* user_pref_value = pref_service_->GetUserPrefValue(
- pref_name.c_str());
+ const base::Value* user_pref_value =
+ pref_service_->GetUserPrefValue(pref_name.c_str());
VLOG(1) << "Associating preference " << pref_name;
if (sync_pref.IsValid()) {
@@ -92,7 +91,8 @@ void PrefModelAssociator::InitPrefAndAssociate(
DVLOG(1) << "Found user pref value for " << pref_name;
// We have both server and local values. Merge them.
scoped_ptr<base::Value> new_value(
- MergePreference(pref_name, *user_pref_value, *sync_value));
+ MergePreference(pref_name, *user_pref_value, *sync_value,
+ pref_model_associator_client_));
// Update the local preference based on what we got from the
// sync server. Note: this only updates the user value store, which is
@@ -217,20 +217,24 @@ void PrefModelAssociator::StopSyncing(syncer::ModelType type) {
pref_service_->OnIsSyncingChanged();
}
+// static
scoped_ptr<base::Value> PrefModelAssociator::MergePreference(
const std::string& name,
const base::Value& local_value,
- const base::Value& server_value) {
+ const base::Value& server_value,
+ PrefModelAssociatorClient* pref_model_associator_client) {
gab 2015/09/10 14:15:09 Can we make this a member method and have it use |
// This function special cases preferences individually, so don't attempt
// to merge for all migrated values.
- if (name == prefs::kURLsToRestoreOnStartup)
- return make_scoped_ptr(MergeListValues(local_value, server_value));
-
- content_settings::WebsiteSettingsRegistry* registry =
- content_settings::WebsiteSettingsRegistry::GetInstance();
- for (const content_settings::WebsiteSettingsInfo* info : *registry) {
- if (info->pref_name() == name)
- return make_scoped_ptr(MergeDictionaryValues(local_value, server_value));
+ PrefModelAssociatorPreferenceType pref_type;
+ if (pref_model_associator_client &&
+ pref_model_associator_client->IsPreferenceMerged(name, &pref_type)) {
+ switch (pref_type) {
+ case PREF_MODEL_PREFERENCE_TYPE_LIST:
+ return make_scoped_ptr(MergeListValues(local_value, server_value));
+ case PREF_MODEL_PREFERENCE_TYPE_DICT:
+ return make_scoped_ptr(
+ MergeDictionaryValues(local_value, server_value));
+ }
}
// If this is not a specially handled preference, server wins.
@@ -329,8 +333,7 @@ base::Value* PrefModelAssociator::MergeDictionaryValues(
// not registered locally as syncable and do not inform the syncer of
// non-user controlled preferences.
syncer::SyncDataList PrefModelAssociator::GetAllSyncData(
- syncer::ModelType type)
- const {
+ syncer::ModelType type) const {
DCHECK_EQ(type_, type);
syncer::SyncDataList current_data;
for (PreferenceSet::const_iterator iter = synced_preferences_.begin();
@@ -338,7 +341,7 @@ syncer::SyncDataList PrefModelAssociator::GetAllSyncData(
++iter) {
std::string name = *iter;
const PrefService::Preference* pref =
- pref_service_->FindPreference(name.c_str());
+ pref_service_->FindPreference(name.c_str());
DCHECK(pref);
if (!pref->IsUserControlled() || pref->IsDefaultValue())
continue; // This is not data we care about.
@@ -411,8 +414,8 @@ base::Value* PrefModelAssociator::ReadPreferenceSpecifics(
base::JSONReader reader;
scoped_ptr<base::Value> value(reader.ReadToValue(preference.value()));
if (!value.get()) {
- std::string err = "Failed to deserialize preference value: " +
- reader.GetErrorMessage();
+ std::string err =
+ "Failed to deserialize preference value: " + reader.GetErrorMessage();
LOG(ERROR) << err;
return NULL;
}
@@ -424,7 +427,7 @@ bool PrefModelAssociator::IsPrefSynced(const std::string& name) const {
}
void PrefModelAssociator::AddSyncedPrefObserver(const std::string& name,
- SyncedPrefObserver* observer) {
+ SyncedPrefObserver* observer) {
SyncedPrefObserverList* observers = synced_pref_observers_[name];
if (observers == NULL) {
observers = new SyncedPrefObserverList;
@@ -433,7 +436,8 @@ void PrefModelAssociator::AddSyncedPrefObserver(const std::string& name,
observers->AddObserver(observer);
}
-void PrefModelAssociator::RemoveSyncedPrefObserver(const std::string& name,
+void PrefModelAssociator::RemoveSyncedPrefObserver(
+ const std::string& name,
SyncedPrefObserver* observer) {
SyncedPrefObserverMap::iterator observer_iter =
synced_pref_observers_.find(name);

Powered by Google App Engine
This is Rietveld 408576698