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

Unified Diff: components/autofill/core/browser/wallet/real_pan_wallet_client.cc

Issue 966943004: getrealpan - Handle 401 Unauthorized (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: also remove accept-encoding header Created 5 years, 10 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
« no previous file with comments | « components/autofill/core/browser/wallet/real_pan_wallet_client.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/core/browser/wallet/real_pan_wallet_client.cc
diff --git a/components/autofill/core/browser/wallet/real_pan_wallet_client.cc b/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
index 5020a472a63dbd35c3986b8d8c4dc2da2bea8840..37083c82155ce0503f237869e3537e1ee8c3c99e 100644
--- a/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
+++ b/components/autofill/core/browser/wallet/real_pan_wallet_client.cc
@@ -86,6 +86,7 @@ RealPanWalletClient::RealPanWalletClient(
: OAuth2TokenService::Consumer(kTokenServiceConsumerId),
context_getter_(context_getter),
delegate_(delegate),
+ has_retried_authorization_(false),
weak_ptr_factory_(this) {
DCHECK(delegate);
}
@@ -95,45 +96,20 @@ RealPanWalletClient::~RealPanWalletClient() {
void RealPanWalletClient::Prepare() {
if (access_token_.empty())
- StartTokenFetch();
+ StartTokenFetch(false);
}
void RealPanWalletClient::UnmaskCard(
const CreditCard& card,
const CardUnmaskDelegate::UnmaskResponse& response) {
DCHECK_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type());
+ card_ = card;
+ response_ = response;
+ has_retried_authorization_ = false;
- request_.reset(net::URLFetcher::Create(
- 0, GetUnmaskCardRequestUrl(), net::URLFetcher::POST, this));
- request_->SetRequestContext(context_getter_.get());
- request_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
- net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DISABLE_CACHE);
-
- base::DictionaryValue request_dict;
- request_dict.SetString("encrypted_cvc", "__param:s7e_13_cvc");
- request_dict.SetString("credit_card_id", card.server_id());
- request_dict.SetString("risk_data_base64", response.risk_data);
- request_dict.Set("context", make_scoped_ptr(new base::DictionaryValue()));
-
- int value = 0;
- if (base::StringToInt(response.exp_month, &value))
- request_dict.SetInteger("expiration_month", value);
- if (base::StringToInt(response.exp_year, &value))
- request_dict.SetInteger("expiration_year", value);
-
- std::string json_request;
- base::JSONWriter::Write(&request_dict, &json_request);
- std::string post_body =
- base::StringPrintf(kUnmaskCardRequestFormat,
- net::EscapeUrlEncodedData(json_request, true).c_str(),
- net::EscapeUrlEncodedData(
- base::UTF16ToASCII(response.cvc), true).c_str());
- request_->SetUploadData("application/x-www-form-urlencoded", post_body);
- request_->AddExtraRequestHeader(
- net::HttpRequestHeaders::kAcceptEncoding + std::string(": chunked;q=0"));
-
+ CreateRequest();
if (access_token_.empty())
- StartTokenFetch();
+ StartTokenFetch(false);
else
SetOAuth2TokenAndStartRequest();
}
@@ -179,6 +155,16 @@ void RealPanWalletClient::OnURLFetchComplete(const net::URLFetcher* source) {
break;
}
+ case net::HTTP_UNAUTHORIZED: {
+ if (has_retried_authorization_)
+ break;
+ has_retried_authorization_ = true;
+
+ CreateRequest();
+ StartTokenFetch(true);
+ return;
+ }
+
// Handle anything else as a generic error.
default:
break;
@@ -222,17 +208,49 @@ void RealPanWalletClient::OnGetTokenFailure(
access_token_request_.reset();
}
-void RealPanWalletClient::StartTokenFetch() {
- // Don't cancel outstanding requests.
- if (access_token_request_)
- return;
+void RealPanWalletClient::CreateRequest() {
+ request_.reset(net::URLFetcher::Create(
+ 0, GetUnmaskCardRequestUrl(), net::URLFetcher::POST, this));
+ request_->SetRequestContext(context_getter_.get());
+ request_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
+ net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DISABLE_CACHE);
- // However, do clear old tokens.
- access_token_.clear();
+ base::DictionaryValue request_dict;
+ request_dict.SetString("encrypted_cvc", "__param:s7e_13_cvc");
+ request_dict.SetString("credit_card_id", card_.server_id());
+ request_dict.SetString("risk_data_base64", response_.risk_data);
+ request_dict.Set("context", make_scoped_ptr(new base::DictionaryValue()));
+
+ int value = 0;
+ if (base::StringToInt(response_.exp_month, &value))
+ request_dict.SetInteger("expiration_month", value);
+ if (base::StringToInt(response_.exp_year, &value))
+ request_dict.SetInteger("expiration_year", value);
+
+ std::string json_request;
+ base::JSONWriter::Write(&request_dict, &json_request);
+ std::string post_body =
+ base::StringPrintf(kUnmaskCardRequestFormat,
+ net::EscapeUrlEncodedData(json_request, true).c_str(),
+ net::EscapeUrlEncodedData(
+ base::UTF16ToASCII(response_.cvc), true).c_str());
+ request_->SetUploadData("application/x-www-form-urlencoded", post_body);
+}
+
+void RealPanWalletClient::StartTokenFetch(bool invalidate_old) {
+ // We're still waiting for the last request to come back.
+ if (!invalidate_old && access_token_request_)
+ return;
OAuth2TokenService::ScopeSet wallet_scopes;
wallet_scopes.insert(kWalletOAuth2Scope);
IdentityProvider* identity = delegate_->GetIdentityProvider();
+ if (invalidate_old) {
+ DCHECK(!access_token_.empty());
+ identity->GetTokenService()->InvalidateToken(
+ identity->GetActiveAccountId(), wallet_scopes, access_token_);
+ }
+ access_token_.clear();
access_token_request_ = identity->GetTokenService()->StartRequest(
identity->GetActiveAccountId(), wallet_scopes, this);
}
« no previous file with comments | « components/autofill/core/browser/wallet/real_pan_wallet_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698