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 |