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. |
| 103 // |
| 104 // TODO(joi): We can directly reuse the same PrefRegistry once |
| 105 // PrefService no longer registers for callbacks on registration and |
| 106 // unregistration. |
| 107 scoped_refptr<PrefRegistry> incognito_registry = new PrefRegistry; |
| 108 incognito_registry->defaults_ = pref_registry_->defaults_; |
| 109 |
96 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( | 110 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( |
97 pref_notifier, | 111 pref_notifier, |
98 pref_value_store_->CloneAndSpecialize( | 112 pref_value_store_->CloneAndSpecialize( |
99 NULL, // managed | 113 NULL, // managed |
100 incognito_extension_prefs, | 114 incognito_extension_prefs, |
101 NULL, // command_line_prefs | 115 NULL, // command_line_prefs |
102 incognito_pref_store, | 116 incognito_pref_store, |
103 NULL, // recommended | 117 NULL, // recommended |
104 default_store_.get(), | 118 incognito_registry->defaults(), |
105 pref_notifier), | 119 pref_notifier), |
106 incognito_pref_store, | 120 incognito_pref_store, |
107 default_store_.get(), | 121 incognito_registry, |
108 read_error_callback_, | 122 read_error_callback_, |
109 false); | 123 false); |
110 return incognito_service; | 124 return incognito_service; |
111 } | 125 } |
112 | 126 |
113 bool PrefServiceSyncable::IsSyncing() { | 127 bool PrefServiceSyncable::IsSyncing() { |
114 return pref_sync_associator_.models_associated(); | 128 return pref_sync_associator_.models_associated(); |
115 } | 129 } |
116 | 130 |
117 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { | 131 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { |
118 observer_list_.AddObserver(observer); | 132 observer_list_.AddObserver(observer); |
119 } | 133 } |
120 | 134 |
121 void PrefServiceSyncable::RemoveObserver( | 135 void PrefServiceSyncable::RemoveObserver( |
122 PrefServiceSyncableObserver* observer) { | 136 PrefServiceSyncableObserver* observer) { |
123 observer_list_.RemoveObserver(observer); | 137 observer_list_.RemoveObserver(observer); |
124 } | 138 } |
125 | 139 |
126 void PrefServiceSyncable::UnregisterPreference(const char* path) { | 140 void PrefServiceSyncable::UnregisterPreference(const char* path) { |
127 PrefService::UnregisterPreference(path); | 141 // TODO(joi): Temporary until we have PrefRegistrySyncable. |
| 142 static_cast<PrefRegistrySimple*>( |
| 143 DeprecatedGetPrefRegistry())->DeprecatedUnregisterPreference(path); |
| 144 |
128 if (pref_sync_associator_.IsPrefRegistered(path)) { | 145 if (pref_sync_associator_.IsPrefRegistered(path)) { |
129 pref_sync_associator_.UnregisterPref(path); | 146 pref_sync_associator_.UnregisterPref(path); |
130 } | 147 } |
131 } | 148 } |
132 | 149 |
133 void PrefServiceSyncable::RegisterBooleanPref(const char* path, | 150 void PrefServiceSyncable::RegisterBooleanPref(const char* path, |
134 bool default_value, | 151 bool default_value, |
135 PrefSyncStatus sync_status) { | 152 PrefSyncStatus sync_status) { |
136 RegisterSyncablePreference(path, | 153 RegisterSyncablePreference(path, |
137 Value::CreateBooleanValue(default_value), | 154 Value::CreateBooleanValue(default_value), |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 281 PrefService::UpdateCommandLinePrefStore(cmd_line_store); |
265 } | 282 } |
266 | 283 |
267 void PrefServiceSyncable::OnIsSyncingChanged() { | 284 void PrefServiceSyncable::OnIsSyncingChanged() { |
268 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 285 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, |
269 OnIsSyncingChanged()); | 286 OnIsSyncingChanged()); |
270 } | 287 } |
271 | 288 |
272 void PrefServiceSyncable::RegisterSyncablePreference( | 289 void PrefServiceSyncable::RegisterSyncablePreference( |
273 const char* path, Value* default_value, PrefSyncStatus sync_status) { | 290 const char* path, Value* default_value, PrefSyncStatus sync_status) { |
274 PrefService::RegisterPreference(path, default_value); | 291 // TODO(joi): Temporary until we have PrefRegistrySyncable. |
| 292 static_cast<PrefRegistrySimple*>( |
| 293 DeprecatedGetPrefRegistry())->RegisterPreference(path, default_value); |
275 // Register with sync if necessary. | 294 // Register with sync if necessary. |
276 if (sync_status == SYNCABLE_PREF) | 295 if (sync_status == SYNCABLE_PREF) |
277 pref_sync_associator_.RegisterPref(path); | 296 pref_sync_associator_.RegisterPref(path); |
278 } | 297 } |
OLD | NEW |