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); |
} |
} |