| Index: chrome/browser/prefs/pref_service_syncable.cc
|
| diff --git a/chrome/browser/prefs/pref_service_syncable.cc b/chrome/browser/prefs/pref_service_syncable.cc
|
| index 32d4d3e234a86f25a3104e49d3a78d4d4f5f2454..cb04107c76a7262e833f25c7b95c528283e2dfb1 100644
|
| --- a/chrome/browser/prefs/pref_service_syncable.cc
|
| +++ b/chrome/browser/prefs/pref_service_syncable.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/prefs/pref_service_syncable.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/callback.h"
|
| #include "base/files/file_path.h"
|
| #include "base/prefs/default_pref_store.h"
|
| #include "base/prefs/overlay_user_pref_store.h"
|
| @@ -15,21 +16,8 @@
|
| #include "base/value_conversions.h"
|
| #include "chrome/browser/prefs/pref_model_associator.h"
|
| #include "chrome/browser/prefs/pref_service_syncable_observer.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
|
| #include "components/pref_registry/pref_registry_syncable.h"
|
|
|
| -// static
|
| -PrefServiceSyncable* PrefServiceSyncable::FromProfile(Profile* profile) {
|
| - return static_cast<PrefServiceSyncable*>(profile->GetPrefs());
|
| -}
|
| -
|
| -// static
|
| -PrefServiceSyncable* PrefServiceSyncable::IncognitoFromProfile(
|
| - Profile* profile) {
|
| - return static_cast<PrefServiceSyncable*>(profile->GetOffTheRecordPrefs());
|
| -}
|
| -
|
| PrefServiceSyncable::PrefServiceSyncable(
|
| PrefNotifierImpl* pref_notifier,
|
| PrefValueStore* pref_value_store,
|
| @@ -38,21 +26,21 @@ PrefServiceSyncable::PrefServiceSyncable(
|
| base::Callback<void(PersistentPrefStore::PrefReadError)>
|
| read_error_callback,
|
| bool async)
|
| - : PrefService(pref_notifier,
|
| - pref_value_store,
|
| - user_prefs,
|
| - pref_registry,
|
| - read_error_callback,
|
| - async),
|
| - pref_sync_associator_(syncer::PREFERENCES),
|
| - priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES) {
|
| + : PrefService(pref_notifier,
|
| + pref_value_store,
|
| + user_prefs,
|
| + pref_registry,
|
| + read_error_callback,
|
| + async),
|
| + pref_sync_associator_(syncer::PREFERENCES),
|
| + priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES),
|
| + pref_model_associator_client_(NULL) {
|
| pref_sync_associator_.SetPrefService(this);
|
| priority_pref_sync_associator_.SetPrefService(this);
|
|
|
| // Let PrefModelAssociators know about changes to preference values.
|
| - pref_value_store->set_callback(
|
| - base::Bind(&PrefServiceSyncable::ProcessPrefChange,
|
| - base::Unretained(this)));
|
| + pref_value_store->set_callback(base::Bind(
|
| + &PrefServiceSyncable::ProcessPrefChange, base::Unretained(this)));
|
|
|
| // Add already-registered syncable preferences to PrefModelAssociator.
|
| for (PrefRegistry::const_iterator it = pref_registry->begin();
|
| @@ -76,17 +64,29 @@ PrefServiceSyncable::~PrefServiceSyncable() {
|
| user_prefs::PrefRegistrySyncable::SyncableRegistrationCallback());
|
| }
|
|
|
| +void PrefServiceSyncable::SetPrefModelAssociatorClient(
|
| + PrefModelAssociatorClient* pref_model_associator_client) {
|
| + pref_model_associator_client_ = pref_model_associator_client;
|
| + pref_sync_associator_.set_pref_model_associator_client(
|
| + pref_model_associator_client_);
|
| + priority_pref_sync_associator_.set_pref_model_associator_client(
|
| + pref_model_associator_client_);
|
| +}
|
| +
|
| PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService(
|
| - PrefStore* incognito_extension_prefs) {
|
| + PrefStore* incognito_extension_prefs,
|
| + const base::Callback<void(OverlayUserPrefStore*)>&
|
| + incognito_pref_created_cb) {
|
| pref_service_forked_ = true;
|
| PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
|
| OverlayUserPrefStore* incognito_pref_store =
|
| new OverlayUserPrefStore(user_pref_store_.get());
|
| - PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store);
|
| + if (!incognito_pref_created_cb.is_null())
|
| + incognito_pref_created_cb.Run(incognito_pref_store);
|
|
|
| scoped_refptr<user_prefs::PrefRegistrySyncable> forked_registry =
|
| - static_cast<user_prefs::PrefRegistrySyncable*>(
|
| - pref_registry_.get())->ForkForIncognito();
|
| + static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry_.get())
|
| + ->ForkForIncognito();
|
| PrefServiceSyncable* incognito_service = new PrefServiceSyncable(
|
| pref_notifier,
|
| pref_value_store_->CloneAndSpecialize(NULL, // managed
|
| @@ -101,6 +101,8 @@ PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService(
|
| forked_registry.get(),
|
| read_error_callback_,
|
| false);
|
| + incognito_service->SetPrefModelAssociatorClient(
|
| + pref_model_associator_client_);
|
| return incognito_service;
|
| }
|
|
|
| @@ -146,9 +148,8 @@ void PrefServiceSyncable::UpdateCommandLinePrefStore(
|
| PrefService::UpdateCommandLinePrefStore(cmd_line_store);
|
| }
|
|
|
| -void PrefServiceSyncable::AddSyncedPrefObserver(
|
| - const std::string& name,
|
| - SyncedPrefObserver* observer) {
|
| +void PrefServiceSyncable::AddSyncedPrefObserver(const std::string& name,
|
| + SyncedPrefObserver* observer) {
|
| pref_sync_associator_.AddSyncedPrefObserver(name, observer);
|
| priority_pref_sync_associator_.AddSyncedPrefObserver(name, observer);
|
| }
|
| @@ -166,8 +167,7 @@ void PrefServiceSyncable::AddRegisteredSyncablePreference(
|
| DCHECK(FindPreference(path));
|
| if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PREF) {
|
| pref_sync_associator_.RegisterPref(path.c_str());
|
| - } else if (flags &
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) {
|
| + } else if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) {
|
| priority_pref_sync_associator_.RegisterPref(path.c_str());
|
| }
|
| }
|
|
|