| 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_client.h" | 5 #include "components/autofill/content/browser/wallet/wallet_client.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" | 
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" | 
| 10 #include "base/logging.h" | 10 #include "base/logging.h" | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 45 const size_t kOneTimePadLength = 6; | 45 const size_t kOneTimePadLength = 6; | 
| 46 | 46 | 
| 47 // The maximum number of bits in the one time pad that the server is willing to | 47 // The maximum number of bits in the one time pad that the server is willing to | 
| 48 // accept. | 48 // accept. | 
| 49 const size_t kMaxBits = 56; | 49 const size_t kMaxBits = 56; | 
| 50 | 50 | 
| 51 // The minimum number of bits in the one time pad that the server is willing to | 51 // The minimum number of bits in the one time pad that the server is willing to | 
| 52 // accept. | 52 // accept. | 
| 53 const size_t kMinBits = 40; | 53 const size_t kMinBits = 40; | 
| 54 | 54 | 
| 55 std::string AutocheckoutStatusToString(AutocheckoutStatus status) { |  | 
| 56   switch (status) { |  | 
| 57     case MISSING_FIELDMAPPING: |  | 
| 58       return "MISSING_FIELDMAPPING"; |  | 
| 59     case MISSING_ADVANCE: |  | 
| 60       return "MISSING_ADVANCE"; |  | 
| 61     case MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING: |  | 
| 62       return "MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING"; |  | 
| 63     case MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING: |  | 
| 64       return "MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING"; |  | 
| 65     case CANNOT_PROCEED: |  | 
| 66       return "CANNOT_PROCEED"; |  | 
| 67     case SUCCESS: |  | 
| 68       // SUCCESS cannot be sent to the server as it will result in a failure. |  | 
| 69       NOTREACHED(); |  | 
| 70       return "ERROR"; |  | 
| 71     case AUTOCHECKOUT_STATUS_NUM_STATUS: |  | 
| 72       NOTREACHED(); |  | 
| 73   } |  | 
| 74   NOTREACHED(); |  | 
| 75   return "NOT_POSSIBLE"; |  | 
| 76 } |  | 
| 77 |  | 
| 78 std::string DialogTypeToFeatureString(autofill::DialogType dialog_type) { | 55 std::string DialogTypeToFeatureString(autofill::DialogType dialog_type) { | 
| 79   switch (dialog_type) { | 56   switch (dialog_type) { | 
| 80     case DIALOG_TYPE_REQUEST_AUTOCOMPLETE: | 57     case DIALOG_TYPE_REQUEST_AUTOCOMPLETE: | 
| 81       return "REQUEST_AUTOCOMPLETE"; | 58       return "REQUEST_AUTOCOMPLETE"; | 
| 82     case DIALOG_TYPE_AUTOCHECKOUT: | 59     case DIALOG_TYPE_AUTOCHECKOUT: | 
| 83       return "AUTOCHECKOUT"; | 60       return "AUTOCHECKOUT"; | 
| 84   } | 61   } | 
| 85   NOTREACHED(); | 62   NOTREACHED(); | 
| 86   return "NOT_POSSIBLE"; | 63   return "NOT_POSSIBLE"; | 
| 87 } | 64 } | 
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 261 const char kPhoneNumberRequired[] = "phone_number_required"; | 238 const char kPhoneNumberRequired[] = "phone_number_required"; | 
| 262 const char kReasonKey[] = "reason"; | 239 const char kReasonKey[] = "reason"; | 
| 263 const char kRiskCapabilitiesKey[] = "supported_risk_challenge"; | 240 const char kRiskCapabilitiesKey[] = "supported_risk_challenge"; | 
| 264 const char kRiskParamsKey[] = "risk_params"; | 241 const char kRiskParamsKey[] = "risk_params"; | 
| 265 const char kSelectedAddressIdKey[] = "selected_address_id"; | 242 const char kSelectedAddressIdKey[] = "selected_address_id"; | 
| 266 const char kSelectedInstrumentIdKey[] = "selected_instrument_id"; | 243 const char kSelectedInstrumentIdKey[] = "selected_instrument_id"; | 
| 267 const char kSessionMaterialKey[] = "session_material"; | 244 const char kSessionMaterialKey[] = "session_material"; | 
| 268 const char kShippingAddressIdKey[] = "shipping_address_id"; | 245 const char kShippingAddressIdKey[] = "shipping_address_id"; | 
| 269 const char kShippingAddressKey[] = "shipping_address"; | 246 const char kShippingAddressKey[] = "shipping_address"; | 
| 270 const char kShippingAddressRequired[] = "shipping_address_required"; | 247 const char kShippingAddressRequired[] = "shipping_address_required"; | 
| 271 const char kAutocheckoutStepsKey[] = "steps"; |  | 
| 272 const char kSuccessKey[] = "success"; | 248 const char kSuccessKey[] = "success"; | 
| 273 const char kUpgradedBillingAddressKey[] = "upgraded_billing_address"; | 249 const char kUpgradedBillingAddressKey[] = "upgraded_billing_address"; | 
| 274 const char kUpgradedInstrumentIdKey[] = "upgraded_instrument_id"; | 250 const char kUpgradedInstrumentIdKey[] = "upgraded_instrument_id"; | 
| 275 const char kUseMinimalAddresses[] = "use_minimal_addresses"; | 251 const char kUseMinimalAddresses[] = "use_minimal_addresses"; | 
| 276 | 252 | 
| 277 }  // namespace | 253 }  // namespace | 
| 278 | 254 | 
| 279 WalletClient::FullWalletRequest::FullWalletRequest( | 255 WalletClient::FullWalletRequest::FullWalletRequest( | 
| 280     const std::string& instrument_id, | 256     const std::string& instrument_id, | 
| 281     const std::string& address_id, | 257     const std::string& address_id, | 
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 521                           delegate_->IsShippingAddressRequired()); | 497                           delegate_->IsShippingAddressRequired()); | 
| 522   request_dict.SetBoolean(kUseMinimalAddresses, false); | 498   request_dict.SetBoolean(kUseMinimalAddresses, false); | 
| 523   request_dict.SetBoolean(kPhoneNumberRequired, true); | 499   request_dict.SetBoolean(kPhoneNumberRequired, true); | 
| 524 | 500 | 
| 525   std::string post_body; | 501   std::string post_body; | 
| 526   base::JSONWriter::Write(&request_dict, &post_body); | 502   base::JSONWriter::Write(&request_dict, &post_body); | 
| 527 | 503 | 
| 528   MakeWalletRequest(GetGetWalletItemsUrl(), post_body, kJsonMimeType); | 504   MakeWalletRequest(GetGetWalletItemsUrl(), post_body, kJsonMimeType); | 
| 529 } | 505 } | 
| 530 | 506 | 
| 531 void WalletClient::SendAutocheckoutStatus( |  | 
| 532     AutocheckoutStatus status, |  | 
| 533     const GURL& source_url, |  | 
| 534     const std::vector<AutocheckoutStatistic>& latency_statistics, |  | 
| 535     const std::string& google_transaction_id) { |  | 
| 536   DVLOG(1) << "Sending Autocheckout Status: " << status |  | 
| 537            << " for: " << source_url; |  | 
| 538   if (HasRequestInProgress()) { |  | 
| 539     pending_requests_.push(base::Bind(&WalletClient::SendAutocheckoutStatus, |  | 
| 540                                       base::Unretained(this), |  | 
| 541                                       status, |  | 
| 542                                       source_url, |  | 
| 543                                       latency_statistics, |  | 
| 544                                       google_transaction_id)); |  | 
| 545     return; |  | 
| 546   } |  | 
| 547 |  | 
| 548   DCHECK_EQ(NO_PENDING_REQUEST, request_type_); |  | 
| 549   request_type_ = SEND_STATUS; |  | 
| 550 |  | 
| 551   base::DictionaryValue request_dict; |  | 
| 552   request_dict.SetString(kApiKeyKey, google_apis::GetAPIKey()); |  | 
| 553   bool success = status == SUCCESS; |  | 
| 554   request_dict.SetBoolean(kSuccessKey, success); |  | 
| 555   request_dict.SetString(kMerchantDomainKey, |  | 
| 556                          source_url.GetWithEmptyPath().spec()); |  | 
| 557   if (!success) |  | 
| 558     request_dict.SetString(kReasonKey, AutocheckoutStatusToString(status)); |  | 
| 559   if (!latency_statistics.empty()) { |  | 
| 560     scoped_ptr<base::ListValue> latency_statistics_json( |  | 
| 561         new base::ListValue()); |  | 
| 562     for (size_t i = 0; i < latency_statistics.size(); ++i) { |  | 
| 563       latency_statistics_json->Append( |  | 
| 564           latency_statistics[i].ToDictionary().release()); |  | 
| 565     } |  | 
| 566     request_dict.Set(kAutocheckoutStepsKey, |  | 
| 567                      latency_statistics_json.release()); |  | 
| 568   } |  | 
| 569   request_dict.SetString(kGoogleTransactionIdKey, google_transaction_id); |  | 
| 570 |  | 
| 571   std::string post_body; |  | 
| 572   base::JSONWriter::Write(&request_dict, &post_body); |  | 
| 573 |  | 
| 574   MakeWalletRequest(GetSendStatusUrl(), post_body, kJsonMimeType); |  | 
| 575 } |  | 
| 576 |  | 
| 577 bool WalletClient::HasRequestInProgress() const { | 507 bool WalletClient::HasRequestInProgress() const { | 
| 578   return request_; | 508   return request_; | 
| 579 } | 509 } | 
| 580 | 510 | 
| 581 void WalletClient::CancelRequests() { | 511 void WalletClient::CancelRequests() { | 
| 582   request_.reset(); | 512   request_.reset(); | 
| 583   request_type_ = NO_PENDING_REQUEST; | 513   request_type_ = NO_PENDING_REQUEST; | 
| 584   while (!pending_requests_.empty()) { | 514   while (!pending_requests_.empty()) { | 
| 585     pending_requests_.pop(); | 515     pending_requests_.pop(); | 
| 586   } | 516   } | 
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 721     // Anything else is an error. | 651     // Anything else is an error. | 
| 722     default: | 652     default: | 
| 723       request_type_ = NO_PENDING_REQUEST; | 653       request_type_ = NO_PENDING_REQUEST; | 
| 724       HandleWalletError(NETWORK_ERROR); | 654       HandleWalletError(NETWORK_ERROR); | 
| 725       return; | 655       return; | 
| 726   } | 656   } | 
| 727 | 657 | 
| 728   RequestType type = request_type_; | 658   RequestType type = request_type_; | 
| 729   request_type_ = NO_PENDING_REQUEST; | 659   request_type_ = NO_PENDING_REQUEST; | 
| 730 | 660 | 
| 731   if (!(type == ACCEPT_LEGAL_DOCUMENTS || type == SEND_STATUS) && | 661   if (type != ACCEPT_LEGAL_DOCUMENTS && !response_dict) { | 
| 732       !response_dict) { |  | 
| 733     HandleMalformedResponse(scoped_request.get()); | 662     HandleMalformedResponse(scoped_request.get()); | 
| 734     return; | 663     return; | 
| 735   } | 664   } | 
| 736 | 665 | 
| 737   switch (type) { | 666   switch (type) { | 
| 738     case ACCEPT_LEGAL_DOCUMENTS: | 667     case ACCEPT_LEGAL_DOCUMENTS: | 
| 739       delegate_->OnDidAcceptLegalDocuments(); | 668       delegate_->OnDidAcceptLegalDocuments(); | 
| 740       break; | 669       break; | 
| 741 | 670 | 
| 742     case AUTHENTICATE_INSTRUMENT: { | 671     case AUTHENTICATE_INSTRUMENT: { | 
| 743       std::string auth_result; | 672       std::string auth_result; | 
| 744       if (response_dict->GetString(kAuthResultKey, &auth_result)) { | 673       if (response_dict->GetString(kAuthResultKey, &auth_result)) { | 
| 745         std::string trimmed; | 674         std::string trimmed; | 
| 746         TrimWhitespaceASCII(auth_result, | 675         TrimWhitespaceASCII(auth_result, | 
| 747                             TRIM_ALL, | 676                             TRIM_ALL, | 
| 748                             &trimmed); | 677                             &trimmed); | 
| 749         delegate_->OnDidAuthenticateInstrument( | 678         delegate_->OnDidAuthenticateInstrument( | 
| 750             LowerCaseEqualsASCII(trimmed, "success")); | 679             LowerCaseEqualsASCII(trimmed, "success")); | 
| 751       } else { | 680       } else { | 
| 752         HandleMalformedResponse(scoped_request.get()); | 681         HandleMalformedResponse(scoped_request.get()); | 
| 753       } | 682       } | 
| 754       break; | 683       break; | 
| 755     } | 684     } | 
| 756 | 685 | 
| 757     case SEND_STATUS: |  | 
| 758       break; |  | 
| 759 |  | 
| 760     case GET_FULL_WALLET: { | 686     case GET_FULL_WALLET: { | 
| 761       scoped_ptr<FullWallet> full_wallet( | 687       scoped_ptr<FullWallet> full_wallet( | 
| 762           FullWallet::CreateFullWallet(*response_dict)); | 688           FullWallet::CreateFullWallet(*response_dict)); | 
| 763       if (full_wallet) { | 689       if (full_wallet) { | 
| 764         full_wallet->set_one_time_pad(one_time_pad_); | 690         full_wallet->set_one_time_pad(one_time_pad_); | 
| 765         LogRequiredActions(full_wallet->required_actions()); | 691         LogRequiredActions(full_wallet->required_actions()); | 
| 766         delegate_->OnDidGetFullWallet(full_wallet.Pass()); | 692         delegate_->OnDidGetFullWallet(full_wallet.Pass()); | 
| 767       } else { | 693       } else { | 
| 768         HandleMalformedResponse(scoped_request.get()); | 694         HandleMalformedResponse(scoped_request.get()); | 
| 769       } | 695       } | 
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 889     case ACCEPT_LEGAL_DOCUMENTS: | 815     case ACCEPT_LEGAL_DOCUMENTS: | 
| 890       return AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS; | 816       return AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS; | 
| 891     case AUTHENTICATE_INSTRUMENT: | 817     case AUTHENTICATE_INSTRUMENT: | 
| 892       return AutofillMetrics::AUTHENTICATE_INSTRUMENT; | 818       return AutofillMetrics::AUTHENTICATE_INSTRUMENT; | 
| 893     case GET_FULL_WALLET: | 819     case GET_FULL_WALLET: | 
| 894       return AutofillMetrics::GET_FULL_WALLET; | 820       return AutofillMetrics::GET_FULL_WALLET; | 
| 895     case GET_WALLET_ITEMS: | 821     case GET_WALLET_ITEMS: | 
| 896       return AutofillMetrics::GET_WALLET_ITEMS; | 822       return AutofillMetrics::GET_WALLET_ITEMS; | 
| 897     case SAVE_TO_WALLET: | 823     case SAVE_TO_WALLET: | 
| 898       return AutofillMetrics::SAVE_TO_WALLET; | 824       return AutofillMetrics::SAVE_TO_WALLET; | 
| 899     case SEND_STATUS: |  | 
| 900       return AutofillMetrics::SEND_STATUS; |  | 
| 901     case NO_PENDING_REQUEST: | 825     case NO_PENDING_REQUEST: | 
| 902       NOTREACHED(); | 826       NOTREACHED(); | 
| 903       return AutofillMetrics::UNKNOWN_API_CALL; | 827       return AutofillMetrics::UNKNOWN_API_CALL; | 
| 904   } | 828   } | 
| 905 | 829 | 
| 906   NOTREACHED(); | 830   NOTREACHED(); | 
| 907   return AutofillMetrics::UNKNOWN_API_CALL; | 831   return AutofillMetrics::UNKNOWN_API_CALL; | 
| 908 } | 832 } | 
| 909 | 833 | 
| 910 }  // namespace wallet | 834 }  // namespace wallet | 
| 911 }  // namespace autofill | 835 }  // namespace autofill | 
| OLD | NEW | 
|---|