Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "components/autofill/content/browser/wallet/wallet_signin_helper.h" | 5 #include "components/autofill/content/browser/wallet/wallet_signin_helper.h" |
| 6 | 6 |
| 7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 207 return; | 207 return; |
| 208 } | 208 } |
| 209 | 209 |
| 210 switch (state_) { | 210 switch (state_) { |
| 211 case USERNAME_FETCHING_USERINFO: /*FALLTHROUGH*/ | 211 case USERNAME_FETCHING_USERINFO: /*FALLTHROUGH*/ |
| 212 case PASSIVE_FETCHING_USERINFO: | 212 case PASSIVE_FETCHING_USERINFO: |
| 213 ProcessGetAccountInfoResponseAndFinish(); | 213 ProcessGetAccountInfoResponseAndFinish(); |
| 214 break; | 214 break; |
| 215 | 215 |
| 216 case PASSIVE_EXECUTING_SIGNIN: | 216 case PASSIVE_EXECUTING_SIGNIN: |
| 217 url_fetcher_.reset(); | 217 ProcessPassiveSignInResponseAndFetchUserName(); |
| 218 state_ = PASSIVE_FETCHING_USERINFO; | |
| 219 StartFetchingUserNameFromSession(); | |
| 220 break; | 218 break; |
| 221 | 219 |
| 222 case AUTOMATIC_EXECUTING_SIGNIN: | 220 case AUTOMATIC_EXECUTING_SIGNIN: |
| 223 state_ = IDLE; | 221 ProcessAutomaticSignInResponseAndFinish(); |
| 224 url_fetcher_.reset(); | |
| 225 delegate_->OnAutomaticSigninSuccess(username_); | |
| 226 break; | 222 break; |
| 227 | 223 |
| 228 default: | 224 default: |
| 229 NOTREACHED() << "unexpected state_=" << state_; | 225 NOTREACHED() << "unexpected state_=" << state_; |
| 230 } | 226 } |
| 231 } | 227 } |
| 232 | 228 |
| 233 void WalletSigninHelper::StartFetchingUserNameFromSession() { | 229 void WalletSigninHelper::StartFetchingUserNameFromSession() { |
| 234 DCHECK(!gaia_fetcher_); | 230 DCHECK(!gaia_fetcher_); |
| 235 const int random_number = static_cast<int>(base::RandUint64() % INT_MAX); | 231 const int random_number = static_cast<int>(base::RandUint64() % INT_MAX); |
| 236 url_fetcher_.reset( | 232 url_fetcher_.reset( |
| 237 net::URLFetcher::Create( | 233 net::URLFetcher::Create( |
| 238 0, | 234 0, |
| 239 GURL(base::StringPrintf(kGetAccountInfoUrlFormat, random_number)), | 235 GURL(base::StringPrintf(kGetAccountInfoUrlFormat, random_number)), |
| 240 net::URLFetcher::GET, | 236 net::URLFetcher::GET, |
| 241 this)); | 237 this)); |
| 242 url_fetcher_->SetRequestContext(getter_); | 238 url_fetcher_->SetRequestContext(getter_); |
| 243 url_fetcher_->Start(); // This will result in OnURLFetchComplete callback. | 239 url_fetcher_->Start(); // This will result in OnURLFetchComplete callback. |
| 244 } | 240 } |
| 245 | 241 |
| 242 void WalletSigninHelper::ProcessPassiveSignInResponseAndFetchUserName() { | |
| 243 GoogleServiceAuthError error(GoogleServiceAuthError::AuthErrorNone()); | |
| 244 if (!ParsePassiveSignInResponse(&error)) { | |
| 245 OnServiceError(error); | |
| 246 return; | |
| 247 } | |
| 248 | |
| 249 url_fetcher_.reset(); | |
| 250 state_ = PASSIVE_FETCHING_USERINFO; | |
| 251 StartFetchingUserNameFromSession(); | |
| 252 } | |
| 253 | |
| 254 void WalletSigninHelper::ProcessAutomaticSignInResponseAndFinish() { | |
| 255 GoogleServiceAuthError error(GoogleServiceAuthError::AuthErrorNone()); | |
| 256 if (!ParsePassiveSignInResponse(&error)) { | |
| 257 OnServiceError(error); | |
| 258 return; | |
| 259 } | |
| 260 | |
| 261 url_fetcher_.reset(); | |
| 262 state_ = IDLE; | |
| 263 delegate_->OnAutomaticSigninSuccess(username_); | |
| 264 } | |
| 265 | |
| 246 void WalletSigninHelper::ProcessGetAccountInfoResponseAndFinish() { | 266 void WalletSigninHelper::ProcessGetAccountInfoResponseAndFinish() { |
| 247 std::string email; | 267 std::string email; |
| 248 if (!ParseGetAccountInfoResponse(url_fetcher_.get(), &email)) { | 268 if (!ParseGetAccountInfoResponse(url_fetcher_.get(), &email)) { |
| 249 LOG(ERROR) << "failed to get the user email"; | 269 LOG(ERROR) << "failed to get the user email"; |
| 250 OnOtherError(); | 270 OnOtherError(); |
| 251 return; | 271 return; |
| 252 } | 272 } |
| 253 | 273 |
| 254 username_ = email; | 274 username_ = email; |
| 255 const State finishing_state = state_; | 275 const State finishing_state = state_; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 287 | 307 |
| 288 DictionaryValue* dict = static_cast<DictionaryValue*>(value.get()); | 308 DictionaryValue* dict = static_cast<DictionaryValue*>(value.get()); |
| 289 if (!dict->GetStringWithoutPathExpansion("email", email)) { | 309 if (!dict->GetStringWithoutPathExpansion("email", email)) { |
| 290 LOG(ERROR) << "no email in JSON response"; | 310 LOG(ERROR) << "no email in JSON response"; |
| 291 return false; | 311 return false; |
| 292 } | 312 } |
| 293 | 313 |
| 294 return !email->empty(); | 314 return !email->empty(); |
| 295 } | 315 } |
| 296 | 316 |
| 317 bool WalletSigninHelper::ParsePassiveSignInResponse( | |
| 318 GoogleServiceAuthError* error) { | |
|
ahutter
2013/06/13 23:52:10
Should you DCHECK(error)?
aruslan
2013/06/18 21:21:47
Done.
| |
| 319 std::string data; | |
| 320 if (!url_fetcher_->GetResponseAsString(&data)) { | |
| 321 LOG(ERROR) << "failed to GetResponseAsString"; | |
| 322 *error = GoogleServiceAuthError::AuthErrorNone(); | |
| 323 return false; | |
| 324 } | |
| 325 | |
| 326 if (data != "YES") { | |
| 327 *error = | |
| 328 GoogleServiceAuthError(GoogleServiceAuthError::USER_NOT_SIGNED_UP); | |
| 329 return false; | |
| 330 } | |
| 331 | |
| 332 return true; | |
| 333 } | |
| 334 | |
| 297 } // namespace wallet | 335 } // namespace wallet |
| 298 } // namespace autofill | 336 } // namespace autofill |
| OLD | NEW |