Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: chrome/browser/prefs/pref_service.cc

Issue 8568019: Introduce per-tab preferences service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698