diff options
Diffstat (limited to 'chromium/components/signin/core/browser/gaia_cookie_manager_service.cc')
-rw-r--r-- | chromium/components/signin/core/browser/gaia_cookie_manager_service.cc | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc b/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc index ff0011bad89..7a576c1c6cb 100644 --- a/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc +++ b/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc @@ -261,9 +261,11 @@ GaiaCookieManagerService::ExternalCcResultFetcher::GetExternalCcResult() { return base::JoinString(results, ","); } -void GaiaCookieManagerService::ExternalCcResultFetcher::Start() { +void GaiaCookieManagerService::ExternalCcResultFetcher::Start( + base::OnceClosure callback) { DCHECK(!helper_->external_cc_result_fetched_); m_external_cc_result_start_time_ = base::Time::Now(); + callback_ = std::move(callback); CleanupTransientState(); results_.clear(); @@ -453,11 +455,7 @@ void GaiaCookieManagerService::ExternalCcResultFetcher:: time_to_check_connections); helper_->external_cc_result_fetched_ = true; - // Since the ExternalCCResultFetcher is only Started in place of calling - // StartFetchingMergeSession, we can assume we need to call - // StartFetchingMergeSession. If this assumption becomes invalid, a Callback - // will need to be passed to Start() and Run() here. - helper_->StartFetchingMergeSession(); + std::move(callback_).Run(); } GaiaCookieManagerService::GaiaCookieManagerService( @@ -808,7 +806,9 @@ void GaiaCookieManagerService::OnUbertokenFetchComplete( if (!external_cc_result_fetched_ && !external_cc_result_fetcher_.IsRunning()) { - external_cc_result_fetcher_.Start(); + external_cc_result_fetcher_.Start( + base::BindOnce(&GaiaCookieManagerService::StartFetchingMergeSession, + weak_ptr_factory_.GetWeakPtr())); return; } @@ -1064,6 +1064,15 @@ void GaiaCookieManagerService::StartFetchingAccessTokensForMultilogin() { DCHECK_EQ(SET_ACCOUNTS, requests_.front().request_type()); VLOG(1) << "GaiaCookieManagerService::StartFetchingAccessToken account_id =" << base::JoinString(requests_.front().account_ids(), " "); + + if (!external_cc_result_fetched_ && + !external_cc_result_fetcher_.IsRunning()) { + external_cc_result_fetcher_.Start(base::BindOnce( + &GaiaCookieManagerService::StartFetchingAccessTokensForMultilogin, + weak_ptr_factory_.GetWeakPtr())); + return; + } + token_requests_.clear(); access_tokens_.clear(); for (const std::string& account_id : requests_.front().account_ids()) { @@ -1091,10 +1100,12 @@ void GaiaCookieManagerService::StartFetchingUbertoken() { void GaiaCookieManagerService::StartFetchingMultiLogin( const std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>& accounts) { + DCHECK(external_cc_result_fetched_); gaia_auth_fetcher_ = signin_client_->CreateGaiaAuthFetcher( this, requests_.front().source(), GetURLLoaderFactory()); - gaia_auth_fetcher_->StartOAuthMultilogin(accounts); + gaia_auth_fetcher_->StartOAuthMultilogin( + accounts, external_cc_result_fetcher_.GetExternalCcResult()); } void GaiaCookieManagerService::StartFetchingMergeSession() { @@ -1118,7 +1129,15 @@ void GaiaCookieManagerService::StartFetchingLogOut() { RecordLogoutRequestState(LogoutRequestState::kStarted); gaia_auth_fetcher_ = signin_client_->CreateGaiaAuthFetcher( this, requests_.front().source(), GetURLLoaderFactory()); - gaia_auth_fetcher_->StartLogOut(); + bool use_continue_url = false; +#if defined(OS_ANDROID) + use_continue_url = base::FeatureList::IsEnabled(signin::kMiceFeature); +#endif + if (use_continue_url) { + gaia_auth_fetcher_->StartLogOutWithBlankContinueURL(); + } else { + gaia_auth_fetcher_->StartLogOut(); + } } void GaiaCookieManagerService::StartFetchingListAccounts() { |