| Index: chrome/browser/chromeos/login/oauth2_token_fetcher.cc
|
| diff --git a/chrome/browser/chromeos/login/oauth2_token_fetcher.cc b/chrome/browser/chromeos/login/oauth2_token_fetcher.cc
|
| index 7161eaacc4978a8d6efe66cdad3608cc338887a9..a83a5ed1ea7d8e5e6ed86e61af4743318cd837c0 100644
|
| --- a/chrome/browser/chromeos/login/oauth2_token_fetcher.cc
|
| +++ b/chrome/browser/chromeos/login/oauth2_token_fetcher.cc
|
| @@ -42,7 +42,7 @@ OAuth2TokenFetcher::OAuth2TokenFetcher(
|
| OAuth2TokenFetcher::~OAuth2TokenFetcher() {
|
| }
|
|
|
| -void OAuth2TokenFetcher::Start() {
|
| +void OAuth2TokenFetcher::StartExchangeFromCookies() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| // Delay the verification if the network is not connected or on a captive
|
| @@ -53,13 +53,35 @@ void OAuth2TokenFetcher::Start() {
|
| VLOG(1) << "Network is offline. Deferring OAuth2 token fetch.";
|
| BrowserThread::PostDelayedTask(
|
| BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&OAuth2TokenFetcher::Start, AsWeakPtr()),
|
| + base::Bind(&OAuth2TokenFetcher::StartExchangeFromCookies,
|
| + AsWeakPtr()),
|
| base::TimeDelta::FromMilliseconds(kRequestRestartDelay));
|
| return;
|
| }
|
| auth_fetcher_.StartCookieForOAuthLoginTokenExchange(EmptyString());
|
| }
|
|
|
| +void OAuth2TokenFetcher::StartExchangeFromAuthCode(
|
| + const std::string& auth_code) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + auth_code_ = auth_code;
|
| + // Delay the verification if the network is not connected or on a captive
|
| + // portal.
|
| + ConnectivityStateHelper* csh = ConnectivityStateHelper::Get();
|
| + if (!csh->DefaultNetworkOnline()) {
|
| + // If network is offline, defer the token fetching until online.
|
| + VLOG(1) << "Network is offline. Deferring OAuth2 token fetch.";
|
| + BrowserThread::PostDelayedTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&OAuth2TokenFetcher::StartExchangeFromAuthCode,
|
| + AsWeakPtr(),
|
| + auth_code),
|
| + base::TimeDelta::FromMilliseconds(kRequestRestartDelay));
|
| + return;
|
| + }
|
| + auth_fetcher_.StartAuthCodeForOAuth2TokenExchange(auth_code);
|
| +}
|
| +
|
| void OAuth2TokenFetcher::OnClientOAuthSuccess(
|
| const GaiaAuthConsumer::ClientOAuthResult& oauth_tokens) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -72,10 +94,15 @@ void OAuth2TokenFetcher::OnClientOAuthSuccess(
|
| void OAuth2TokenFetcher::OnClientOAuthFailure(
|
| const GoogleServiceAuthError& error) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - RetryOnError(error,
|
| - base::Bind(&OAuth2TokenFetcher::Start, AsWeakPtr()),
|
| - base::Bind(&Delegate::OnOAuth2TokensFetchFailed,
|
| - base::Unretained(delegate_)));
|
| + RetryOnError(
|
| + error,
|
| + auth_code_.empty() ?
|
| + base::Bind(&OAuth2TokenFetcher::StartExchangeFromCookies,
|
| + AsWeakPtr()) :
|
| + base::Bind(&OAuth2TokenFetcher::StartExchangeFromAuthCode,
|
| + AsWeakPtr(), auth_code_),
|
| + base::Bind(&Delegate::OnOAuth2TokensFetchFailed,
|
| + base::Unretained(delegate_)));
|
| }
|
|
|
| void OAuth2TokenFetcher::RetryOnError(const GoogleServiceAuthError& error,
|
|
|