| Index: components/autofill/content/browser/wallet/wallet_client.cc
|
| diff --git a/components/autofill/content/browser/wallet/wallet_client.cc b/components/autofill/content/browser/wallet/wallet_client.cc
|
| index 30fd6186abc7d722691239ed852b332db559d0f7..b00a4f0fea7ca824b07ac648763ba24c84bf8b85 100644
|
| --- a/components/autofill/content/browser/wallet/wallet_client.cc
|
| +++ b/components/autofill/content/browser/wallet/wallet_client.cc
|
| @@ -283,17 +283,6 @@ void WalletClient::AcceptLegalDocuments(
|
| void WalletClient::AuthenticateInstrument(
|
| const std::string& instrument_id,
|
| const std::string& card_verification_number) {
|
| - if (HasRequestInProgress()) {
|
| - pending_requests_.push(base::Bind(&WalletClient::AuthenticateInstrument,
|
| - base::Unretained(this),
|
| - instrument_id,
|
| - card_verification_number));
|
| - return;
|
| - }
|
| -
|
| - DCHECK_EQ(NO_PENDING_REQUEST, request_type_);
|
| - request_type_ = AUTHENTICATE_INSTRUMENT;
|
| -
|
| base::DictionaryValue request_dict;
|
| request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey());
|
| request_dict.SetString(kRiskParamsKey, delegate_->GetRiskData());
|
| @@ -312,20 +301,11 @@ void WalletClient::AuthenticateInstrument(
|
|
|
| MakeWalletRequest(GetAuthenticateInstrumentUrl(user_index_),
|
| post_body,
|
| - kFormEncodedMimeType);
|
| + kFormEncodedMimeType,
|
| + AUTHENTICATE_INSTRUMENT);
|
| }
|
|
|
| void WalletClient::GetFullWallet(const FullWalletRequest& full_wallet_request) {
|
| - if (HasRequestInProgress()) {
|
| - pending_requests_.push(base::Bind(&WalletClient::GetFullWallet,
|
| - base::Unretained(this),
|
| - full_wallet_request));
|
| - return;
|
| - }
|
| -
|
| - DCHECK_EQ(NO_PENDING_REQUEST, request_type_);
|
| - request_type_ = GET_FULL_WALLET;
|
| -
|
| base::DictionaryValue request_dict;
|
| request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey());
|
| request_dict.SetString(kRiskParamsKey, delegate_->GetRiskData());
|
| @@ -369,22 +349,16 @@ void WalletClient::GetFullWallet(const FullWalletRequest& full_wallet_request) {
|
|
|
| MakeWalletRequest(GetGetFullWalletUrl(user_index_),
|
| post_body,
|
| - kFormEncodedMimeType);
|
| + kFormEncodedMimeType,
|
| + GET_FULL_WALLET);
|
| }
|
|
|
| -void WalletClient::SaveToWallet(scoped_ptr<Instrument> instrument,
|
| - scoped_ptr<Address> address) {
|
| +void WalletClient::SaveToWallet(
|
| + scoped_ptr<Instrument> instrument,
|
| + scoped_ptr<Address> address,
|
| + const WalletItems::MaskedInstrument* reference_instrument,
|
| + const Address* reference_address) {
|
| DCHECK(instrument || address);
|
| - if (HasRequestInProgress()) {
|
| - pending_requests_.push(base::Bind(&WalletClient::SaveToWallet,
|
| - base::Unretained(this),
|
| - base::Passed(&instrument),
|
| - base::Passed(&address)));
|
| - return;
|
| - }
|
| -
|
| - DCHECK_EQ(NO_PENDING_REQUEST, request_type_);
|
| - request_type_ = SAVE_TO_WALLET;
|
|
|
| base::DictionaryValue request_dict;
|
| request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey());
|
| @@ -402,17 +376,23 @@ void WalletClient::SaveToWallet(scoped_ptr<Instrument> instrument,
|
| card_verification_number = net::EscapeUrlEncodedData(
|
| UTF16ToUTF8(instrument->card_verification_number()), true);
|
|
|
| - if (instrument->object_id().empty()) {
|
| + if (!reference_instrument) {
|
| request_dict.Set(kInstrumentKey, instrument->ToDictionary().release());
|
| request_dict.SetString(kInstrumentPhoneNumberKey,
|
| instrument->address()->phone_number());
|
| } else {
|
| - DCHECK(instrument->address() ||
|
| - (instrument->expiration_month() > 0 &&
|
| - instrument->expiration_year() > 0));
|
| + DCHECK(!reference_instrument->object_id().empty());
|
| +
|
| + int new_month = instrument->expiration_month();
|
| + int new_year = instrument->expiration_year();
|
| + bool expiration_date_changed =
|
| + new_month != reference_instrument->expiration_month() ||
|
| + new_year != reference_instrument->expiration_year();
|
| +
|
| + DCHECK(instrument->address() || expiration_date_changed);
|
|
|
| request_dict.SetString(kUpgradedInstrumentIdKey,
|
| - instrument->object_id());
|
| + reference_instrument->object_id());
|
|
|
| if (instrument->address()) {
|
| request_dict.SetString(kInstrumentPhoneNumberKey,
|
| @@ -422,8 +402,8 @@ void WalletClient::SaveToWallet(scoped_ptr<Instrument> instrument,
|
| instrument->address()->ToDictionaryWithoutID().release());
|
| }
|
|
|
| - if (instrument->expiration_month() > 0 &&
|
| - instrument->expiration_year() > 0) {
|
| + if (expiration_date_changed) {
|
| + // Updating expiration date requires a CVC.
|
| DCHECK(!instrument->card_verification_number().empty());
|
| request_dict.SetInteger(kInstrumentExpMonthKey,
|
| instrument->expiration_month());
|
| @@ -436,6 +416,10 @@ void WalletClient::SaveToWallet(scoped_ptr<Instrument> instrument,
|
| }
|
| }
|
| if (address) {
|
| + if (reference_address) {
|
| + address->set_object_id(reference_address->object_id());
|
| + DCHECK(!address->object_id().empty());
|
| + }
|
| request_dict.Set(kShippingAddressKey,
|
| address->ToDictionaryWithID().release());
|
| }
|
| @@ -459,24 +443,17 @@ void WalletClient::SaveToWallet(scoped_ptr<Instrument> instrument,
|
| }
|
| MakeWalletRequest(GetSaveToWalletUrl(user_index_),
|
| post_body,
|
| - kFormEncodedMimeType);
|
| + kFormEncodedMimeType,
|
| + SAVE_TO_WALLET);
|
| } else {
|
| MakeWalletRequest(GetSaveToWalletNoEscrowUrl(user_index_),
|
| json_payload,
|
| - kJsonMimeType);
|
| + kJsonMimeType,
|
| + SAVE_TO_WALLET);
|
| }
|
| }
|
|
|
| void WalletClient::GetWalletItems() {
|
| - if (HasRequestInProgress()) {
|
| - pending_requests_.push(base::Bind(&WalletClient::GetWalletItems,
|
| - base::Unretained(this)));
|
| - return;
|
| - }
|
| -
|
| - DCHECK_EQ(NO_PENDING_REQUEST, request_type_);
|
| - request_type_ = GET_WALLET_ITEMS;
|
| -
|
| base::DictionaryValue request_dict;
|
| request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey());
|
| request_dict.SetString(kMerchantDomainKey,
|
| @@ -491,7 +468,8 @@ void WalletClient::GetWalletItems() {
|
|
|
| MakeWalletRequest(GetGetWalletItemsUrl(user_index_),
|
| post_body,
|
| - kJsonMimeType);
|
| + kJsonMimeType,
|
| + GET_WALLET_ITEMS);
|
| }
|
|
|
| bool WalletClient::HasRequestInProgress() const {
|
| @@ -509,17 +487,6 @@ void WalletClient::CancelRequests() {
|
| void WalletClient::DoAcceptLegalDocuments(
|
| const std::vector<std::string>& document_ids,
|
| const std::string& google_transaction_id) {
|
| - if (HasRequestInProgress()) {
|
| - pending_requests_.push(base::Bind(&WalletClient::DoAcceptLegalDocuments,
|
| - base::Unretained(this),
|
| - document_ids,
|
| - google_transaction_id));
|
| - return;
|
| - }
|
| -
|
| - DCHECK_EQ(NO_PENDING_REQUEST, request_type_);
|
| - request_type_ = ACCEPT_LEGAL_DOCUMENTS;
|
| -
|
| base::DictionaryValue request_dict;
|
| request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey());
|
| request_dict.SetString(kGoogleTransactionIdKey, google_transaction_id);
|
| @@ -538,13 +505,26 @@ void WalletClient::DoAcceptLegalDocuments(
|
|
|
| MakeWalletRequest(GetAcceptLegalDocumentsUrl(user_index_),
|
| post_body,
|
| - kJsonMimeType);
|
| + kJsonMimeType,
|
| + ACCEPT_LEGAL_DOCUMENTS);
|
| }
|
|
|
| void WalletClient::MakeWalletRequest(const GURL& url,
|
| const std::string& post_body,
|
| - const std::string& mime_type) {
|
| - DCHECK(!HasRequestInProgress());
|
| + const std::string& mime_type,
|
| + RequestType request_type) {
|
| + if (HasRequestInProgress()) {
|
| + pending_requests_.push(base::Bind(&WalletClient::MakeWalletRequest,
|
| + base::Unretained(this),
|
| + url,
|
| + post_body,
|
| + mime_type,
|
| + request_type));
|
| + return;
|
| + }
|
| +
|
| + DCHECK_EQ(request_type_, NO_PENDING_REQUEST);
|
| + request_type_ = request_type;
|
|
|
| request_.reset(net::URLFetcher::Create(
|
| 0, url, net::URLFetcher::POST, this));
|
|
|