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

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

Issue 6894020: Adds async interface method to PersistentPrefStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use Notifications. Created 9 years, 8 months 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 9071f24898abe56a4e2f85186565ff74c218e880..0e499db776af827c5f793e08ce1e1ee10f9a3d34 100644
--- a/chrome/browser/prefs/pref_service.cc
+++ b/chrome/browser/prefs/pref_service.cc
@@ -86,16 +86,8 @@ void NotifyReadError(PrefService* pref, int message_id) {
// static
PrefService* PrefService::CreatePrefService(const FilePath& pref_filename,
PrefStore* extension_prefs,
- Profile* profile) {
- return CreatePrefServiceAsync(pref_filename, extension_prefs, profile, NULL);
-}
-
-// static
-PrefService* PrefService::CreatePrefServiceAsync(
- const FilePath& pref_filename,
- PrefStore* extension_prefs,
- Profile* profile,
- PrefServiceDelegate* delegate) {
+ Profile* profile,
+ bool async) {
using policy::ConfigurationPolicyPrefStore;
#if defined(OS_LINUX)
@@ -127,14 +119,19 @@ PrefService* PrefService::CreatePrefServiceAsync(
profile);
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, delegate);
+ PrefService* service = new PrefService(
+ managed_platform, managed_cloud, extension_prefs,
+ command_line, user, recommended_platform,
+ recommended_cloud, default_pref_store);
+ service->InitFromStorage(async);
+ return service;
}
PrefService* PrefService::CreateIncognitoPrefService(
PrefStore* incognito_extension_prefs) {
- return new PrefService(*this, incognito_extension_prefs);
+ PrefService* service = new PrefService(*this, incognito_extension_prefs);
+ service->InitFromStorage(false);
+ return service;
}
PrefService::PrefService(PrefStore* managed_platform_prefs,
@@ -144,11 +141,9 @@ PrefService::PrefService(PrefStore* managed_platform_prefs,
PersistentPrefStore* user_prefs,
PrefStore* recommended_platform_prefs,
PrefStore* recommended_cloud_prefs,
- DefaultPrefStore* default_store,
- PrefServiceDelegate* delegate)
+ DefaultPrefStore* default_store)
: user_pref_store_(user_prefs),
- default_store_(default_store),
- delegate_(delegate) {
+ default_store_(default_store) {
pref_notifier_.reset(new PrefNotifierImpl(this));
pref_value_store_.reset(
new PrefValueStore(managed_platform_prefs,
@@ -160,15 +155,13 @@ PrefService::PrefService(PrefStore* managed_platform_prefs,
recommended_cloud_prefs,
default_store,
pref_notifier_.get()));
- InitFromStorage();
}
PrefService::PrefService(const PrefService& original,
PrefStore* incognito_extension_prefs)
: user_pref_store_(
new OverlayPersistentPrefStore(original.user_pref_store_.get())),
- default_store_(original.default_store_.get()),
- delegate_(NULL) {
+ default_store_(original.default_store_.get()) {
pref_notifier_.reset(new PrefNotifierImpl(this));
pref_value_store_.reset(original.pref_value_store_->CloneAndSpecialize(
NULL, // managed_platform_prefs
@@ -180,7 +173,6 @@ PrefService::PrefService(const PrefService& original,
NULL, // recommended_cloud_prefs
default_store_.get(),
pref_notifier_.get()));
- InitFromStorage();
}
PrefService::~PrefService() {
@@ -194,14 +186,19 @@ PrefService::~PrefService() {
default_store_ = NULL;
}
-void PrefService::OnPrefsRead(PersistentPrefStore::PrefReadError error,
- bool no_dir) {
- if (no_dir) {
+void PrefService::OnInitializationCompleted() {
+ // This is the only message PrefService is waiting for, so remove us from the
+ // observers list.
+ user_pref_store_->RemoveObserver(this);
+
+ PersistentPrefStore::PrefReadError error;
+ bool is_fatal;
+ user_pref_store_->GetErrors(&error, &is_fatal);
+ if (is_fatal) {
// Bad news. When profile is created, the process that creates the directory
// is explicitly started. So if directory is missing it probably means that
// Chromium hasn't sufficient privileges.
- CHECK(delegate_);
- delegate_->OnPrefsLoaded(this, false);
+ pref_notifier_->OnPersistentPrefsRead(false);
return;
}
@@ -222,19 +219,15 @@ void PrefService::OnPrefsRead(PersistentPrefStore::PrefReadError error,
}
UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, 20);
}
-
- if (delegate_)
- delegate_->OnPrefsLoaded(this, true);
+ pref_notifier_->OnPersistentPrefsRead(true);
}
-void PrefService::InitFromStorage() {
- if (!delegate_) {
- const PersistentPrefStore::PrefReadError error =
- user_pref_store_->ReadPrefs();
- OnPrefsRead(error, false);
+void PrefService::InitFromStorage(bool async) {
+ user_pref_store_->AddObserver(this);
+ if (!async) {
+ user_pref_store_->ReadPrefs();
} else {
- // todo(altimofeev): move this method to PersistentPrefStore interface.
- (static_cast<JsonPrefStore*>(user_pref_store_.get()))->ReadPrefs(this);
+ user_pref_store_.get()->ReadPrefsAsync();
}
}

Powered by Google App Engine
This is Rietveld 408576698