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 491ca87a4f1ae9458675e1593b016bc27a811d2d..bd6ede560a964757f5df296959b44dc7040a55d2 100644 |
--- a/chrome/browser/services/gcm/gcm_profile_service.cc |
+++ b/chrome/browser/services/gcm/gcm_profile_service.cc |
@@ -52,13 +52,9 @@ class GCMProfileService::IdentityObserver : public IdentityProvider::Observer { |
std::string SignedInUserName() const; |
- // Called to inform IdentityObserver that a list of accounts was updated. |
- // |account_tokens| is a list of email addresses, account IDs and OAuth2 |
- // access tokens. |
- void AccountsUpdated( |
- const std::vector<GCMClient::AccountTokenInfo>& account_tokens); |
- |
private: |
+ void StartAccountTracker(); |
+ |
Profile* profile_; |
GCMDriver* driver_; |
scoped_ptr<IdentityProvider> identity_provider_; |
@@ -83,6 +79,7 @@ GCMProfileService::IdentityObserver::IdentityObserver(Profile* profile, |
identity_provider_->AddObserver(this); |
OnActiveAccountLogin(); |
+ StartAccountTracker(); |
} |
GCMProfileService::IdentityObserver::~IdentityObserver() { |
@@ -96,30 +93,14 @@ void GCMProfileService::IdentityObserver::OnActiveAccountLogin() { |
const std::string account_id = identity_provider_->GetActiveAccountId(); |
if (account_id == account_id_) |
return; |
- account_id_ = account_id; |
+ account_id_ = account_id; |
driver_->OnSignedIn(); |
- |
- if (!gcm_account_tracker_) { |
- scoped_ptr<gaia::AccountTracker> gaia_account_tracker( |
- new gaia::AccountTracker(identity_provider_.get(), |
- profile_->GetRequestContext())); |
- |
- gcm_account_tracker_.reset(new GCMAccountTracker( |
- gaia_account_tracker.Pass(), |
- base::Bind(&GCMProfileService::IdentityObserver::AccountsUpdated, |
- weak_ptr_factory_.GetWeakPtr()))); |
- } |
- |
- gcm_account_tracker_->Start(); |
} |
void GCMProfileService::IdentityObserver::OnActiveAccountLogout() { |
account_id_.clear(); |
- // Check is necessary to not crash browser_tests. |
- if (gcm_account_tracker_) |
- gcm_account_tracker_->Stop(); |
// When sign-in enforcement is not dropped, OnSignedOut will also clear all |
// the GCM data and a new GCM ID will be retrieved after the user signs in |
// again. Otherwise, the user sign-out will not affect the existing GCM |
@@ -131,10 +112,20 @@ std::string GCMProfileService::IdentityObserver::SignedInUserName() const { |
return driver_->IsStarted() ? account_id_ : std::string(); |
} |
-void GCMProfileService::IdentityObserver::AccountsUpdated( |
- const std::vector<GCMClient::AccountTokenInfo>& account_tokens) { |
- driver_->SetAccountTokens(account_tokens); |
+void GCMProfileService::IdentityObserver::StartAccountTracker() { |
+ if (gcm_account_tracker_) |
+ return; |
+ |
+ scoped_ptr<gaia::AccountTracker> gaia_account_tracker( |
+ new gaia::AccountTracker(identity_provider_.get(), |
+ profile_->GetRequestContext())); |
+ |
+ gcm_account_tracker_.reset( |
+ new GCMAccountTracker(gaia_account_tracker.Pass(), driver_)); |
+ |
+ gcm_account_tracker_->Start(); |
} |
+ |
#endif // !defined(OS_ANDROID) |
// static |
@@ -234,6 +225,8 @@ std::string GCMProfileService::SignedInUserName() const { |
void GCMProfileService::SetDriverForTesting(GCMDriver* driver) { |
driver_.reset(driver); |
+ if (identity_observer_) |
+ identity_observer_.reset(new IdentityObserver(profile_, driver)); |
} |
} // namespace gcm |