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 9e13ff1dc5f4e130d64ea3b1ae2400e071d8a398..a64e6bf7ba7b01cbd764d7350c7d3c0b7931c21a 100644 |
--- a/chrome/browser/prefs/pref_service_syncable.cc |
+++ b/chrome/browser/prefs/pref_service_syncable.cc |
@@ -12,6 +12,8 @@ |
#include "base/value_conversions.h" |
#include "chrome/browser/prefs/pref_model_associator.h" |
#include "chrome/browser/prefs/pref_notifier_impl.h" |
+#include "chrome/browser/prefs/pref_registry.h" |
+#include "chrome/browser/prefs/pref_registry_simple.h" |
#include "chrome/browser/prefs/pref_service_syncable_observer.h" |
#include "chrome/browser/prefs/pref_value_store.h" |
#include "chrome/browser/ui/prefs/prefs_tab_helper.h" |
@@ -67,14 +69,14 @@ PrefServiceSyncable::PrefServiceSyncable( |
PrefNotifierImpl* pref_notifier, |
PrefValueStore* pref_value_store, |
PersistentPrefStore* user_prefs, |
- DefaultPrefStore* default_store, |
+ PrefRegistry* pref_registry, |
base::Callback<void(PersistentPrefStore::PrefReadError)> |
read_error_callback, |
bool async) |
: PrefService(pref_notifier, |
pref_value_store, |
user_prefs, |
- default_store, |
+ pref_registry, |
read_error_callback, |
async) { |
pref_sync_associator_.SetPrefService(this); |
@@ -93,6 +95,18 @@ PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( |
OverlayUserPrefStore* incognito_pref_store = |
new OverlayUserPrefStore(user_pref_store_.get()); |
PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); |
+ |
+ // For the incognito service, we need a registry that shares the |
+ // same default prefs, but does not interfere with callbacks on |
+ // registration/unregistration made to the main service, or allow |
+ // any registrations. |
+ // |
+ // TODO(joi): We can directly reuse the same PrefRegistry once |
+ // PrefService no longer registers for callbacks on registration and |
+ // unregistration. |
+ scoped_refptr<PrefRegistry> incognito_registry = new PrefRegistry; |
+ incognito_registry->defaults_ = pref_registry_->defaults_; |
+ |
PrefServiceSyncable* incognito_service = new PrefServiceSyncable( |
pref_notifier, |
pref_value_store_->CloneAndSpecialize( |
@@ -101,10 +115,10 @@ PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( |
NULL, // command_line_prefs |
incognito_pref_store, |
NULL, // recommended |
- default_store_.get(), |
+ incognito_registry->defaults(), |
pref_notifier), |
incognito_pref_store, |
- default_store_.get(), |
+ incognito_registry, |
read_error_callback_, |
false); |
return incognito_service; |
@@ -124,7 +138,10 @@ void PrefServiceSyncable::RemoveObserver( |
} |
void PrefServiceSyncable::UnregisterPreference(const char* path) { |
- PrefService::UnregisterPreference(path); |
+ // TODO(joi): Temporary until we have PrefRegistrySyncable. |
+ static_cast<PrefRegistrySimple*>( |
+ DeprecatedGetPrefRegistry())->DeprecatedUnregisterPreference(path); |
+ |
if (pref_sync_associator_.IsPrefRegistered(path)) { |
pref_sync_associator_.UnregisterPref(path); |
} |
@@ -271,7 +288,9 @@ void PrefServiceSyncable::OnIsSyncingChanged() { |
void PrefServiceSyncable::RegisterSyncablePreference( |
const char* path, Value* default_value, PrefSyncStatus sync_status) { |
- PrefService::RegisterPreference(path, default_value); |
+ // TODO(joi): Temporary until we have PrefRegistrySyncable. |
+ static_cast<PrefRegistrySimple*>( |
+ DeprecatedGetPrefRegistry())->RegisterPreference(path, default_value); |
// Register with sync if necessary. |
if (sync_status == SYNCABLE_PREF) |
pref_sync_associator_.RegisterPref(path); |