Index: components/payments/content/payment_request_state.cc |
diff --git a/components/payments/content/payment_request_state.cc b/components/payments/content/payment_request_state.cc |
index 47fe27f1539d65424b442caf421c0ae5f2ff5ab0..785517d5db21a1e8cb380394b80a636fdbebfe5f 100644 |
--- a/components/payments/content/payment_request_state.cc |
+++ b/components/payments/content/payment_request_state.cc |
@@ -6,11 +6,13 @@ |
#include <set> |
+#include "base/strings/utf_string_conversions.h" |
#include "components/autofill/core/browser/autofill_data_util.h" |
#include "components/autofill/core/browser/autofill_profile.h" |
#include "components/autofill/core/browser/credit_card.h" |
#include "components/autofill/core/browser/personal_data_manager.h" |
#include "components/payments/content/payment_request_spec.h" |
+#include "components/payments/content/payment_response_helper.h" |
#include "components/payments/core/autofill_payment_instrument.h" |
namespace payments { |
@@ -56,10 +58,10 @@ void PaymentRequestState::RemoveObserver(Observer* observer) { |
observers_.RemoveObserver(observer); |
} |
+// TODO(sebsg): Move this to the PaymentResponseHelper. |
void PaymentRequestState::OnInstrumentDetailsReady( |
const std::string& method_name, |
const std::string& stringified_details) { |
- // TODO(mathp): Fill other fields in the PaymentResponsePtr object. |
mojom::PaymentResponsePtr payment_response = mojom::PaymentResponse::New(); |
// Make sure that we return the method name that the merchant specified for |
@@ -70,13 +72,45 @@ void PaymentRequestState::OnInstrumentDetailsReady( |
? kBasicCardMethodName |
: method_name; |
payment_response->stringified_details = stringified_details; |
+ |
+ // Shipping Address section |
+ if (spec_->request_shipping()) { |
+ DCHECK(selected_shipping_profile_); |
+ payment_response->shipping_address = |
+ PaymentResponseHelper::GetMojomPaymentAddressFromAutofillProfile( |
+ selected_shipping_profile_, app_locale_); |
+ |
+ DCHECK(selected_shipping_option_); |
+ payment_response->shipping_option = selected_shipping_option_->id; |
+ } |
+ |
+ // Contact Details section. |
+ if (spec_->request_payer_name()) { |
+ DCHECK(selected_contact_profile_); |
+ payment_response->payer_name = |
+ base::UTF16ToUTF8(selected_contact_profile_->GetInfo( |
+ autofill::AutofillType(autofill::NAME_FULL), app_locale_)); |
+ } |
+ if (spec_->request_payer_email()) { |
+ DCHECK(selected_contact_profile_); |
+ payment_response->payer_email = base::UTF16ToUTF8( |
+ selected_contact_profile_->GetRawInfo(autofill::EMAIL_ADDRESS)); |
+ } |
+ if (spec_->request_payer_phone()) { |
+ DCHECK(selected_contact_profile_); |
+ // TODO(crbug.com/705945): Format phone number according to spec. |
+ payment_response->payer_phone = |
+ base::UTF16ToUTF8(selected_contact_profile_->GetRawInfo( |
+ autofill::PHONE_HOME_WHOLE_NUMBER)); |
+ } |
+ |
delegate_->OnPaymentResponseAvailable(std::move(payment_response)); |
} |
void PaymentRequestState::GeneratePaymentResponse() { |
DCHECK(is_ready_to_pay()); |
// Fetch the instrument details, will call back into |
- // PaymentRequest::OnInstrumentsDetailsReady. |
+ // PaymentRequest::OnInstrumentDetailsReady. |
selected_instrument_->InvokePaymentApp(this); |
} |