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()); |
} |
} |