Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include "bindings/core/v8/ExceptionState.h" | 9 #include "bindings/core/v8/ExceptionState.h" |
| 10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 } | 179 } |
| 180 | 180 |
| 181 // Validates and converts |input| shipping options into |output|. Throws an | 181 // Validates and converts |input| shipping options into |output|. Throws an |
| 182 // exception if the data is not valid, except for duplicate identifiers, which | 182 // exception if the data is not valid, except for duplicate identifiers, which |
| 183 // returns an empty |output| instead of throwing an exception. There's no need | 183 // returns an empty |output| instead of throwing an exception. There's no need |
| 184 // to clear |output| when an exception is thrown, because the caller takes care | 184 // to clear |output| when an exception is thrown, because the caller takes care |
| 185 // of deleting |output|. | 185 // of deleting |output|. |
| 186 void ValidateAndConvertShippingOptions( | 186 void ValidateAndConvertShippingOptions( |
| 187 const HeapVector<PaymentShippingOption>& input, | 187 const HeapVector<PaymentShippingOption>& input, |
| 188 Vector<PaymentShippingOptionPtr>& output, | 188 Vector<PaymentShippingOptionPtr>& output, |
| 189 ExecutionContext& execution_context, | |
| 189 ExceptionState& exception_state) { | 190 ExceptionState& exception_state) { |
| 190 HashSet<String> unique_ids; | 191 HashSet<String> unique_ids; |
| 191 for (const PaymentShippingOption& option : input) { | 192 for (const PaymentShippingOption& option : input) { |
| 192 if (!option.hasId() || option.id().IsEmpty()) { | 193 if (!option.hasId() || option.id().IsEmpty()) { |
| 193 exception_state.ThrowTypeError("ShippingOption id required"); | 194 exception_state.ThrowTypeError("ShippingOption id required"); |
| 194 return; | 195 return; |
| 195 } | 196 } |
| 196 | 197 |
| 197 if (unique_ids.Contains(option.id())) { | 198 if (unique_ids.Contains(option.id())) { |
| 199 execution_context.AddConsoleMessage( | |
| 200 ConsoleMessage::Create(kJSMessageSource, kWarningMessageLevel, | |
| 201 "Duplicate shipping option identifiers are " | |
|
Marijn Kruisselbrink
2017/04/19 19:03:48
nit: would it make sense to include which id cause
please use gerrit instead
2017/04/19 19:46:01
Good idea. Done.
| |
| 202 "treated as an invalid address indicator.")); | |
| 198 // Clear |output| instead of throwing an exception. | 203 // Clear |output| instead of throwing an exception. |
| 199 output.clear(); | 204 output.clear(); |
| 200 return; | 205 return; |
| 201 } | 206 } |
| 202 | 207 |
| 203 unique_ids.insert(option.id()); | 208 unique_ids.insert(option.id()); |
| 204 | 209 |
| 205 ValidateShippingOptionOrPaymentItem(option, exception_state); | 210 ValidateShippingOptionOrPaymentItem(option, exception_state); |
| 206 if (exception_state.HadException()) | 211 if (exception_state.HadException()) |
| 207 return; | 212 return; |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 485 ExecutionContext& execution_context, | 490 ExecutionContext& execution_context, |
| 486 ExceptionState& exception_state) { | 491 ExceptionState& exception_state) { |
| 487 if (input.hasDisplayItems()) { | 492 if (input.hasDisplayItems()) { |
| 488 ValidateAndConvertDisplayItems(input.displayItems(), output->display_items, | 493 ValidateAndConvertDisplayItems(input.displayItems(), output->display_items, |
| 489 exception_state); | 494 exception_state); |
| 490 if (exception_state.HadException()) | 495 if (exception_state.HadException()) |
| 491 return; | 496 return; |
| 492 } | 497 } |
| 493 | 498 |
| 494 if (input.hasShippingOptions() && request_shipping) { | 499 if (input.hasShippingOptions() && request_shipping) { |
| 495 ValidateAndConvertShippingOptions( | 500 ValidateAndConvertShippingOptions(input.shippingOptions(), |
| 496 input.shippingOptions(), output->shipping_options, exception_state); | 501 output->shipping_options, |
| 502 execution_context, exception_state); | |
| 497 if (exception_state.HadException()) | 503 if (exception_state.HadException()) |
| 498 return; | 504 return; |
| 499 } | 505 } |
| 500 | 506 |
| 501 shipping_option_output = GetSelectedShippingOption(output->shipping_options); | 507 shipping_option_output = GetSelectedShippingOption(output->shipping_options); |
| 502 | 508 |
| 503 if (input.hasModifiers()) { | 509 if (input.hasModifiers()) { |
| 504 ValidateAndConvertPaymentDetailsModifiers( | 510 ValidateAndConvertPaymentDetailsModifiers( |
| 505 input.modifiers(), output->modifiers, execution_context, | 511 input.modifiers(), output->modifiers, execution_context, |
| 506 exception_state); | 512 exception_state); |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1079 complete_resolver_.Clear(); | 1085 complete_resolver_.Clear(); |
| 1080 show_resolver_.Clear(); | 1086 show_resolver_.Clear(); |
| 1081 abort_resolver_.Clear(); | 1087 abort_resolver_.Clear(); |
| 1082 can_make_payment_resolver_.Clear(); | 1088 can_make_payment_resolver_.Clear(); |
| 1083 if (client_binding_.is_bound()) | 1089 if (client_binding_.is_bound()) |
| 1084 client_binding_.Close(); | 1090 client_binding_.Close(); |
| 1085 payment_provider_.reset(); | 1091 payment_provider_.reset(); |
| 1086 } | 1092 } |
| 1087 | 1093 |
| 1088 } // namespace blink | 1094 } // namespace blink |
| OLD | NEW |