Chromium Code Reviews| Index: third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| index 5660628384c046f4e1bb6780fb3a0699765bc16a..cbc0bfadff320561a292c21a85eec38528d78c6c 100644 |
| --- a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| +++ b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| @@ -33,6 +33,8 @@ using blink::mojom::blink::PaymentCurrencyAmount; |
| using blink::mojom::blink::PaymentCurrencyAmountPtr; |
| using blink::mojom::blink::PaymentDetails; |
| using blink::mojom::blink::PaymentDetailsPtr; |
| +using blink::mojom::blink::PaymentDetailsModifier; |
|
please use gerrit instead
2016/06/26 19:45:25
Please sort this list. PaymentDetailsModifier* sho
zino
2016/06/27 17:29:24
Done.
|
| +using blink::mojom::blink::PaymentDetailsModifierPtr; |
| using blink::mojom::blink::PaymentItem; |
| using blink::mojom::blink::PaymentItemPtr; |
| using blink::mojom::blink::PaymentMethodData; |
| @@ -78,6 +80,23 @@ struct TypeConverter<PaymentShippingOptionPtr, blink::PaymentShippingOption> { |
| }; |
| template <> |
| +struct TypeConverter<PaymentDetailsModifierPtr, blink::PaymentDetailsModifier> { |
| + static PaymentDetailsModifierPtr Convert(const blink::PaymentDetailsModifier& input) |
| + { |
| + PaymentDetailsModifierPtr output = PaymentDetailsModifier::New(); |
| + output->supported_methods = WTF::Vector<WTF::String>(input.supportedMethods()); |
| + output->total = PaymentItem::From(input.total()); |
|
please use gerrit instead
2016/06/26 19:45:25
Total is not required in the spec, so check for it
zino
2016/06/27 17:29:23
Done.
|
| + |
| + if (input.hasAdditionalDisplayItems()) |
| + output->additional_display_items = mojo::WTFArray<PaymentItemPtr>::From(input.additionalDisplayItems()); |
| + else |
| + output->additional_display_items = mojo::WTFArray<PaymentItemPtr>::New(0); |
| + |
| + return output; |
| + } |
| +}; |
| + |
| +template <> |
| struct TypeConverter<PaymentDetailsPtr, blink::PaymentDetails> { |
| static PaymentDetailsPtr Convert(const blink::PaymentDetails& input) |
| { |
| @@ -94,6 +113,11 @@ struct TypeConverter<PaymentDetailsPtr, blink::PaymentDetails> { |
| else |
| output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>::New(0); |
| + if (input.hasModifiers()) |
| + output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::From(input.modifiers()); |
| + else |
| + output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::New(0); |
| + |
| return output; |
| } |
| }; |
| @@ -189,6 +213,38 @@ void validateShippingOptions(const HeapVector<PaymentShippingOption>& options, E |
| } |
| } |
| +void validatePaymentDetailsModifiers(const HeapVector<PaymentDetailsModifier>& modifiers, ExceptionState& exceptionState) |
| +{ |
| + if (modifiers.isEmpty()) { |
| + exceptionState.throwTypeError("Must specify at least one payment details modifier"); |
| + return; |
| + } |
| + |
| + for (const auto& modifier : modifiers) { |
| + if (modifier.supportedMethods().isEmpty()) { |
| + exceptionState.throwTypeError("Must specify at least one payment method identifier"); |
| + return; |
| + } |
| + |
| + if (modifier.hasTotal()) { |
| + validateShippingOptionOrPaymentItem(modifier.total(), exceptionState); |
| + if (exceptionState.hadException()) |
| + return; |
| + |
| + if (modifier.total().amount().value()[0] == '-') { |
| + exceptionState.throwTypeError("Total amount value should be non-negative"); |
| + return; |
| + } |
| + } |
| + |
| + if (modifier.hasAdditionalDisplayItems()) { |
| + validateDisplayItems(modifier.additionalDisplayItems(), exceptionState); |
| + if (exceptionState.hadException()) |
| + return; |
| + } |
| + } |
| +} |
| + |
| void validatePaymentDetails(const PaymentDetails& details, ExceptionState& exceptionState) |
| { |
| if (!details.hasTotal()) { |
| @@ -213,6 +269,12 @@ void validatePaymentDetails(const PaymentDetails& details, ExceptionState& excep |
| if (details.hasShippingOptions()) { |
| validateShippingOptions(details.shippingOptions(), exceptionState); |
| + if (exceptionState.hadException()) |
| + return; |
| + } |
| + |
| + if (details.hasModifiers()) { |
| + validatePaymentDetailsModifiers(details.modifiers(), exceptionState); |
| } |
| } |