| Index: chrome/browser/chromeos/login/oauth2_login_verifier.cc
|
| diff --git a/chrome/browser/chromeos/login/oauth2_login_verifier.cc b/chrome/browser/chromeos/login/oauth2_login_verifier.cc
|
| index 78864127ab548a93ff4ab666ed3748ab71ffc164..0967eaf1caa236efea42dfdc0822cb9d1567cbef 100644
|
| --- a/chrome/browser/chromeos/login/oauth2_login_verifier.cc
|
| +++ b/chrome/browser/chromeos/login/oauth2_login_verifier.cc
|
| @@ -66,26 +66,24 @@ OAuth2LoginVerifier::OAuth2LoginVerifier(
|
| OAuth2LoginVerifier::~OAuth2LoginVerifier() {
|
| }
|
|
|
| +void OAuth2LoginVerifier::VerifyUserCookies(Profile* profile) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + if (DelayNetworkCall(base::Bind(&OAuth2LoginVerifier::VerifyUserCookies,
|
| + AsWeakPtr(),
|
| + profile))) {
|
| + return;
|
| + }
|
| +
|
| + StartAuthCookiesVerification();
|
| +}
|
| +
|
| void OAuth2LoginVerifier::VerifyProfileTokens(Profile* profile) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| - // Delay the verification if the network is not connected or on a captive
|
| - // portal.
|
| - const NetworkState* default_network =
|
| - NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
|
| - NetworkPortalDetector* detector = NetworkPortalDetector::Get();
|
| - if (!default_network ||
|
| - default_network->connection_state() == shill::kStatePortal ||
|
| - (detector && detector->GetCaptivePortalState(default_network).status !=
|
| - NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE)) {
|
| - // If network is offline, defer the token fetching until online.
|
| - LOG(WARNING) << "Network is offline. Deferring OAuth2 access token fetch.";
|
| - BrowserThread::PostDelayedTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &OAuth2LoginVerifier::VerifyProfileTokens, AsWeakPtr(), profile),
|
| - base::TimeDelta::FromMilliseconds(kRequestRestartDelay));
|
| + if (DelayNetworkCall(base::Bind(&OAuth2LoginVerifier::VerifyProfileTokens,
|
| + AsWeakPtr(),
|
| + profile))) {
|
| return;
|
| }
|
|
|
| @@ -165,11 +163,11 @@ void OAuth2LoginVerifier::SchedulePostMergeVerification() {
|
| BrowserThread::UI,
|
| FROM_HERE,
|
| base::Bind(
|
| - &OAuth2LoginVerifier::StartPostRestoreVerification, AsWeakPtr()),
|
| + &OAuth2LoginVerifier::StartAuthCookiesVerification, AsWeakPtr()),
|
| base::TimeDelta::FromMilliseconds(kPostResoreVerificationDelay));
|
| }
|
|
|
| -void OAuth2LoginVerifier::StartPostRestoreVerification() {
|
| +void OAuth2LoginVerifier::StartAuthCookiesVerification() {
|
| gaia_fetcher_.reset(
|
| new GaiaAuthFetcher(this,
|
| std::string(GaiaConstants::kChromeOSSource),
|
| @@ -235,7 +233,7 @@ void OAuth2LoginVerifier::OnListAccountsFailure(
|
| RetryOnError(
|
| "ListAccounts",
|
| error,
|
| - base::Bind(&OAuth2LoginVerifier::StartPostRestoreVerification,
|
| + base::Bind(&OAuth2LoginVerifier::StartAuthCookiesVerification,
|
| AsWeakPtr()),
|
| base::Bind(&Delegate::OnListAccountsFailure,
|
| base::Unretained(delegate_)));
|
| @@ -268,4 +266,27 @@ void OAuth2LoginVerifier::RetryOnError(const char* operation_id,
|
| error_handler.Run(IsConnectionOrServiceError(error));
|
| }
|
|
|
| +bool OAuth2LoginVerifier::DelayNetworkCall(const base::Closure& callback) {
|
| + // Delay the verification if the network is not connected or on a captive
|
| + // portal.
|
| + const NetworkState* default_network =
|
| + NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
|
| + NetworkPortalDetector* detector = NetworkPortalDetector::Get();
|
| + if (!default_network ||
|
| + default_network->connection_state() == shill::kStatePortal ||
|
| + (detector && detector->GetCaptivePortalState(default_network).status !=
|
| + NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE)) {
|
| + // If network is offline, defer the token fetching until online.
|
| + LOG(WARNING) << "Network is offline. Deferring call.";
|
| + BrowserThread::PostDelayedTask(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + callback,
|
| + base::TimeDelta::FromMilliseconds(kRequestRestartDelay));
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|