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..4206f01e0c447c43860f6f5d5c372b9a830c510e 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" |
@@ -154,64 +155,93 @@ PrefService* PrefService::CreatePrefService(const FilePath& pref_filename, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
DefaultPrefStore* default_pref_store = new DefaultPrefStore(); |
+ PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
+ PrefModelAssociator* pref_sync_associator = new PrefModelAssociator(); |
+ |
return new PrefService( |
- managed_platform, managed_cloud, extension_prefs, |
- command_line, user, recommended_platform, |
- recommended_cloud, default_pref_store, async); |
+ pref_notifier, |
+ new PrefValueStore( |
+ managed_platform, |
+ managed_cloud, |
+ extension_prefs, |
+ command_line, |
+ user, |
+ recommended_platform, |
+ recommended_cloud, |
+ default_pref_store, |
+ pref_sync_associator, |
+ pref_notifier), |
+ user, |
+ default_pref_store, |
+ pref_sync_associator, |
+ async); |
} |
PrefService* PrefService::CreateIncognitoPrefService( |
PrefStore* incognito_extension_prefs) { |
- return new PrefService(*this, incognito_extension_prefs); |
+ PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
+ PersistentPrefStore* incognito_pref_store = |
+ new IncognitoUserPrefStore(user_pref_store_.get()); |
+ return new PrefService( |
+ pref_notifier, |
+ pref_value_store_->CloneAndSpecialize( |
+ NULL, // managed_platform_prefs |
+ NULL, // managed_cloud_prefs |
+ incognito_extension_prefs, |
+ NULL, // command_line_prefs |
+ incognito_pref_store, |
+ NULL, // recommended_platform_prefs |
+ NULL, // recommended_cloud_prefs |
+ default_store_.get(), |
+ NULL, // pref_sync_associator |
+ pref_notifier), |
+ incognito_pref_store, |
+ default_store_.get(), |
+ NULL, |
+ false); |
} |
-PrefService::PrefService(PrefStore* managed_platform_prefs, |
- PrefStore* managed_cloud_prefs, |
- PrefStore* extension_prefs, |
- PrefStore* command_line_prefs, |
+PrefService* PrefService::CreatePrefServiceWithPerTabPrefStore() { |
+ PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
+ PersistentPrefStore* per_tab_pref_store = |
+ new PerTabUserPrefStore(user_pref_store_.get()); |
+ DefaultPrefStore* default_store = new DefaultPrefStore(); |
+ return new PrefService( |
+ pref_notifier, |
+ pref_value_store_->CloneAndSpecialize( |
+ NULL, // managed_platform_prefs |
+ NULL, // managed_cloud_prefs |
+ NULL, // extension_prefs |
+ NULL, // command_line_prefs |
+ per_tab_pref_store, |
+ NULL, // recommended_platform_prefs |
+ NULL, // recommended_cloud_prefs |
+ default_store, |
+ NULL, |
+ pref_notifier), |
+ per_tab_pref_store, |
+ default_store, |
+ NULL, |
+ false); |
+} |
+ |
+PrefService::PrefService(PrefNotifierImpl* pref_notifier, |
+ PrefValueStore* pref_value_store, |
PersistentPrefStore* user_prefs, |
- PrefStore* recommended_platform_prefs, |
- PrefStore* recommended_cloud_prefs, |
DefaultPrefStore* default_store, |
+ PrefModelAssociator* pref_sync_associator, |
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_notifier_(pref_notifier), |
+ pref_value_store_(pref_value_store), |
+ user_pref_store_(user_prefs), |
+ default_store_(default_store), |
+ pref_sync_associator_(pref_sync_associator) { |
+ pref_notifier_->SetPrefService(this); |
+ if (pref_sync_associator_.get()) |
+ pref_sync_associator_->SetPrefService(this); |
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()); |