Chromium Code Reviews| Index: components/signin/core/browser/account_reconcilor.cc |
| diff --git a/components/signin/core/browser/account_reconcilor.cc b/components/signin/core/browser/account_reconcilor.cc |
| index efe594db0e528b9791250382726747f2b511f1e3..4cc33da3c649b409761fc4f5cac4968021066c50 100644 |
| --- a/components/signin/core/browser/account_reconcilor.cc |
| +++ b/components/signin/core/browser/account_reconcilor.cc |
| @@ -16,12 +16,9 @@ |
| #include "components/signin/core/browser/signin_client.h" |
| #include "components/signin/core/browser/signin_metrics.h" |
| #include "components/signin/core/common/profile_management_switches.h" |
| -#include "google_apis/gaia/gaia_auth_fetcher.h" |
| #include "google_apis/gaia/gaia_auth_util.h" |
| -#include "google_apis/gaia/gaia_constants.h" |
| #include "google_apis/gaia/gaia_oauth_client.h" |
| #include "google_apis/gaia/gaia_urls.h" |
| -#include "net/cookies/canonical_cookie.h" |
| namespace { |
| @@ -67,7 +64,6 @@ AccountReconcilor::AccountReconcilor( |
| registered_with_content_settings_(false), |
| is_reconcile_started_(false), |
| first_execution_(true), |
| - are_gaia_accounts_set_(false), |
| chrome_accounts_changed_(false) { |
| VLOG(1) << "AccountReconcilor::AccountReconcilor"; |
| } |
| @@ -87,7 +83,6 @@ void AccountReconcilor::Initialize(bool start_reconcile_if_tokens_available) { |
| // wait for signin. |
| if (IsProfileConnected()) { |
| RegisterWithCookieManagerService(); |
| - RegisterForCookieChanges(); |
| RegisterWithContentSettings(); |
| RegisterWithTokenService(); |
| @@ -101,29 +96,12 @@ void AccountReconcilor::Initialize(bool start_reconcile_if_tokens_available) { |
| void AccountReconcilor::Shutdown() { |
| VLOG(1) << "AccountReconcilor::Shutdown"; |
| - gaia_fetcher_.reset(); |
| - get_gaia_accounts_callbacks_.clear(); |
| UnregisterWithCookieManagerService(); |
| UnregisterWithSigninManager(); |
| UnregisterWithTokenService(); |
| - UnregisterForCookieChanges(); |
| UnregisterWithContentSettings(); |
| } |
| -void AccountReconcilor::RegisterForCookieChanges() { |
| - // First clear any existing registration to avoid DCHECKs that can otherwise |
| - // go off in some embedders on reauth (e.g., ChromeSigninClient). |
| - UnregisterForCookieChanges(); |
| - cookie_changed_subscription_ = client_->AddCookieChangedCallback( |
| - GaiaUrls::GetInstance()->gaia_url(), |
| - "LSID", |
| - base::Bind(&AccountReconcilor::OnCookieChanged, base::Unretained(this))); |
| -} |
| - |
| -void AccountReconcilor::UnregisterForCookieChanges() { |
| - cookie_changed_subscription_.reset(); |
| -} |
| - |
| void AccountReconcilor::RegisterWithSigninManager() { |
| signin_manager_->AddObserver(this); |
| } |
| @@ -198,24 +176,6 @@ bool AccountReconcilor::IsProfileConnected() { |
| return signin_manager_->IsAuthenticated(); |
| } |
| -void AccountReconcilor::OnCookieChanged(const net::CanonicalCookie& cookie, |
| - bool removed) { |
| - DCHECK_EQ("LSID", cookie.Name()); |
| - DCHECK_EQ(GaiaUrls::GetInstance()->gaia_url().host(), cookie.Domain()); |
| - if (cookie.IsSecure() && cookie.IsHttpOnly()) { |
| - VLOG(1) << "AccountReconcilor::OnCookieChanged: LSID changed"; |
| - |
| - // It is possible that O2RT is not available at this moment. |
| - if (!token_service_->GetAccounts().size()) { |
| - VLOG(1) << "AccountReconcilor::OnCookieChanged: cookie change is ingored" |
| - "because O2RT is not available yet."; |
| - return; |
| - } |
|
Roger Tawa OOO till Jul 10th
2015/04/15 18:51:06
I don't see the logic from lines 209-213 in OnGaia
Mike Lerman
2015/04/16 13:13:46
It is still - thanks. Good catch.
|
| - |
| - StartReconcile(); |
| - } |
| -} |
| - |
| void AccountReconcilor::OnContentSettingChanged( |
| const ContentSettingsPattern& primary_pattern, |
| const ContentSettingsPattern& secondary_pattern, |
| @@ -249,7 +209,6 @@ void AccountReconcilor::GoogleSigninSucceeded(const std::string& account_id, |
| const std::string& password) { |
| VLOG(1) << "AccountReconcilor::GoogleSigninSucceeded: signed in"; |
| RegisterWithCookieManagerService(); |
| - RegisterForCookieChanges(); |
| RegisterWithContentSettings(); |
| RegisterWithTokenService(); |
| } |
| @@ -257,12 +216,9 @@ void AccountReconcilor::GoogleSigninSucceeded(const std::string& account_id, |
| void AccountReconcilor::GoogleSignedOut(const std::string& account_id, |
| const std::string& username) { |
| VLOG(1) << "AccountReconcilor::GoogleSignedOut: signed out"; |
| - gaia_fetcher_.reset(); |
| - get_gaia_accounts_callbacks_.clear(); |
| AbortReconcile(); |
| UnregisterWithCookieManagerService(); |
| UnregisterWithTokenService(); |
| - UnregisterForCookieChanges(); |
| UnregisterWithContentSettings(); |
| PerformLogoutAllAccountsAction(); |
| } |
| @@ -289,13 +245,12 @@ void AccountReconcilor::StartReconcile() { |
| return; |
| } |
| - if (is_reconcile_started_ || get_gaia_accounts_callbacks_.size() > 0) |
| + if (is_reconcile_started_) |
| return; |
| is_reconcile_started_ = true; |
| // Reset state for validating gaia cookie. |
| - are_gaia_accounts_set_ = false; |
| gaia_accounts_.clear(); |
| // Reset state for validating oauth2 tokens. |
| @@ -304,77 +259,17 @@ void AccountReconcilor::StartReconcile() { |
| add_to_cookie_.clear(); |
| ValidateAccountsFromTokenService(); |
| - GetAccountsFromCookie(base::Bind( |
| - &AccountReconcilor::ContinueReconcileActionAfterGetGaiaAccounts, |
| - base::Unretained(this))); |
| -} |
| - |
| -void AccountReconcilor::GetAccountsFromCookie( |
| - GetAccountsFromCookieCallback callback) { |
| - get_gaia_accounts_callbacks_.push_back(callback); |
| - if (!gaia_fetcher_) |
| - MayBeDoNextListAccounts(); |
| -} |
| - |
| -void AccountReconcilor::OnListAccountsSuccess(const std::string& data) { |
| - gaia_fetcher_.reset(); |
| - |
| - // Get account information from response data. |
| - std::vector<std::pair<std::string, bool> > gaia_accounts; |
| - bool valid_json = gaia::ParseListAccountsData(data, &gaia_accounts); |
| - if (!valid_json) { |
| - VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: parsing error"; |
| - } else if (gaia_accounts.size() > 0) { |
| - VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: " |
| - << "Gaia " << gaia_accounts.size() << " accounts, " |
| - << "Primary is '" << gaia_accounts[0].first << "'"; |
| - } else { |
| - VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: No accounts"; |
| - } |
| - |
| - // There must be at least one callback waiting for result. |
| - DCHECK(!get_gaia_accounts_callbacks_.empty()); |
| - |
| - GoogleServiceAuthError error = |
| - !valid_json ? GoogleServiceAuthError( |
| - GoogleServiceAuthError::UNEXPECTED_SERVICE_RESPONSE) |
| - : GoogleServiceAuthError::AuthErrorNone(); |
| - get_gaia_accounts_callbacks_.front().Run(error, gaia_accounts); |
| - get_gaia_accounts_callbacks_.pop_front(); |
| - |
| - MayBeDoNextListAccounts(); |
| -} |
| - |
| -void AccountReconcilor::OnListAccountsFailure( |
| - const GoogleServiceAuthError& error) { |
| - gaia_fetcher_.reset(); |
| - VLOG(1) << "AccountReconcilor::OnListAccountsFailure: " << error.ToString(); |
| - std::vector<std::pair<std::string, bool> > empty_accounts; |
| - |
| - // There must be at least one callback waiting for result. |
| - DCHECK(!get_gaia_accounts_callbacks_.empty()); |
| - |
| - get_gaia_accounts_callbacks_.front().Run(error, empty_accounts); |
| - get_gaia_accounts_callbacks_.pop_front(); |
| - |
| - MayBeDoNextListAccounts(); |
| -} |
| - |
| -void AccountReconcilor::MayBeDoNextListAccounts() { |
| - if (!get_gaia_accounts_callbacks_.empty()) { |
| - gaia_fetcher_.reset(new GaiaAuthFetcher( |
| - this, GaiaConstants::kReconcilorSource, |
| - client_->GetURLRequestContext())); |
| - gaia_fetcher_->StartListAccounts(); |
| - } |
| + // Rely on the GCMS to manage calls to and responses from ListAccounts. |
| + if (cookie_manager_service_->ListAccounts(&gaia_accounts_)) |
| + OnGaiaAccountsInCookieUpdated( |
| + gaia_accounts_, GoogleServiceAuthError(GoogleServiceAuthError::NONE)); |
|
Roger Tawa OOO till Jul 10th
2015/04/15 18:51:06
Nit: need { and }
Mike Lerman
2015/04/16 13:13:46
Done.
|
| } |
| -void AccountReconcilor::ContinueReconcileActionAfterGetGaiaAccounts( |
| - const GoogleServiceAuthError& error, |
| - const std::vector<std::pair<std::string, bool> >& accounts) { |
| +void AccountReconcilor::OnGaiaAccountsInCookieUpdated( |
| + const std::vector<std::pair<std::string, bool> >& accounts, |
| + const GoogleServiceAuthError& error) { |
| if (error.state() == GoogleServiceAuthError::NONE) { |
| gaia_accounts_ = accounts; |
| - are_gaia_accounts_set_ = true; |
| FinishReconcile(); |
| } else { |
| AbortReconcile(); |
| @@ -407,7 +302,6 @@ void AccountReconcilor::OnNewProfileManagementFlagChanged( |
| void AccountReconcilor::FinishReconcile() { |
| VLOG(1) << "AccountReconcilor::FinishReconcile"; |
| - DCHECK(are_gaia_accounts_set_); |
| DCHECK(add_to_cookie_.empty()); |
| int number_gaia_accounts = gaia_accounts_.size(); |
| bool are_primaries_equal = number_gaia_accounts > 0 && |