Chromium Code Reviews| Index: chrome/browser/prefs/pref_service.cc |
| diff --git a/chrome/browser/prefs/pref_service.cc b/chrome/browser/prefs/pref_service.cc |
| index 3050a1734f410988b8ff101d0c2ec65972447e84..f64da41a4e70898677e72141db3a11443138b904 100644 |
| --- a/chrome/browser/prefs/pref_service.cc |
| +++ b/chrome/browser/prefs/pref_service.cc |
| @@ -25,6 +25,7 @@ |
| #include "chrome/browser/prefs/command_line_pref_store.h" |
| #include "chrome/browser/prefs/default_pref_store.h" |
| #include "chrome/browser/prefs/incognito_user_pref_store.h" |
| +#include "chrome/browser/prefs/per_tab_user_pref_store.h" |
| #include "chrome/browser/prefs/pref_model_associator.h" |
| #include "chrome/browser/prefs/pref_notifier_impl.h" |
| #include "chrome/browser/prefs/pref_value_store.h" |
| @@ -152,66 +153,77 @@ PrefService* PrefService::CreatePrefService(const FilePath& pref_filename, |
| JsonPrefStore* user = new JsonPrefStore( |
| pref_filename, |
| BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
| - DefaultPrefStore* default_pref_store = new DefaultPrefStore(); |
| + |
| return new PrefService( |
| - managed_platform, managed_cloud, extension_prefs, |
| - command_line, user, recommended_platform, |
| - recommended_cloud, default_pref_store, async); |
| + new PrefValueStore(managed_platform, |
| + managed_cloud, |
| + extension_prefs, |
| + command_line, |
| + user, |
| + recommended_platform, |
| + recommended_cloud, |
| + new DefaultPrefStore(), |
| + new PrefModelAssociator(), |
| + new PrefNotifierImpl()), |
| + async); |
| } |
| PrefService* PrefService::CreateIncognitoPrefService( |
| PrefStore* incognito_extension_prefs) { |
| - return new PrefService(*this, incognito_extension_prefs); |
| -} |
| - |
| -PrefService::PrefService(PrefStore* managed_platform_prefs, |
| - PrefStore* managed_cloud_prefs, |
| - PrefStore* extension_prefs, |
| - PrefStore* command_line_prefs, |
| - PersistentPrefStore* user_prefs, |
| - PrefStore* recommended_platform_prefs, |
| - PrefStore* recommended_cloud_prefs, |
| - DefaultPrefStore* default_store, |
| + return new PrefService( |
| + pref_value_store_->CloneAndSpecialize( |
| + NULL, // managed_platform_prefs |
| + NULL, // managed_cloud_prefs |
| + incognito_extension_prefs, |
| + NULL, // command_line_prefs |
| + new IncognitoUserPrefStore(user_pref_store_.get()), |
| + NULL, // recommended_platform_prefs |
| + NULL, // recommended_cloud_prefs |
| + default_store_.get(), |
| + // Incognito mode doesn't sync, so no need to create |
| + // PrefModelAssociator. |
| + NULL, // pref_sync_associator |
| + // TODO(mnissler,mnaganov): This PrefNotifier needs to listen for |
| + // notifications from the original |pref_notifier_| and forward |
| + // notifications. We need to implement a wrapper that does this. |
|
Mattias Nissler (ping if slow)
2011/11/16 12:08:04
I originally thought this would be a problem, but
mnaganov (inactive)
2011/11/17 16:50:58
Done.
|
| + new PrefNotifierImpl()), |
| + false); |
| +} |
| + |
| +PrefService* PrefService::CreatePrefServiceWithPerTabPrefStore() { |
| + return new PrefService( |
| + pref_value_store_->CloneAndSpecialize( |
| + NULL, // managed_platform_prefs |
| + NULL, // managed_cloud_prefs |
| + NULL, // extension_prefs |
| + NULL, // command_line_prefs |
| + new PerTabUserPrefStore(user_pref_store_.get()), |
| + NULL, // recommended_platform_prefs |
| + NULL, // recommended_cloud_prefs |
| + new DefaultPrefStore(), |
| + NULL, // pref_sync_associator |
| + new PrefNotifierImpl()), |
| + false); |
| +} |
| + |
| +PrefService::PrefService(PrefValueStore* pref_value_store, |
| bool async) |
| - : user_pref_store_(user_prefs), |
| - default_store_(default_store) { |
| - pref_sync_associator_.reset(new PrefModelAssociator(this)); |
| - pref_notifier_.reset(new PrefNotifierImpl(this)); |
| - pref_value_store_.reset( |
| - new PrefValueStore(managed_platform_prefs, |
| - managed_cloud_prefs, |
| - extension_prefs, |
| - command_line_prefs, |
| - user_pref_store_, |
| - recommended_platform_prefs, |
| - recommended_cloud_prefs, |
| - default_store, |
| - pref_sync_associator_.get(), |
| - pref_notifier_.get())); |
| + : pref_value_store_(pref_value_store), |
| + pref_notifier_(reinterpret_cast<PrefNotifierImpl*>( |
| + pref_value_store_->pref_notifier_)), |
|
Mattias Nissler (ping if slow)
2011/11/16 12:08:04
Suggestion: To avoid this cast, maybe it's better
mnaganov (inactive)
2011/11/17 16:50:58
I've reconsidered the approach to PrefService init
|
| + user_pref_store_(reinterpret_cast<PersistentPrefStore*>( |
| + pref_value_store_->GetPrefStore(PrefValueStore::USER_STORE))), |
|
Mattias Nissler (ping if slow)
2011/11/16 12:08:04
These casts suck. Can we just pass on the properly
mnaganov (inactive)
2011/11/17 16:50:58
Fixed.
|
| + default_store_(reinterpret_cast<DefaultPrefStore*>( |
| + pref_value_store_->GetPrefStore(PrefValueStore::DEFAULT_STORE))), |
| + pref_sync_associator_(pref_value_store_->pref_sync_associator_) { |
|
Mattias Nissler (ping if slow)
2011/11/16 12:08:04
This seems weird. Pass it in a parameter?
mnaganov (inactive)
2011/11/17 16:50:58
Fixed.
|
| + pref_notifier_->SetPrefService(this); |
| + if (pref_sync_associator_.get()) |
| + pref_sync_associator_->SetPrefService(this); |
| + pref_notifier_->SetPrefModelAssociator(pref_sync_associator_.get()); |
| InitFromStorage(async); |
| } |
| -PrefService::PrefService(const PrefService& original, |
| - PrefStore* incognito_extension_prefs) |
| - : user_pref_store_( |
| - new IncognitoUserPrefStore(original.user_pref_store_.get())), |
| - default_store_(original.default_store_.get()) { |
| - // Incognito mode doesn't sync, so no need to create PrefModelAssociator. |
| - pref_notifier_.reset(new PrefNotifierImpl(this)); |
| - pref_value_store_.reset(original.pref_value_store_->CloneAndSpecialize( |
| - NULL, // managed_platform_prefs |
| - NULL, // managed_cloud_prefs |
| - incognito_extension_prefs, |
| - NULL, // command_line_prefs |
| - user_pref_store_.get(), |
| - NULL, // recommended_platform_prefs |
| - NULL, // recommended_cloud_prefs |
| - default_store_.get(), |
| - NULL, // pref_sync_associator_ |
| - pref_notifier_.get())); |
| -} |
| - |
| PrefService::~PrefService() { |
| DCHECK(CalledOnValidThread()); |
| STLDeleteContainerPointers(prefs_.begin(), prefs_.end()); |