OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 5 #include "chrome/browser/prefs/pref_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
17 #include "base/string_number_conversions.h" | 17 #include "base/string_number_conversions.h" |
18 #include "base/string_util.h" | 18 #include "base/string_util.h" |
19 #include "base/value_conversions.h" | 19 #include "base/value_conversions.h" |
20 #include "build/build_config.h" | 20 #include "build/build_config.h" |
21 #include "chrome/browser/browser_process.h" | 21 #include "chrome/browser/browser_process.h" |
22 #include "chrome/browser/extensions/extension_pref_store.h" | 22 #include "chrome/browser/extensions/extension_pref_store.h" |
23 #include "chrome/browser/policy/configuration_policy_pref_store.h" | 23 #include "chrome/browser/policy/configuration_policy_pref_store.h" |
24 #include "chrome/browser/prefs/command_line_pref_store.h" | 24 #include "chrome/browser/prefs/command_line_pref_store.h" |
25 #include "chrome/browser/prefs/default_pref_store.h" | 25 #include "chrome/browser/prefs/default_pref_store.h" |
26 #include "chrome/browser/prefs/incognito_user_pref_store.h" | 26 #include "chrome/browser/prefs/incognito_user_pref_store.h" |
27 #include "chrome/browser/prefs/pref_model_associator.h" | 27 #include "chrome/browser/prefs/pref_model_associator.h" |
28 #include "chrome/browser/prefs/pref_notifier_impl.h" | 28 #include "chrome/browser/prefs/pref_notifier_impl.h" |
29 #include "chrome/browser/prefs/pref_value_store.h" | 29 #include "chrome/browser/prefs/pref_value_store.h" |
| 30 #include "chrome/browser/prefs/tab_contents_user_pref_store.h" |
30 #include "chrome/browser/ui/profile_error_dialog.h" | 31 #include "chrome/browser/ui/profile_error_dialog.h" |
31 #include "chrome/common/json_pref_store.h" | 32 #include "chrome/common/json_pref_store.h" |
32 #include "content/browser/browser_thread.h" | 33 #include "content/browser/browser_thread.h" |
33 #include "content/common/notification_service.h" | 34 #include "content/common/notification_service.h" |
34 #include "grit/chromium_strings.h" | 35 #include "grit/chromium_strings.h" |
35 #include "grit/generated_resources.h" | 36 #include "grit/generated_resources.h" |
36 #include "ui/base/l10n/l10n_util.h" | 37 #include "ui/base/l10n/l10n_util.h" |
37 | 38 |
38 namespace { | 39 namespace { |
39 | 40 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 ConfigurationPolicyPrefStore* recommended_cloud = NULL; | 145 ConfigurationPolicyPrefStore* recommended_cloud = NULL; |
145 #endif // ENABLE_CONFIGURATION_POLICY | 146 #endif // ENABLE_CONFIGURATION_POLICY |
146 | 147 |
147 CommandLinePrefStore* command_line = | 148 CommandLinePrefStore* command_line = |
148 new CommandLinePrefStore(CommandLine::ForCurrentProcess()); | 149 new CommandLinePrefStore(CommandLine::ForCurrentProcess()); |
149 JsonPrefStore* user = new JsonPrefStore( | 150 JsonPrefStore* user = new JsonPrefStore( |
150 pref_filename, | 151 pref_filename, |
151 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); | 152 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
152 DefaultPrefStore* default_pref_store = new DefaultPrefStore(); | 153 DefaultPrefStore* default_pref_store = new DefaultPrefStore(); |
153 | 154 |
154 return new PrefService( | 155 PrefNotifierImpl* notifier = new PrefNotifierImpl(); |
155 managed_platform, managed_cloud, extension_prefs, | 156 PrefService* prefs = new PrefService( |
156 command_line, user, recommended_platform, | 157 new PrefValueStore(managed_platform, |
157 recommended_cloud, default_pref_store, async); | 158 managed_cloud, |
| 159 extension_prefs, |
| 160 command_line, |
| 161 user, |
| 162 recommended_platform, |
| 163 recommended_cloud, |
| 164 default_pref_store, |
| 165 notifier), |
| 166 user, |
| 167 default_pref_store, |
| 168 notifier, |
| 169 async); |
| 170 PrefModelAssociator* associator = new PrefModelAssociator(prefs); |
| 171 prefs->pref_sync_associator_.reset(associator); |
| 172 notifier->SetPrefModelAssociator(associator); |
| 173 return prefs; |
158 } | 174 } |
159 | 175 |
160 PrefService* PrefService::CreateIncognitoPrefService( | 176 PrefService* PrefService::CreateIncognitoPrefService( |
161 PrefStore* incognito_extension_prefs) { | 177 PrefStore* incognito_extension_prefs) { |
162 return new PrefService(*this, incognito_extension_prefs); | 178 PersistentPrefStore* incognito_user_prefs = |
| 179 new IncognitoUserPrefStore(user_pref_store_.get()); |
| 180 // TODO(mnissler): This PrefNotifier needs to listen for notifications from |
| 181 // the original |pref_notifier_| and forward notifications. We need to |
| 182 // implement a wrapper that does this. |
| 183 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
| 184 return new PrefService( |
| 185 pref_value_store_->CloneAndSpecialize( |
| 186 NULL, // managed_platform_prefs |
| 187 NULL, // managed_cloud_prefs |
| 188 incognito_extension_prefs, |
| 189 NULL, // command_line_prefs |
| 190 incognito_user_prefs, |
| 191 NULL, // recommended_platform_prefs |
| 192 NULL, // recommended_cloud_prefs |
| 193 default_store_.get(), |
| 194 pref_notifier), |
| 195 incognito_user_prefs, |
| 196 default_store_.get(), |
| 197 pref_notifier, |
| 198 false); |
163 } | 199 } |
164 | 200 |
165 PrefService::PrefService(PrefStore* managed_platform_prefs, | 201 PrefService* PrefService::CreateTabContentsPrefService() { |
166 PrefStore* managed_cloud_prefs, | 202 PersistentPrefStore* tab_contents_user_prefs = new TabContentsUserPrefStore(); |
167 PrefStore* extension_prefs, | 203 DefaultPrefStore* default_store = new DefaultPrefStore(); |
168 PrefStore* command_line_prefs, | 204 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
169 PersistentPrefStore* user_prefs, | 205 return new PrefService( |
170 PrefStore* recommended_platform_prefs, | 206 pref_value_store_->CloneAndSpecialize( |
171 PrefStore* recommended_cloud_prefs, | 207 NULL, // managed_platform_prefs |
172 DefaultPrefStore* default_store, | 208 NULL, // managed_cloud_prefs |
173 bool async) | 209 NULL, // extension_prefs |
174 : user_pref_store_(user_prefs), | 210 NULL, // command_line_prefs |
175 default_store_(default_store) { | 211 tab_contents_user_prefs, |
176 pref_sync_associator_.reset(new PrefModelAssociator(this)); | 212 NULL, // recommended_platform_prefs |
177 pref_notifier_.reset(new PrefNotifierImpl(this)); | 213 NULL, // recommended_cloud_prefs |
178 pref_value_store_.reset( | 214 default_store, |
179 new PrefValueStore(managed_platform_prefs, | 215 pref_notifier), |
180 managed_cloud_prefs, | 216 tab_contents_user_prefs, |
181 extension_prefs, | 217 default_store, |
182 command_line_prefs, | 218 pref_notifier, |
183 user_pref_store_, | 219 false); |
184 recommended_platform_prefs, | |
185 recommended_cloud_prefs, | |
186 default_store, | |
187 pref_sync_associator_.get(), | |
188 pref_notifier_.get())); | |
189 InitFromStorage(async); | |
190 } | 220 } |
191 | 221 |
192 PrefService::PrefService(const PrefService& original, | 222 PrefService::PrefService(PrefValueStore* pref_value_store, |
193 PrefStore* incognito_extension_prefs) | 223 PersistentPrefStore* user_prefs, |
194 : user_pref_store_( | 224 DefaultPrefStore* default_store, |
195 new IncognitoUserPrefStore(original.user_pref_store_.get())), | 225 PrefNotifierImpl* pref_notifier, |
196 default_store_(original.default_store_.get()) { | 226 bool async) |
197 // Incognito mode doesn't sync, so no need to create PrefModelAssociator. | 227 : pref_notifier_(pref_notifier), |
198 pref_notifier_.reset(new PrefNotifierImpl(this)); | 228 pref_value_store_(pref_value_store), |
199 pref_value_store_.reset(original.pref_value_store_->CloneAndSpecialize( | 229 user_pref_store_(user_prefs), |
200 NULL, // managed_platform_prefs | 230 default_store_(default_store) { |
201 NULL, // managed_cloud_prefs | 231 pref_notifier_->SetSource(this); |
202 incognito_extension_prefs, | 232 InitFromStorage(async); |
203 NULL, // command_line_prefs | |
204 user_pref_store_.get(), | |
205 NULL, // recommended_platform_prefs | |
206 NULL, // recommended_cloud_prefs | |
207 default_store_.get(), | |
208 NULL, // pref_sync_associator_ | |
209 pref_notifier_.get())); | |
210 } | 233 } |
211 | 234 |
212 PrefService::~PrefService() { | 235 PrefService::~PrefService() { |
213 DCHECK(CalledOnValidThread()); | 236 DCHECK(CalledOnValidThread()); |
214 STLDeleteContainerPointers(prefs_.begin(), prefs_.end()); | 237 STLDeleteContainerPointers(prefs_.begin(), prefs_.end()); |
215 prefs_.clear(); | 238 prefs_.clear(); |
216 | 239 |
217 // Reset pointers so accesses after destruction reliably crash. | 240 // Reset pointers so accesses after destruction reliably crash. |
218 pref_value_store_.reset(); | 241 pref_value_store_.reset(); |
219 user_pref_store_ = NULL; | 242 user_pref_store_ = NULL; |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 return pref_value_store()->PrefValueFromDefaultStore(name_.c_str()); | 917 return pref_value_store()->PrefValueFromDefaultStore(name_.c_str()); |
895 } | 918 } |
896 | 919 |
897 bool PrefService::Preference::IsUserModifiable() const { | 920 bool PrefService::Preference::IsUserModifiable() const { |
898 return pref_value_store()->PrefValueUserModifiable(name_.c_str()); | 921 return pref_value_store()->PrefValueUserModifiable(name_.c_str()); |
899 } | 922 } |
900 | 923 |
901 bool PrefService::Preference::IsExtensionModifiable() const { | 924 bool PrefService::Preference::IsExtensionModifiable() const { |
902 return pref_value_store()->PrefValueExtensionModifiable(name_.c_str()); | 925 return pref_value_store()->PrefValueExtensionModifiable(name_.c_str()); |
903 } | 926 } |
OLD | NEW |