Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prefs/pref_service_syncable.h" | 5 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/prefs/default_pref_store.h" | 9 #include "base/prefs/default_pref_store.h" |
| 10 #include "base/prefs/overlay_user_pref_store.h" | 10 #include "base/prefs/overlay_user_pref_store.h" |
| 11 #include "base/string_number_conversions.h" | 11 #include "base/string_number_conversions.h" |
| 12 #include "base/value_conversions.h" | 12 #include "base/value_conversions.h" |
| 13 #include "chrome/browser/prefs/pref_model_associator.h" | 13 #include "chrome/browser/prefs/pref_model_associator.h" |
| 14 #include "chrome/browser/prefs/pref_notifier_impl.h" | 14 #include "chrome/browser/prefs/pref_notifier_impl.h" |
| 15 #include "chrome/browser/prefs/pref_registry.h" | |
| 16 #include "chrome/browser/prefs/pref_registry_simple.h" | |
| 15 #include "chrome/browser/prefs/pref_service_syncable_observer.h" | 17 #include "chrome/browser/prefs/pref_service_syncable_observer.h" |
| 16 #include "chrome/browser/prefs/pref_value_store.h" | 18 #include "chrome/browser/prefs/pref_value_store.h" |
| 17 #include "chrome/browser/ui/prefs/prefs_tab_helper.h" | 19 #include "chrome/browser/ui/prefs/prefs_tab_helper.h" |
| 18 #include "ui/base/l10n/l10n_util.h" | 20 #include "ui/base/l10n/l10n_util.h" |
| 19 | 21 |
| 20 namespace { | 22 namespace { |
| 21 | 23 |
| 22 // A helper function for RegisterLocalized*Pref that creates a Value* | 24 // A helper function for RegisterLocalized*Pref that creates a Value* |
| 23 // based on a localized resource. Because we control the values in a | 25 // based on a localized resource. Because we control the values in a |
| 24 // locale dll, this should always return a Value of the appropriate | 26 // locale dll, this should always return a Value of the appropriate |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 NOTREACHED(); | 62 NOTREACHED(); |
| 61 return Value::CreateNullValue(); | 63 return Value::CreateNullValue(); |
| 62 } | 64 } |
| 63 | 65 |
| 64 } // namespace | 66 } // namespace |
| 65 | 67 |
| 66 PrefServiceSyncable::PrefServiceSyncable( | 68 PrefServiceSyncable::PrefServiceSyncable( |
| 67 PrefNotifierImpl* pref_notifier, | 69 PrefNotifierImpl* pref_notifier, |
| 68 PrefValueStore* pref_value_store, | 70 PrefValueStore* pref_value_store, |
| 69 PersistentPrefStore* user_prefs, | 71 PersistentPrefStore* user_prefs, |
| 70 DefaultPrefStore* default_store, | 72 PrefRegistry* pref_registry, |
| 71 base::Callback<void(PersistentPrefStore::PrefReadError)> | 73 base::Callback<void(PersistentPrefStore::PrefReadError)> |
| 72 read_error_callback, | 74 read_error_callback, |
| 73 bool async) | 75 bool async) |
| 74 : PrefService(pref_notifier, | 76 : PrefService(pref_notifier, |
| 75 pref_value_store, | 77 pref_value_store, |
| 76 user_prefs, | 78 user_prefs, |
| 77 default_store, | 79 pref_registry, |
| 78 read_error_callback, | 80 read_error_callback, |
| 79 async) { | 81 async) { |
| 80 pref_sync_associator_.SetPrefService(this); | 82 pref_sync_associator_.SetPrefService(this); |
| 81 | 83 |
| 82 pref_value_store->set_callback( | 84 pref_value_store->set_callback( |
| 83 base::Bind(&PrefModelAssociator::ProcessPrefChange, | 85 base::Bind(&PrefModelAssociator::ProcessPrefChange, |
| 84 base::Unretained(&pref_sync_associator_))); | 86 base::Unretained(&pref_sync_associator_))); |
| 85 } | 87 } |
| 86 | 88 |
| 87 PrefServiceSyncable::~PrefServiceSyncable() {} | 89 PrefServiceSyncable::~PrefServiceSyncable() {} |
| 88 | 90 |
| 89 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( | 91 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( |
| 90 PrefStore* incognito_extension_prefs) { | 92 PrefStore* incognito_extension_prefs) { |
| 91 pref_service_forked_ = true; | 93 pref_service_forked_ = true; |
| 92 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); | 94 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
| 93 OverlayUserPrefStore* incognito_pref_store = | 95 OverlayUserPrefStore* incognito_pref_store = |
| 94 new OverlayUserPrefStore(user_pref_store_.get()); | 96 new OverlayUserPrefStore(user_pref_store_.get()); |
| 95 PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); | 97 PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); |
| 98 | |
| 99 // For the incognito service, we need a registry that shares the | |
| 100 // same default prefs, but does not interfere with callbacks on | |
| 101 // registration/unregistration made to the main service, or allow | |
| 102 // any registrations. | |
|
Mattias Nissler (ping if slow)
2013/01/29 18:10:45
I understand we are intending to remove the callba
Jói
2013/01/30 14:23:33
Done.
| |
| 103 scoped_refptr<PrefRegistry> incognito_registry = new PrefRegistry; | |
| 104 incognito_registry->defaults_ = pref_registry_->defaults_; | |
| 105 | |
| 96 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( | 106 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( |
| 97 pref_notifier, | 107 pref_notifier, |
| 98 pref_value_store_->CloneAndSpecialize( | 108 pref_value_store_->CloneAndSpecialize( |
| 99 NULL, // managed | 109 NULL, // managed |
| 100 incognito_extension_prefs, | 110 incognito_extension_prefs, |
| 101 NULL, // command_line_prefs | 111 NULL, // command_line_prefs |
| 102 incognito_pref_store, | 112 incognito_pref_store, |
| 103 NULL, // recommended | 113 NULL, // recommended |
| 104 default_store_.get(), | 114 incognito_registry->defaults(), |
| 105 pref_notifier), | 115 pref_notifier), |
| 106 incognito_pref_store, | 116 incognito_pref_store, |
| 107 default_store_.get(), | 117 incognito_registry, |
| 108 read_error_callback_, | 118 read_error_callback_, |
| 109 false); | 119 false); |
| 110 return incognito_service; | 120 return incognito_service; |
| 111 } | 121 } |
| 112 | 122 |
| 113 bool PrefServiceSyncable::IsSyncing() { | 123 bool PrefServiceSyncable::IsSyncing() { |
| 114 return pref_sync_associator_.models_associated(); | 124 return pref_sync_associator_.models_associated(); |
| 115 } | 125 } |
| 116 | 126 |
| 117 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { | 127 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { |
| 118 observer_list_.AddObserver(observer); | 128 observer_list_.AddObserver(observer); |
| 119 } | 129 } |
| 120 | 130 |
| 121 void PrefServiceSyncable::RemoveObserver( | 131 void PrefServiceSyncable::RemoveObserver( |
| 122 PrefServiceSyncableObserver* observer) { | 132 PrefServiceSyncableObserver* observer) { |
| 123 observer_list_.RemoveObserver(observer); | 133 observer_list_.RemoveObserver(observer); |
| 124 } | 134 } |
| 125 | 135 |
| 126 void PrefServiceSyncable::UnregisterPreference(const char* path) { | 136 void PrefServiceSyncable::UnregisterPreference(const char* path) { |
| 127 PrefService::UnregisterPreference(path); | 137 // TODO(joi): Temporary until we have PrefRegistrySyncable. |
| 138 static_cast<PrefRegistrySimple*>( | |
| 139 DeprecatedGetPrefRegistry())->DeprecatedUnregisterPreference(path); | |
| 140 | |
| 128 if (pref_sync_associator_.IsPrefRegistered(path)) { | 141 if (pref_sync_associator_.IsPrefRegistered(path)) { |
| 129 pref_sync_associator_.UnregisterPref(path); | 142 pref_sync_associator_.UnregisterPref(path); |
| 130 } | 143 } |
| 131 } | 144 } |
| 132 | 145 |
| 133 void PrefServiceSyncable::RegisterBooleanPref(const char* path, | 146 void PrefServiceSyncable::RegisterBooleanPref(const char* path, |
| 134 bool default_value, | 147 bool default_value, |
| 135 PrefSyncStatus sync_status) { | 148 PrefSyncStatus sync_status) { |
| 136 RegisterSyncablePreference(path, | 149 RegisterSyncablePreference(path, |
| 137 Value::CreateBooleanValue(default_value), | 150 Value::CreateBooleanValue(default_value), |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 277 PrefService::UpdateCommandLinePrefStore(cmd_line_store); |
| 265 } | 278 } |
| 266 | 279 |
| 267 void PrefServiceSyncable::OnIsSyncingChanged() { | 280 void PrefServiceSyncable::OnIsSyncingChanged() { |
| 268 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 281 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, |
| 269 OnIsSyncingChanged()); | 282 OnIsSyncingChanged()); |
| 270 } | 283 } |
| 271 | 284 |
| 272 void PrefServiceSyncable::RegisterSyncablePreference( | 285 void PrefServiceSyncable::RegisterSyncablePreference( |
| 273 const char* path, Value* default_value, PrefSyncStatus sync_status) { | 286 const char* path, Value* default_value, PrefSyncStatus sync_status) { |
| 274 PrefService::RegisterPreference(path, default_value); | 287 // TODO(joi): Temporary until we have PrefRegistrySyncable. |
| 288 static_cast<PrefRegistrySimple*>( | |
| 289 DeprecatedGetPrefRegistry())->RegisterPreference(path, default_value); | |
| 275 // Register with sync if necessary. | 290 // Register with sync if necessary. |
| 276 if (sync_status == SYNCABLE_PREF) | 291 if (sync_status == SYNCABLE_PREF) |
| 277 pref_sync_associator_.RegisterPref(path); | 292 pref_sync_associator_.RegisterPref(path); |
| 278 } | 293 } |
| OLD | NEW |