| Index: chrome/browser/prefs/pref_service.cc
|
| diff --git a/chrome/browser/prefs/pref_service.cc b/chrome/browser/prefs/pref_service.cc
|
| index 8ea2d2a4b1997736dab09a7a440877ba16c05e14..16b578a2f22d3bbd6e20e5c5460b5aa7d6096578 100644
|
| --- a/chrome/browser/prefs/pref_service.cc
|
| +++ b/chrome/browser/prefs/pref_service.cc
|
| @@ -23,6 +23,7 @@
|
| #include "chrome/browser/prefs/command_line_pref_store.h"
|
| #include "chrome/browser/prefs/default_pref_store.h"
|
| #include "chrome/browser/prefs/overlay_persistent_pref_store.h"
|
| +#include "chrome/browser/prefs/pref_model_associator.h"
|
| #include "chrome/browser/prefs/pref_notifier_impl.h"
|
| #include "chrome/browser/prefs/pref_value_store.h"
|
| #include "chrome/browser/ui/profile_error_dialog.h"
|
| @@ -149,6 +150,7 @@ PrefService::PrefService(PrefStore* managed_platform_prefs,
|
| : user_pref_store_(user_prefs),
|
| default_store_(default_store),
|
| delegate_(delegate) {
|
| + pref_sync_associator_.reset(new PrefModelAssociator(this));
|
| pref_notifier_.reset(new PrefNotifierImpl(this));
|
| pref_value_store_.reset(
|
| new PrefValueStore(managed_platform_prefs,
|
| @@ -159,6 +161,7 @@ PrefService::PrefService(PrefStore* managed_platform_prefs,
|
| recommended_platform_prefs,
|
| recommended_cloud_prefs,
|
| default_store,
|
| + pref_sync_associator_.get(),
|
| pref_notifier_.get()));
|
| InitFromStorage();
|
| }
|
| @@ -169,6 +172,7 @@ PrefService::PrefService(const PrefService& original,
|
| new OverlayPersistentPrefStore(original.user_pref_store_.get())),
|
| default_store_(original.default_store_.get()),
|
| delegate_(NULL) {
|
| + // Incognito mode doesn't sync, so no need to create PrefModelAssociator.
|
| pref_notifier_.reset(new PrefNotifierImpl(this));
|
| pref_value_store_.reset(original.pref_value_store_->CloneAndSpecialize(
|
| NULL, // managed_platform_prefs
|
| @@ -179,6 +183,7 @@ PrefService::PrefService(const PrefService& original,
|
| NULL, // recommended_platform_prefs
|
| NULL, // recommended_cloud_prefs
|
| default_store_.get(),
|
| + NULL, // pref_sync_associator_
|
| pref_notifier_.get()));
|
| InitFromStorage();
|
| }
|
| @@ -192,6 +197,9 @@ PrefService::~PrefService() {
|
| pref_value_store_.reset();
|
| user_pref_store_ = NULL;
|
| default_store_ = NULL;
|
| + if (pref_sync_associator_.get())
|
| + pref_sync_associator_->DisassociateModels();
|
| + pref_sync_associator_.reset();
|
| }
|
|
|
| void PrefService::OnPrefsRead(PersistentPrefStore::PrefReadError error,
|
| @@ -259,71 +267,93 @@ void PrefService::CommitPendingWrite() {
|
| }
|
|
|
| void PrefService::RegisterBooleanPref(const char* path,
|
| - bool default_value) {
|
| - RegisterPreference(path, Value::CreateBooleanValue(default_value));
|
| + bool default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, Value::CreateBooleanValue(default_value), syncable);
|
| }
|
|
|
| -void PrefService::RegisterIntegerPref(const char* path, int default_value) {
|
| - RegisterPreference(path, Value::CreateIntegerValue(default_value));
|
| +void PrefService::RegisterIntegerPref(const char* path,
|
| + int default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, Value::CreateIntegerValue(default_value), syncable);
|
| }
|
|
|
| -void PrefService::RegisterDoublePref(const char* path, double default_value) {
|
| - RegisterPreference(path, Value::CreateDoubleValue(default_value));
|
| +void PrefService::RegisterDoublePref(const char* path,
|
| + double default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, Value::CreateDoubleValue(default_value), syncable);
|
| }
|
|
|
| void PrefService::RegisterStringPref(const char* path,
|
| - const std::string& default_value) {
|
| - RegisterPreference(path, Value::CreateStringValue(default_value));
|
| + const std::string& default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, Value::CreateStringValue(default_value), syncable);
|
| }
|
|
|
| void PrefService::RegisterFilePathPref(const char* path,
|
| - const FilePath& default_value) {
|
| - RegisterPreference(path, Value::CreateStringValue(default_value.value()));
|
| + const FilePath& default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path,
|
| + Value::CreateStringValue(default_value.value()),
|
| + syncable);
|
| }
|
|
|
| -void PrefService::RegisterListPref(const char* path) {
|
| - RegisterPreference(path, new ListValue());
|
| +void PrefService::RegisterListPref(const char* path,
|
| + bool syncable) {
|
| + RegisterPreference(path, new ListValue(), syncable);
|
| }
|
|
|
| -void PrefService::RegisterListPref(const char* path, ListValue* default_value) {
|
| - RegisterPreference(path, default_value);
|
| +void PrefService::RegisterListPref(const char* path,
|
| + ListValue* default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, default_value, syncable);
|
| }
|
|
|
| -void PrefService::RegisterDictionaryPref(const char* path) {
|
| - RegisterPreference(path, new DictionaryValue());
|
| +void PrefService::RegisterDictionaryPref(const char* path,
|
| + bool syncable) {
|
| + RegisterPreference(path, new DictionaryValue(), syncable);
|
| }
|
|
|
| void PrefService::RegisterDictionaryPref(const char* path,
|
| - DictionaryValue* default_value) {
|
| - RegisterPreference(path, default_value);
|
| + DictionaryValue* default_value,
|
| + bool syncable) {
|
| + RegisterPreference(path, default_value, syncable);
|
| }
|
|
|
| void PrefService::RegisterLocalizedBooleanPref(const char* path,
|
| - int locale_default_message_id) {
|
| + int locale_default_message_id,
|
| + bool syncable) {
|
| RegisterPreference(
|
| path,
|
| - CreateLocaleDefaultValue(Value::TYPE_BOOLEAN, locale_default_message_id));
|
| + CreateLocaleDefaultValue(Value::TYPE_BOOLEAN,locale_default_message_id),
|
| + syncable);
|
| }
|
|
|
| void PrefService::RegisterLocalizedIntegerPref(const char* path,
|
| - int locale_default_message_id) {
|
| + int locale_default_message_id,
|
| + bool syncable) {
|
| RegisterPreference(
|
| path,
|
| - CreateLocaleDefaultValue(Value::TYPE_INTEGER, locale_default_message_id));
|
| + CreateLocaleDefaultValue(Value::TYPE_INTEGER, locale_default_message_id),
|
| + syncable);
|
| }
|
|
|
| void PrefService::RegisterLocalizedDoublePref(const char* path,
|
| - int locale_default_message_id) {
|
| + int locale_default_message_id,
|
| + bool syncable) {
|
| RegisterPreference(
|
| path,
|
| - CreateLocaleDefaultValue(Value::TYPE_DOUBLE, locale_default_message_id));
|
| + CreateLocaleDefaultValue(Value::TYPE_DOUBLE, locale_default_message_id),
|
| + syncable);
|
| }
|
|
|
| void PrefService::RegisterLocalizedStringPref(const char* path,
|
| - int locale_default_message_id) {
|
| + int locale_default_message_id,
|
| + bool syncable) {
|
| RegisterPreference(
|
| path,
|
| - CreateLocaleDefaultValue(Value::TYPE_STRING, locale_default_message_id));
|
| + CreateLocaleDefaultValue(Value::TYPE_STRING, locale_default_message_id),
|
| + syncable);
|
| }
|
|
|
| bool PrefService::GetBoolean(const char* path) const {
|
| @@ -486,7 +516,9 @@ void PrefService::RemovePrefObserver(const char* path,
|
| pref_notifier_->RemovePrefObserver(path, obs);
|
| }
|
|
|
| -void PrefService::RegisterPreference(const char* path, Value* default_value) {
|
| +void PrefService::RegisterPreference(const char* path,
|
| + Value* default_value,
|
| + bool syncable) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| // The main code path takes ownership, but most don't. We'll be safe.
|
| @@ -503,6 +535,8 @@ void PrefService::RegisterPreference(const char* path, Value* default_value) {
|
|
|
| // Hand off ownership.
|
| default_store_->SetDefaultValue(path, scoped_value.release());
|
| + if (syncable && pref_sync_associator_.get())
|
| + pref_sync_associator_->RegisterPref(path);
|
| }
|
|
|
| void PrefService::ClearPref(const char* path) {
|
| @@ -561,9 +595,14 @@ int64 PrefService::GetInt64(const char* path) const {
|
| return val;
|
| }
|
|
|
| -void PrefService::RegisterInt64Pref(const char* path, int64 default_value) {
|
| +void PrefService::RegisterInt64Pref(
|
| + const char* path,
|
| + int64 default_value,
|
| + bool syncable) {
|
| RegisterPreference(
|
| - path, Value::CreateStringValue(base::Int64ToString(default_value)));
|
| + path,
|
| + Value::CreateStringValue(base::Int64ToString(default_value)),
|
| + syncable);
|
| }
|
|
|
| Value* PrefService::GetMutableUserPref(const char* path,
|
| @@ -626,6 +665,10 @@ void PrefService::SetUserPrefValue(const char* path, Value* new_value) {
|
| user_pref_store_->SetValue(path, owned_value.release());
|
| }
|
|
|
| +SyncableService* PrefService::GetSyncableService() {
|
| + return pref_sync_associator_.get();
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // PrefService::Preference
|
|
|
|
|