Index: chrome/browser/profiles/profile_impl.cc |
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc |
index 1d917aacfb813deb6de7e3c35a4e488b55e7da16..9c89f4a19918f222f2f709d43723d58d97a3299a 100644 |
--- a/chrome/browser/profiles/profile_impl.cc |
+++ b/chrome/browser/profiles/profile_impl.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/profiles/profile_impl.h" |
#include "base/bind.h" |
+#include "base/callback.h" |
#include "base/command_line.h" |
#include "base/compiler_specific.h" |
#include "base/environment.h" |
@@ -361,10 +362,12 @@ ProfileImpl::ProfileImpl( |
new ExtensionPrefStore( |
ExtensionPrefValueMapFactory::GetForProfile(this), false), |
true)); |
- // Wait for the notification that prefs has been loaded (successfully or |
- // not). |
- registrar_.Add(this, chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED, |
- content::Source<PrefService>(prefs_.get())); |
+ // Wait for the notification that prefs has been loaded |
+ // (successfully or not). Note that we can use base::Unretained |
+ // because the prefs service is owned by this class and lives on |
Mattias Nissler (ping if slow)
2012/10/31 13:29:36
nit: s/prefs service/PrefService/
Jói
2012/10/31 14:56:26
Done.
|
+ // the same thread. |
+ prefs_->AddPrefInitObserver(base::Bind(&ProfileImpl::OnPrefsLoaded, |
+ base::Unretained(this))); |
} else if (create_mode == CREATE_MODE_SYNCHRONOUS) { |
// Load prefs synchronously. |
prefs_.reset(PrefService::CreatePrefService( |
@@ -915,32 +918,6 @@ void ProfileImpl::Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) { |
switch (type) { |
- case chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED: { |
- bool* succeeded = content::Details<bool>(details).ptr(); |
- PrefService *prefs = content::Source<PrefService>(source).ptr(); |
- DCHECK(prefs == prefs_.get()); |
- registrar_.Remove(this, |
- chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED, |
- content::Source<PrefService>(prefs)); |
- OnPrefsLoaded(*succeeded); |
- break; |
- } |
- case chrome::NOTIFICATION_PREF_CHANGED: { |
- std::string* pref_name_in = content::Details<std::string>(details).ptr(); |
- PrefService* prefs = content::Source<PrefService>(source).ptr(); |
- DCHECK(pref_name_in && prefs); |
- if (*pref_name_in == prefs::kGoogleServicesUsername) { |
- UpdateProfileUserNameCache(); |
- } else if (*pref_name_in == prefs::kProfileAvatarIndex) { |
- UpdateProfileAvatarCache(); |
- } else if (*pref_name_in == prefs::kProfileName) { |
- UpdateProfileNameCache(); |
- } else if (*pref_name_in == prefs::kDefaultZoomLevel) { |
- HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( |
- prefs->GetDouble(prefs::kDefaultZoomLevel)); |
- } |
- break; |
- } |
case chrome::NOTIFICATION_BOOKMARK_MODEL_LOADED: |
// Causes lazy-load if sync is enabled. |
ProfileSyncServiceFactory::GetInstance()->GetForProfile(this); |
@@ -969,6 +946,21 @@ void ProfileImpl::Observe(int type, |
} |
} |
+void ProfileImpl::OnPreferenceChanged(PrefServiceBase* prefs, |
+ const std::string& pref_name_in) { |
+ DCHECK(prefs); |
+ if (pref_name_in == prefs::kGoogleServicesUsername) { |
+ UpdateProfileUserNameCache(); |
+ } else if (pref_name_in == prefs::kProfileAvatarIndex) { |
+ UpdateProfileAvatarCache(); |
+ } else if (pref_name_in == prefs::kProfileName) { |
+ UpdateProfileNameCache(); |
+ } else if (pref_name_in == prefs::kDefaultZoomLevel) { |
+ HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( |
+ prefs->GetDouble(prefs::kDefaultZoomLevel)); |
+ } |
+} |
+ |
#if defined(ENABLE_SESSION_SERVICE) |
void ProfileImpl::StopCreateSessionServiceTimer() { |
create_session_service_timer_.Stop(); |