OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "modules/payments/PaymentRequest.h" | 5 #include "modules/payments/PaymentRequest.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/JSONValuesForV8.h" | 8 #include "bindings/core/v8/JSONValuesForV8.h" |
9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
10 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 if (input.hasShippingOptions()) | 118 if (input.hasShippingOptions()) |
119 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>:
:From(input.shippingOptions()); | 119 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>:
:From(input.shippingOptions()); |
120 else | 120 else |
121 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>:
:New(0); | 121 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>:
:New(0); |
122 | 122 |
123 if (input.hasModifiers()) | 123 if (input.hasModifiers()) |
124 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::From(
input.modifiers()); | 124 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::From(
input.modifiers()); |
125 else | 125 else |
126 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::New(0
); | 126 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::New(0
); |
127 | 127 |
| 128 if (input.hasError()) |
| 129 output->error = input.error(); |
| 130 else |
| 131 output->error = WTF::emptyString(); |
| 132 |
128 return output; | 133 return output; |
129 } | 134 } |
130 }; | 135 }; |
131 | 136 |
132 template <> | 137 template <> |
133 struct TypeConverter<PaymentOptionsPtr, blink::PaymentOptions> { | 138 struct TypeConverter<PaymentOptionsPtr, blink::PaymentOptions> { |
134 static PaymentOptionsPtr Convert(const blink::PaymentOptions& input) | 139 static PaymentOptionsPtr Convert(const blink::PaymentOptions& input) |
135 { | 140 { |
136 PaymentOptionsPtr output = PaymentOptions::New(); | 141 PaymentOptionsPtr output = PaymentOptions::New(); |
137 output->request_payer_name = input.requestPayerName(); | 142 output->request_payer_name = input.requestPayerName(); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 | 302 |
298 if (details.hasShippingOptions()) { | 303 if (details.hasShippingOptions()) { |
299 validateShippingOptions(details.shippingOptions(), exceptionState); | 304 validateShippingOptions(details.shippingOptions(), exceptionState); |
300 if (exceptionState.hadException()) | 305 if (exceptionState.hadException()) |
301 return; | 306 return; |
302 } | 307 } |
303 | 308 |
304 if (details.hasModifiers()) { | 309 if (details.hasModifiers()) { |
305 validatePaymentDetailsModifiers(details.modifiers(), exceptionState); | 310 validatePaymentDetailsModifiers(details.modifiers(), exceptionState); |
306 } | 311 } |
| 312 |
| 313 String errorMessage; |
| 314 if (!PaymentsValidators::isValidErrorMsgFormat(details.error(), &errorMessag
e)) { |
| 315 exceptionState.throwTypeError(errorMessage); |
| 316 return; |
| 317 } |
307 } | 318 } |
308 | 319 |
309 void validateAndConvertPaymentMethodData(const HeapVector<PaymentMethodData>& pa
ymentMethodData, Vector<PaymentRequest::MethodData>* methodData, ExceptionState&
exceptionState) | 320 void validateAndConvertPaymentMethodData(const HeapVector<PaymentMethodData>& pa
ymentMethodData, Vector<PaymentRequest::MethodData>* methodData, ExceptionState&
exceptionState) |
310 { | 321 { |
311 if (paymentMethodData.isEmpty()) { | 322 if (paymentMethodData.isEmpty()) { |
312 exceptionState.throwTypeError("Must specify at least one payment method
identifier"); | 323 exceptionState.throwTypeError("Must specify at least one payment method
identifier"); |
313 return; | 324 return; |
314 } | 325 } |
315 | 326 |
316 HashSet<String> uniqueMethods; | 327 HashSet<String> uniqueMethods; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 | 538 |
528 if (!scriptState->domWindow()->frame() || !scriptState->domWindow()->frame()
->isMainFrame()) { | 539 if (!scriptState->domWindow()->frame() || !scriptState->domWindow()->frame()
->isMainFrame()) { |
529 exceptionState.throwSecurityError("Must be in a top-level browsing conte
xt"); | 540 exceptionState.throwSecurityError("Must be in a top-level browsing conte
xt"); |
530 return; | 541 return; |
531 } | 542 } |
532 | 543 |
533 validatePaymentDetails(details, exceptionState); | 544 validatePaymentDetails(details, exceptionState); |
534 if (exceptionState.hadException()) | 545 if (exceptionState.hadException()) |
535 return; | 546 return; |
536 | 547 |
| 548 if (details.hasError() && !details.error().isEmpty()) { |
| 549 exceptionState.throwTypeError("Error value should be empty"); |
| 550 return; |
| 551 } |
| 552 |
537 if (m_options.requestShipping()) { | 553 if (m_options.requestShipping()) { |
538 m_shippingOption = getSelectedShippingOption(details); | 554 m_shippingOption = getSelectedShippingOption(details); |
539 m_shippingType = getValidShippingType(m_options.shippingType()); | 555 m_shippingType = getValidShippingType(m_options.shippingType()); |
540 } | 556 } |
541 | 557 |
542 scriptState->domWindow()->frame()->interfaceProvider()->getInterface(mojo::G
etProxy(&m_paymentProvider)); | 558 scriptState->domWindow()->frame()->interfaceProvider()->getInterface(mojo::G
etProxy(&m_paymentProvider)); |
543 m_paymentProvider.set_connection_error_handler(convertToBaseCallback(WTF::bi
nd(&PaymentRequest::OnError, wrapWeakPersistent(this), mojom::blink::PaymentErro
rReason::UNKNOWN))); | 559 m_paymentProvider.set_connection_error_handler(convertToBaseCallback(WTF::bi
nd(&PaymentRequest::OnError, wrapWeakPersistent(this), mojom::blink::PaymentErro
rReason::UNKNOWN))); |
544 m_paymentProvider->Init(m_clientBinding.CreateInterfacePtrAndBind(), mojo::W
TFArray<mojom::blink::PaymentMethodDataPtr>::From(validatedMethodData), mojom::b
link::PaymentDetails::From(details), mojom::blink::PaymentOptions::From(m_option
s)); | 560 m_paymentProvider->Init(m_clientBinding.CreateInterfacePtrAndBind(), mojo::W
TFArray<mojom::blink::PaymentMethodDataPtr>::From(validatedMethodData), mojom::b
link::PaymentDetails::From(details), mojom::blink::PaymentOptions::From(m_option
s)); |
545 } | 561 } |
546 | 562 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 m_completeTimer.stop(); | 731 m_completeTimer.stop(); |
716 m_completeResolver.clear(); | 732 m_completeResolver.clear(); |
717 m_showResolver.clear(); | 733 m_showResolver.clear(); |
718 m_abortResolver.clear(); | 734 m_abortResolver.clear(); |
719 if (m_clientBinding.is_bound()) | 735 if (m_clientBinding.is_bound()) |
720 m_clientBinding.Close(); | 736 m_clientBinding.Close(); |
721 m_paymentProvider.reset(); | 737 m_paymentProvider.reset(); |
722 } | 738 } |
723 | 739 |
724 } // namespace blink | 740 } // namespace blink |
OLD | NEW |