| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/login/oauth2_login_verifier.h" | 5 #include "chrome/browser/chromeos/login/oauth2_login_verifier.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 gaia_fetcher_.reset( | 100 gaia_fetcher_.reset( |
| 101 new GaiaAuthFetcher(this, | 101 new GaiaAuthFetcher(this, |
| 102 std::string(GaiaConstants::kChromeOSSource), | 102 std::string(GaiaConstants::kChromeOSSource), |
| 103 user_request_context_.get())); | 103 user_request_context_.get())); |
| 104 gaia_fetcher_->StartTokenFetchForUberAuthExchange(access_token_); | 104 gaia_fetcher_->StartTokenFetchForUberAuthExchange(access_token_); |
| 105 } | 105 } |
| 106 | 106 |
| 107 | 107 |
| 108 void OAuth2LoginVerifier::OnUberAuthTokenSuccess( | 108 void OAuth2LoginVerifier::OnUberAuthTokenSuccess( |
| 109 const std::string& uber_token) { | 109 const std::string& uber_token) { |
| 110 LOG(INFO) << "OAuthLogin(uber_token) successful!"; | 110 VLOG(1) << "OAuthLogin(uber_token) successful!"; |
| 111 retry_count_ = 0; | 111 retry_count_ = 0; |
| 112 gaia_token_ = uber_token; | 112 gaia_token_ = uber_token; |
| 113 StartMergeSession(); | 113 StartMergeSession(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 void OAuth2LoginVerifier::OnUberAuthTokenFailure( | 116 void OAuth2LoginVerifier::OnUberAuthTokenFailure( |
| 117 const GoogleServiceAuthError& error) { | 117 const GoogleServiceAuthError& error) { |
| 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 119 LOG(WARNING) << "OAuthLogin(uber_token) failed," | 119 LOG(WARNING) << "OAuthLogin(uber_token) failed," |
| 120 << " error: " << error.state(); | 120 << " error: " << error.state(); |
| 121 RetryOnError("OAuthLoginUberToken", error, | 121 RetryOnError("OAuthLoginUberToken", error, |
| 122 base::Bind(&OAuth2LoginVerifier::StartOAuthLoginForUberToken, | 122 base::Bind(&OAuth2LoginVerifier::StartOAuthLoginForUberToken, |
| 123 AsWeakPtr()), | 123 AsWeakPtr()), |
| 124 base::Bind(&Delegate::OnOAuthLoginFailure, | 124 base::Bind(&Delegate::OnOAuthLoginFailure, |
| 125 base::Unretained(delegate_))); | 125 base::Unretained(delegate_))); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void OAuth2LoginVerifier::StartOAuthLoginForGaiaCredentials() { | 128 void OAuth2LoginVerifier::StartOAuthLoginForGaiaCredentials() { |
| 129 // No service will fetch us uber auth token. | 129 // No service will fetch us uber auth token. |
| 130 gaia_fetcher_.reset( | 130 gaia_fetcher_.reset( |
| 131 new GaiaAuthFetcher(this, | 131 new GaiaAuthFetcher(this, |
| 132 std::string(GaiaConstants::kChromeOSSource), | 132 std::string(GaiaConstants::kChromeOSSource), |
| 133 user_request_context_.get())); | 133 user_request_context_.get())); |
| 134 gaia_fetcher_->StartOAuthLogin(access_token_, EmptyString()); | 134 gaia_fetcher_->StartOAuthLogin(access_token_, EmptyString()); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void OAuth2LoginVerifier::OnClientLoginSuccess( | 137 void OAuth2LoginVerifier::OnClientLoginSuccess( |
| 138 const ClientLoginResult& gaia_credentials) { | 138 const ClientLoginResult& gaia_credentials) { |
| 139 LOG(INFO) << "OAuthLogin(SID+LSID) successful!"; | 139 VLOG(1) << "OAuthLogin(SID+LSID) successful!"; |
| 140 retry_count_ = 0; | 140 retry_count_ = 0; |
| 141 delegate_->OnOAuthLoginSuccess(gaia_credentials); | 141 delegate_->OnOAuthLoginSuccess(gaia_credentials); |
| 142 } | 142 } |
| 143 | 143 |
| 144 void OAuth2LoginVerifier::OnClientLoginFailure( | 144 void OAuth2LoginVerifier::OnClientLoginFailure( |
| 145 const GoogleServiceAuthError& error) { | 145 const GoogleServiceAuthError& error) { |
| 146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 147 LOG(WARNING) << "OAuthLogin(SID+LSID failed)," | 147 LOG(WARNING) << "OAuthLogin(SID+LSID failed)," |
| 148 << " error: " << error.state(); | 148 << " error: " << error.state(); |
| 149 RetryOnError( | 149 RetryOnError( |
| 150 "OAuthLoginGaiaCred", error, | 150 "OAuthLoginGaiaCred", error, |
| 151 base::Bind(&OAuth2LoginVerifier::StartOAuthLoginForGaiaCredentials, | 151 base::Bind(&OAuth2LoginVerifier::StartOAuthLoginForGaiaCredentials, |
| 152 AsWeakPtr()), | 152 AsWeakPtr()), |
| 153 base::Bind(&Delegate::OnOAuthLoginFailure, | 153 base::Bind(&Delegate::OnOAuthLoginFailure, |
| 154 base::Unretained(delegate_))); | 154 base::Unretained(delegate_))); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void OAuth2LoginVerifier::StartMergeSession() { | 157 void OAuth2LoginVerifier::StartMergeSession() { |
| 158 DCHECK(!gaia_token_.empty()); | 158 DCHECK(!gaia_token_.empty()); |
| 159 gaia_fetcher_.reset( | 159 gaia_fetcher_.reset( |
| 160 new GaiaAuthFetcher(this, | 160 new GaiaAuthFetcher(this, |
| 161 std::string(GaiaConstants::kChromeOSSource), | 161 std::string(GaiaConstants::kChromeOSSource), |
| 162 user_request_context_.get())); | 162 user_request_context_.get())); |
| 163 gaia_fetcher_->StartMergeSession(gaia_token_); | 163 gaia_fetcher_->StartMergeSession(gaia_token_); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void OAuth2LoginVerifier::OnMergeSessionSuccess(const std::string& data) { | 166 void OAuth2LoginVerifier::OnMergeSessionSuccess(const std::string& data) { |
| 167 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 167 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 168 LOG(INFO) << "MergeSession successful."; | 168 VLOG(1) << "MergeSession successful."; |
| 169 delegate_->OnSessionMergeSuccess(); | 169 delegate_->OnSessionMergeSuccess(); |
| 170 // Get GAIA credentials needed to kick off TokenService and friends. | 170 // Get GAIA credentials needed to kick off OAuth2TokenService and friends. |
| 171 StartOAuthLoginForGaiaCredentials(); | 171 StartOAuthLoginForGaiaCredentials(); |
| 172 } | 172 } |
| 173 | 173 |
| 174 void OAuth2LoginVerifier::OnMergeSessionFailure( | 174 void OAuth2LoginVerifier::OnMergeSessionFailure( |
| 175 const GoogleServiceAuthError& error) { | 175 const GoogleServiceAuthError& error) { |
| 176 LOG(WARNING) << "Failed MergeSession request," | 176 LOG(WARNING) << "Failed MergeSession request," |
| 177 << " error: " << error.state(); | 177 << " error: " << error.state(); |
| 178 // If MergeSession from GAIA service token fails, retry the session restore | 178 // If MergeSession from GAIA service token fails, retry the session restore |
| 179 // from OAuth2 refresh token. If that failed too, signal the delegate. | 179 // from OAuth2 refresh token. If that failed too, signal the delegate. |
| 180 RetryOnError( | 180 RetryOnError( |
| 181 "MergeSession", | 181 "MergeSession", |
| 182 error, | 182 error, |
| 183 base::Bind(&OAuth2LoginVerifier::StartMergeSession, | 183 base::Bind(&OAuth2LoginVerifier::StartMergeSession, |
| 184 AsWeakPtr()), | 184 AsWeakPtr()), |
| 185 base::Bind(&Delegate::OnSessionMergeFailure, | 185 base::Bind(&Delegate::OnSessionMergeFailure, |
| 186 base::Unretained(delegate_))); | 186 base::Unretained(delegate_))); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void OAuth2LoginVerifier::OnGetTokenSuccess( | 189 void OAuth2LoginVerifier::OnGetTokenSuccess( |
| 190 const OAuth2TokenService::Request* request, | 190 const OAuth2TokenService::Request* request, |
| 191 const std::string& access_token, | 191 const std::string& access_token, |
| 192 const base::Time& expiration_time) { | 192 const base::Time& expiration_time) { |
| 193 DCHECK_EQ(login_token_request_.get(), request); | 193 DCHECK_EQ(login_token_request_.get(), request); |
| 194 login_token_request_.reset(); | 194 login_token_request_.reset(); |
| 195 | 195 |
| 196 LOG(INFO) << "Got OAuth2 access token!"; | 196 VLOG(1) << "Got OAuth2 access token!"; |
| 197 retry_count_ = 0; | 197 retry_count_ = 0; |
| 198 access_token_ = access_token; | 198 access_token_ = access_token; |
| 199 StartOAuthLoginForUberToken(); | 199 StartOAuthLoginForUberToken(); |
| 200 } | 200 } |
| 201 | 201 |
| 202 void OAuth2LoginVerifier::OnGetTokenFailure( | 202 void OAuth2LoginVerifier::OnGetTokenFailure( |
| 203 const OAuth2TokenService::Request* request, | 203 const OAuth2TokenService::Request* request, |
| 204 const GoogleServiceAuthError& error) { | 204 const GoogleServiceAuthError& error) { |
| 205 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 205 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 206 DCHECK_EQ(login_token_request_.get(), request); | 206 DCHECK_EQ(login_token_request_.get(), request); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 236 << operation_id; | 236 << operation_id; |
| 237 UMA_HISTOGRAM_ENUMERATION( | 237 UMA_HISTOGRAM_ENUMERATION( |
| 238 base::StringPrintf("OAuth2Login.%sFailure", operation_id), | 238 base::StringPrintf("OAuth2Login.%sFailure", operation_id), |
| 239 error.state(), | 239 error.state(), |
| 240 GoogleServiceAuthError::NUM_STATES); | 240 GoogleServiceAuthError::NUM_STATES); |
| 241 | 241 |
| 242 error_handler.Run(IsConnectionOrServiceError(error)); | 242 error_handler.Run(IsConnectionOrServiceError(error)); |
| 243 } | 243 } |
| 244 | 244 |
| 245 } // namespace chromeos | 245 } // namespace chromeos |
| OLD | NEW |