Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Unified Diff: components/signin/core/browser/gaia_cookie_manager_service.cc

Issue 1070563004: GCMS has automatic checks for CheckExternalConnections. It will be (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: AccountReconcilor tests need a fake list_accounts response, not a fake check_cc_results response. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/signin/core/browser/gaia_cookie_manager_service.cc
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc
index 36ba75a96fa725b20ce0d281a7c88f1872f328e0..1aef48f0c9d3e9394c4a54103dff45e590155616 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.cc
+++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -136,9 +136,9 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::Start() {
CleanupTransientState();
results_.clear();
- gaia_auth_fetcher_.reset(
+ helper_->gaia_auth_fetcher_.reset(
new GaiaAuthFetcher(this, helper_->source_, helper_->request_context()));
- gaia_auth_fetcher_->StartGetCheckConnectionInfo();
+ helper_->gaia_auth_fetcher_->StartGetCheckConnectionInfo();
// Some fetches may timeout. Start a timer to decide when the result fetcher
// has waited long enough.
@@ -150,7 +150,7 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::Start() {
}
bool GaiaCookieManagerService::ExternalCcResultFetcher::IsRunning() {
- return gaia_auth_fetcher_ || fetchers_.size() > 0u;
+ return helper_->gaia_auth_fetcher_ || fetchers_.size() > 0u;
}
void GaiaCookieManagerService::ExternalCcResultFetcher::TimeoutForTests() {
@@ -159,18 +159,20 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::TimeoutForTests() {
void GaiaCookieManagerService::ExternalCcResultFetcher::
OnGetCheckConnectionInfoSuccess(const std::string& data) {
+ helper_->gaia_auth_fetcher_backoff_.InformOfRequest(true);
+ gaia_auth_fetcher_timer_.Stop();
scoped_ptr<base::Value> value(base::JSONReader::Read(data));
const base::ListValue* list;
if (!value || !value->GetAsList(&list)) {
CleanupTransientState();
- FireGetCheckConnectionInfoCompleted(false);
+ GetCheckConnectionInfoCompleted(false);
return;
}
// If there is nothing to check, terminate immediately.
if (list->GetSize() == 0) {
CleanupTransientState();
- FireGetCheckConnectionInfoCompleted(true);
+ GetCheckConnectionInfoCompleted(true);
return;
}
@@ -193,8 +195,17 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::
void GaiaCookieManagerService::ExternalCcResultFetcher::
OnGetCheckConnectionInfoError(const GoogleServiceAuthError& error) {
+ if (++helper_->gaia_auth_fetcher_retries_ < kMaxGaiaAuthFetcherRetries &&
+ IsTransientError(error)) {
+ helper_->gaia_auth_fetcher_backoff_.InformOfRequest(false);
+ gaia_auth_fetcher_timer_.Start(
+ FROM_HERE, helper_->gaia_auth_fetcher_backoff_.GetTimeUntilRelease(),
+ this, &GaiaCookieManagerService::ExternalCcResultFetcher::Start);
+ return;
+ }
+
CleanupTransientState();
- FireGetCheckConnectionInfoCompleted(false);
+ GetCheckConnectionInfoCompleted(false);
}
net::URLFetcher*
@@ -237,20 +248,20 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::OnURLFetchComplete(
// report the result.
if (fetchers_.empty()) {
CleanupTransientState();
- FireGetCheckConnectionInfoCompleted(true);
+ GetCheckConnectionInfoCompleted(true);
}
}
}
void GaiaCookieManagerService::ExternalCcResultFetcher::Timeout() {
CleanupTransientState();
- FireGetCheckConnectionInfoCompleted(false);
+ GetCheckConnectionInfoCompleted(false);
}
void GaiaCookieManagerService::ExternalCcResultFetcher::
CleanupTransientState() {
timer_.Stop();
- gaia_auth_fetcher_.reset();
+ helper_->gaia_auth_fetcher_.reset();
for (URLToTokenAndFetcher::const_iterator it = fetchers_.begin();
it != fetchers_.end(); ++it) {
@@ -260,13 +271,18 @@ void GaiaCookieManagerService::ExternalCcResultFetcher::
}
void GaiaCookieManagerService::ExternalCcResultFetcher::
- FireGetCheckConnectionInfoCompleted(bool succeeded) {
+ GetCheckConnectionInfoCompleted(bool succeeded) {
base::TimeDelta time_to_check_connections =
base::Time::Now() - m_external_cc_result_start_time_;
signin_metrics::LogExternalCcResultFetches(succeeded,
time_to_check_connections);
- FOR_EACH_OBSERVER(Observer, helper_->observer_list_,
- GetCheckConnectionInfoCompleted(succeeded));
+
+ 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();
}
GaiaCookieManagerService::GaiaCookieManagerService(
@@ -278,7 +294,8 @@ GaiaCookieManagerService::GaiaCookieManagerService(
external_cc_result_fetcher_(this),
gaia_auth_fetcher_backoff_(&kBackoffPolicy),
gaia_auth_fetcher_retries_(0),
- source_(source) {
+ source_(source),
+ external_cc_result_fetched_(false) {
}
GaiaCookieManagerService::~GaiaCookieManagerService() {
@@ -387,11 +404,6 @@ void GaiaCookieManagerService::SignalComplete(
OnAddAccountToCookieCompleted(account_id, error));
}
-void GaiaCookieManagerService::StartFetchingExternalCcResult() {
- if (!external_cc_result_fetcher_.IsRunning())
- external_cc_result_fetcher_.Start();
-}
-
void GaiaCookieManagerService::StartLogOutUrlFetch() {
DCHECK(requests_.front().request_type() == GaiaCookieRequestType::LOG_OUT);
VLOG(1) << "GaiaCookieManagerService::StartLogOutUrlFetch";
@@ -405,10 +417,19 @@ void GaiaCookieManagerService::StartLogOutUrlFetch() {
void GaiaCookieManagerService::OnUbertokenSuccess(
const std::string& uber_token) {
+ DCHECK(requests_.front().request_type() ==
+ GaiaCookieRequestType::ADD_ACCOUNT);
VLOG(1) << "GaiaCookieManagerService::OnUbertokenSuccess"
<< " account=" << requests_.front().account_id();
gaia_auth_fetcher_retries_ = 0;
uber_token_ = uber_token;
+
+ if (!external_cc_result_fetched_ &&
+ !external_cc_result_fetcher_.IsRunning()) {
+ external_cc_result_fetcher_.Start();
+ return;
+ }
+
StartFetchingMergeSession();
}
@@ -469,8 +490,6 @@ void GaiaCookieManagerService::StartFetchingMergeSession() {
new GaiaAuthFetcher(this, source_,
signin_client_->GetURLRequestContext()));
- // It's possible that not all external checks have completed.
- // GetExternalCcResult() returns results for those that have.
gaia_auth_fetcher_->StartMergeSession(uber_token_,
external_cc_result_fetcher_.GetExternalCcResult());
}

Powered by Google App Engine
This is Rietveld 408576698