Index: chrome/browser/services/gcm/gcm_profile_service.cc |
diff --git a/chrome/browser/services/gcm/gcm_profile_service.cc b/chrome/browser/services/gcm/gcm_profile_service.cc |
index 424f5909fcc43c86e851b7da12966e20ade79f4f..b00a74e8194896503c17d5c559326b749a331216 100644 |
--- a/chrome/browser/services/gcm/gcm_profile_service.cc |
+++ b/chrome/browser/services/gcm/gcm_profile_service.cc |
@@ -58,12 +58,16 @@ GCMProfileService::GCMProfileService( |
driver_ = CreateGCMDriverDesktop( |
gcm_client_factory.Pass(), |
- scoped_ptr<IdentityProvider>(new ProfileIdentityProvider( |
- SigninManagerFactory::GetForProfile(profile_), |
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_), |
- LoginUIServiceFactory::GetForProfile(profile_))), |
profile_->GetPath().Append(chrome::kGCMStoreDirname), |
profile_->GetRequestContext()); |
+ |
+ identity_provider_.reset(new ProfileIdentityProvider( |
+ SigninManagerFactory::GetForProfile(profile_), |
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_), |
+ LoginUIServiceFactory::GetForProfile(profile_))); |
+ identity_provider_->AddObserver(this); |
+ |
+ OnActiveAccountLogin(); |
} |
#endif // defined(OS_ANDROID) |
@@ -96,6 +100,41 @@ void GCMProfileService::Shutdown() { |
driver_->Shutdown(); |
driver_.reset(); |
} |
+ |
+#if !defined(OS_ANDROID) |
+ if (identity_provider_) { |
+ identity_provider_->RemoveObserver(this); |
+ identity_provider_.reset(); |
+ } |
+#endif // !defined(OS_ANDROID) |
+} |
+ |
+#if !defined(OS_ANDROID) |
+void GCMProfileService::OnActiveAccountLogin() { |
+ if (!driver_) |
+ return; |
+ |
+ // This might be called multiple times when the password changes. |
+ std::string account_id = identity_provider_->GetActiveAccountId(); |
bartfab (slow)
2014/06/13 11:27:21
Nit: const.
jianli
2014/06/13 18:04:48
Done.
|
+ if (account_id == account_id_) |
+ return; |
+ account_id_ = account_id; |
+ |
+ driver_->SignIn(); |
+} |
+ |
+void GCMProfileService::OnActiveAccountLogout() { |
+ if (driver_) |
+ driver_->Purge(); |
+} |
+#endif // !defined(OS_ANDROID) |
+ |
+std::string GCMProfileService::SignedInUserName() const { |
+#if !defined(OS_ANDROID) |
+ if (driver_.get() && driver_->IsStarted()) |
bartfab (slow)
2014/06/13 11:27:21
Nit: scoped_ptr is testable. No need for .get():
jianli
2014/06/13 18:04:48
Done.
|
+ return account_id_; |
+#endif // !defined(OS_ANDROID) |
+ return std::string(); |
} |
void GCMProfileService::SetDriverForTesting(GCMDriver* driver) { |