Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentRequest.cpp

Issue 2101463002: PaymentRequest: Implement PaymentDetailsModifier dictionary (in blink side). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 14 matching lines...) Expand all
25 #include "mojo/public/cpp/bindings/wtf_array.h" 25 #include "mojo/public/cpp/bindings/wtf_array.h"
26 #include "platform/mojo/MojoHelper.h" 26 #include "platform/mojo/MojoHelper.h"
27 #include "public/platform/ServiceRegistry.h" 27 #include "public/platform/ServiceRegistry.h"
28 #include <utility> 28 #include <utility>
29 29
30 namespace mojo { 30 namespace mojo {
31 31
32 using blink::mojom::blink::PaymentCurrencyAmount; 32 using blink::mojom::blink::PaymentCurrencyAmount;
33 using blink::mojom::blink::PaymentCurrencyAmountPtr; 33 using blink::mojom::blink::PaymentCurrencyAmountPtr;
34 using blink::mojom::blink::PaymentDetails; 34 using blink::mojom::blink::PaymentDetails;
35 using blink::mojom::blink::PaymentDetailsModifier;
36 using blink::mojom::blink::PaymentDetailsModifierPtr;
35 using blink::mojom::blink::PaymentDetailsPtr; 37 using blink::mojom::blink::PaymentDetailsPtr;
36 using blink::mojom::blink::PaymentItem; 38 using blink::mojom::blink::PaymentItem;
37 using blink::mojom::blink::PaymentItemPtr; 39 using blink::mojom::blink::PaymentItemPtr;
38 using blink::mojom::blink::PaymentMethodData; 40 using blink::mojom::blink::PaymentMethodData;
39 using blink::mojom::blink::PaymentMethodDataPtr; 41 using blink::mojom::blink::PaymentMethodDataPtr;
40 using blink::mojom::blink::PaymentOptions; 42 using blink::mojom::blink::PaymentOptions;
41 using blink::mojom::blink::PaymentOptionsPtr; 43 using blink::mojom::blink::PaymentOptionsPtr;
42 using blink::mojom::blink::PaymentShippingOption; 44 using blink::mojom::blink::PaymentShippingOption;
43 using blink::mojom::blink::PaymentShippingOptionPtr; 45 using blink::mojom::blink::PaymentShippingOptionPtr;
44 46
(...skipping 26 matching lines...) Expand all
71 PaymentShippingOptionPtr output = PaymentShippingOption::New(); 73 PaymentShippingOptionPtr output = PaymentShippingOption::New();
72 output->id = input.id(); 74 output->id = input.id();
73 output->label = input.label(); 75 output->label = input.label();
74 output->amount = PaymentCurrencyAmount::From(input.amount()); 76 output->amount = PaymentCurrencyAmount::From(input.amount());
75 output->selected = input.hasSelected() && input.selected(); 77 output->selected = input.hasSelected() && input.selected();
76 return output; 78 return output;
77 } 79 }
78 }; 80 };
79 81
80 template <> 82 template <>
83 struct TypeConverter<PaymentDetailsModifierPtr, blink::PaymentDetailsModifier> {
84 static PaymentDetailsModifierPtr Convert(const blink::PaymentDetailsModifier & input)
85 {
86 PaymentDetailsModifierPtr output = PaymentDetailsModifier::New();
87 output->supported_methods = WTF::Vector<WTF::String>(input.supportedMeth ods());
88
89 if (input.hasTotal())
90 output->total = PaymentItem::From(input.total());
91 else
92 output->total = PaymentItem::New();
93
94 if (input.hasAdditionalDisplayItems())
95 output->additional_display_items = mojo::WTFArray<PaymentItemPtr>::F rom(input.additionalDisplayItems());
96 else
97 output->additional_display_items = mojo::WTFArray<PaymentItemPtr>::N ew(0);
98
99 return output;
100 }
101 };
102
103 template <>
81 struct TypeConverter<PaymentDetailsPtr, blink::PaymentDetails> { 104 struct TypeConverter<PaymentDetailsPtr, blink::PaymentDetails> {
82 static PaymentDetailsPtr Convert(const blink::PaymentDetails& input) 105 static PaymentDetailsPtr Convert(const blink::PaymentDetails& input)
83 { 106 {
84 PaymentDetailsPtr output = PaymentDetails::New(); 107 PaymentDetailsPtr output = PaymentDetails::New();
85 output->total = PaymentItem::From(input.total()); 108 output->total = PaymentItem::From(input.total());
86 109
87 if (input.hasDisplayItems()) 110 if (input.hasDisplayItems())
88 output->display_items = mojo::WTFArray<PaymentItemPtr>::From(input.d isplayItems()); 111 output->display_items = mojo::WTFArray<PaymentItemPtr>::From(input.d isplayItems());
89 else 112 else
90 output->display_items = mojo::WTFArray<PaymentItemPtr>::New(0); 113 output->display_items = mojo::WTFArray<PaymentItemPtr>::New(0);
91 114
92 if (input.hasShippingOptions()) 115 if (input.hasShippingOptions())
93 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>: :From(input.shippingOptions()); 116 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>: :From(input.shippingOptions());
94 else 117 else
95 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>: :New(0); 118 output->shipping_options = mojo::WTFArray<PaymentShippingOptionPtr>: :New(0);
96 119
120 if (input.hasModifiers())
121 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::From( input.modifiers());
122 else
123 output->modifiers = mojo::WTFArray<PaymentDetailsModifierPtr>::New(0 );
124
97 return output; 125 return output;
98 } 126 }
99 }; 127 };
100 128
101 template <> 129 template <>
102 struct TypeConverter<PaymentOptionsPtr, blink::PaymentOptions> { 130 struct TypeConverter<PaymentOptionsPtr, blink::PaymentOptions> {
103 static PaymentOptionsPtr Convert(const blink::PaymentOptions& input) 131 static PaymentOptionsPtr Convert(const blink::PaymentOptions& input)
104 { 132 {
105 PaymentOptionsPtr output = PaymentOptions::New(); 133 PaymentOptionsPtr output = PaymentOptions::New();
106 output->request_payer_email = input.requestPayerEmail(); 134 output->request_payer_email = input.requestPayerEmail();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 exceptionState.throwTypeError("ShippingOption id required"); 210 exceptionState.throwTypeError("ShippingOption id required");
183 return; 211 return;
184 } 212 }
185 213
186 validateShippingOptionOrPaymentItem(option, exceptionState); 214 validateShippingOptionOrPaymentItem(option, exceptionState);
187 if (exceptionState.hadException()) 215 if (exceptionState.hadException())
188 return; 216 return;
189 } 217 }
190 } 218 }
191 219
220 void validatePaymentDetailsModifiers(const HeapVector<PaymentDetailsModifier>& m odifiers, ExceptionState& exceptionState)
221 {
222 if (modifiers.isEmpty()) {
223 exceptionState.throwTypeError("Must specify at least one payment details modifier");
224 return;
225 }
226
227 for (const auto& modifier : modifiers) {
228 if (modifier.supportedMethods().isEmpty()) {
229 exceptionState.throwTypeError("Must specify at least one payment met hod identifier");
230 return;
231 }
232
233 if (modifier.hasTotal()) {
234 validateShippingOptionOrPaymentItem(modifier.total(), exceptionState );
235 if (exceptionState.hadException())
236 return;
237
238 if (modifier.total().amount().value()[0] == '-') {
239 exceptionState.throwTypeError("Total amount value should be non- negative");
240 return;
241 }
242 }
243
244 if (modifier.hasAdditionalDisplayItems()) {
245 validateDisplayItems(modifier.additionalDisplayItems(), exceptionSta te);
246 if (exceptionState.hadException())
247 return;
248 }
249 }
250 }
251
192 void validatePaymentDetails(const PaymentDetails& details, ExceptionState& excep tionState) 252 void validatePaymentDetails(const PaymentDetails& details, ExceptionState& excep tionState)
193 { 253 {
194 if (!details.hasTotal()) { 254 if (!details.hasTotal()) {
195 exceptionState.throwTypeError("Must specify total"); 255 exceptionState.throwTypeError("Must specify total");
196 return; 256 return;
197 } 257 }
198 258
199 validateShippingOptionOrPaymentItem(details.total(), exceptionState); 259 validateShippingOptionOrPaymentItem(details.total(), exceptionState);
200 if (exceptionState.hadException()) 260 if (exceptionState.hadException())
201 return; 261 return;
202 262
203 if (details.total().amount().value()[0] == '-') { 263 if (details.total().amount().value()[0] == '-') {
204 exceptionState.throwTypeError("Total amount value should be non-negative "); 264 exceptionState.throwTypeError("Total amount value should be non-negative ");
205 return; 265 return;
206 } 266 }
207 267
208 if (details.hasDisplayItems()) { 268 if (details.hasDisplayItems()) {
209 validateDisplayItems(details.displayItems(), exceptionState); 269 validateDisplayItems(details.displayItems(), exceptionState);
210 if (exceptionState.hadException()) 270 if (exceptionState.hadException())
211 return; 271 return;
212 } 272 }
213 273
214 if (details.hasShippingOptions()) { 274 if (details.hasShippingOptions()) {
215 validateShippingOptions(details.shippingOptions(), exceptionState); 275 validateShippingOptions(details.shippingOptions(), exceptionState);
276 if (exceptionState.hadException())
277 return;
278 }
279
280 if (details.hasModifiers()) {
281 validatePaymentDetailsModifiers(details.modifiers(), exceptionState);
216 } 282 }
217 } 283 }
218 284
219 void validateAndConvertPaymentMethodData(const HeapVector<PaymentMethodData>& pa ymentMethodData, Vector<PaymentRequest::MethodData>* methodData, ExceptionState& exceptionState) 285 void validateAndConvertPaymentMethodData(const HeapVector<PaymentMethodData>& pa ymentMethodData, Vector<PaymentRequest::MethodData>* methodData, ExceptionState& exceptionState)
220 { 286 {
221 if (paymentMethodData.isEmpty()) { 287 if (paymentMethodData.isEmpty()) {
222 exceptionState.throwTypeError("Must specify at least one payment method identifier"); 288 exceptionState.throwTypeError("Must specify at least one payment method identifier");
223 return; 289 return;
224 } 290 }
225 291
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 { 607 {
542 m_completeResolver.clear(); 608 m_completeResolver.clear();
543 m_showResolver.clear(); 609 m_showResolver.clear();
544 m_abortResolver.clear(); 610 m_abortResolver.clear();
545 if (m_clientBinding.is_bound()) 611 if (m_clientBinding.is_bound())
546 m_clientBinding.Close(); 612 m_clientBinding.Close();
547 m_paymentProvider.reset(); 613 m_paymentProvider.reset();
548 } 614 }
549 615
550 } // namespace blink 616 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698