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 "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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 49 output->value = input.value(); | 49 output->value = input.value(); |
| 50 return output; | 50 return output; |
| 51 } | 51 } |
| 52 }; | 52 }; |
| 53 | 53 |
| 54 template <> | 54 template <> |
| 55 struct TypeConverter<PaymentItemPtr, blink::PaymentItem> { | 55 struct TypeConverter<PaymentItemPtr, blink::PaymentItem> { |
| 56 static PaymentItemPtr Convert(const blink::PaymentItem& input) | 56 static PaymentItemPtr Convert(const blink::PaymentItem& input) |
| 57 { | 57 { |
| 58 PaymentItemPtr output = PaymentItem::New(); | 58 PaymentItemPtr output = PaymentItem::New(); |
| 59 output->id = input.id(); | |
| 60 output->label = input.label(); | 59 output->label = input.label(); |
| 61 output->amount = CurrencyAmount::From(input.amount()); | 60 output->amount = CurrencyAmount::From(input.amount()); |
| 62 return output; | 61 return output; |
| 63 } | 62 } |
| 64 }; | 63 }; |
| 65 | 64 |
| 66 template <> | 65 template <> |
| 67 struct TypeConverter<ShippingOptionPtr, blink::ShippingOption> { | 66 struct TypeConverter<ShippingOptionPtr, blink::ShippingOption> { |
| 68 static ShippingOptionPtr Convert(const blink::ShippingOption& input) | 67 static ShippingOptionPtr Convert(const blink::ShippingOption& input) |
| 69 { | 68 { |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 98 return output; | 97 return output; |
| 99 } | 98 } |
| 100 }; | 99 }; |
| 101 | 100 |
| 102 } // namespace mojo | 101 } // namespace mojo |
| 103 | 102 |
| 104 namespace blink { | 103 namespace blink { |
| 105 namespace { | 104 namespace { |
| 106 | 105 |
| 107 // Validates ShippingOption and PaymentItem dictionaries, which happen to have i dentical fields. | 106 // Validates ShippingOption and PaymentItem dictionaries, which happen to have i dentical fields. |
| 107 // except for "id", which is present only in ShippingOption. | |
| 108 template <typename T> | 108 template <typename T> |
| 109 void validateShippingOptionsOrPaymentItems(HeapVector<T> items, ExceptionState& exceptionState) | 109 void validateShippingOptionsOrPaymentItems(HeapVector<T> items, ExceptionState& exceptionState) |
| 110 { | 110 { |
| 111 String errorMessage; | 111 String errorMessage; |
| 112 for (const auto& item : items) { | 112 for (const auto& item : items) { |
| 113 if (!item.hasId() || item.id().isEmpty()) { | |
| 114 exceptionState.throwTypeError("Item id required"); | |
| 115 return; | |
| 116 } | |
| 117 | |
| 118 if (!item.hasLabel() || item.label().isEmpty()) { | 113 if (!item.hasLabel() || item.label().isEmpty()) { |
| 119 exceptionState.throwTypeError("Item label required"); | 114 exceptionState.throwTypeError("Item label required"); |
| 120 return; | 115 return; |
| 121 } | 116 } |
| 122 | 117 |
| 123 if (!item.hasAmount()) { | 118 if (!item.hasAmount()) { |
| 124 exceptionState.throwTypeError("Currency amount required"); | 119 exceptionState.throwTypeError("Currency amount required"); |
| 125 return; | 120 return; |
| 126 } | 121 } |
| 127 | 122 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 140 return; | 135 return; |
| 141 } | 136 } |
| 142 | 137 |
| 143 if (!PaymentsValidators::isValidAmountFormat(item.amount().value(), &err orMessage)) { | 138 if (!PaymentsValidators::isValidAmountFormat(item.amount().value(), &err orMessage)) { |
| 144 exceptionState.throwTypeError(errorMessage); | 139 exceptionState.throwTypeError(errorMessage); |
| 145 return; | 140 return; |
| 146 } | 141 } |
| 147 } | 142 } |
| 148 } | 143 } |
| 149 | 144 |
| 145 void validateShippingOptionsIds(HeapVector<ShippingOption> options, ExceptionSta te& exceptionState) | |
| 146 { | |
| 147 for (const auto& option : options) { | |
| 148 if (!option.hasId() | option.id().isEmpty()) { | |
|
please use gerrit instead
2016/05/22 22:55:29
| should be ||
zino
2016/05/23 01:42:30
OMG! it's terrible mistake..
Done.
| |
| 149 exceptionState.throwTypeError("ShippingOption id required"); | |
| 150 return; | |
| 151 } | |
| 152 } | |
| 153 } | |
| 154 | |
| 150 void validatePaymentDetails(const PaymentDetails& details, ExceptionState& excep tionState) | 155 void validatePaymentDetails(const PaymentDetails& details, ExceptionState& excep tionState) |
| 151 { | 156 { |
| 152 if (!details.hasItems()) { | 157 if (!details.hasItems()) { |
| 153 exceptionState.throwTypeError("Must specify items"); | 158 exceptionState.throwTypeError("Must specify items"); |
| 154 return; | 159 return; |
| 155 } | 160 } |
| 156 | 161 |
| 157 if (details.items().isEmpty()) { | 162 if (details.items().isEmpty()) { |
| 158 exceptionState.throwTypeError("Must specify at least one item"); | 163 exceptionState.throwTypeError("Must specify at least one item"); |
| 159 return; | 164 return; |
| 160 } | 165 } |
| 161 | 166 |
| 162 validateShippingOptionsOrPaymentItems(details.items(), exceptionState); | 167 validateShippingOptionsOrPaymentItems(details.items(), exceptionState); |
| 163 if (exceptionState.hadException()) | 168 if (exceptionState.hadException()) |
| 164 return; | 169 return; |
| 165 | 170 |
| 166 if (details.hasShippingOptions()) | 171 if (details.hasShippingOptions()) { |
| 167 validateShippingOptionsOrPaymentItems(details.shippingOptions(), excepti onState); | 172 validateShippingOptionsOrPaymentItems(details.shippingOptions(), excepti onState); |
| 173 validateShippingOptionsIds(details.shippingOptions(), exceptionState); | |
| 174 } | |
| 168 } | 175 } |
| 169 | 176 |
| 170 } // namespace | 177 } // namespace |
| 171 | 178 |
| 172 PaymentRequest* PaymentRequest::create(ScriptState* scriptState, const Vector<St ring>& supportedMethods, const PaymentDetails& details, ExceptionState& exceptio nState) | 179 PaymentRequest* PaymentRequest::create(ScriptState* scriptState, const Vector<St ring>& supportedMethods, const PaymentDetails& details, ExceptionState& exceptio nState) |
| 173 { | 180 { |
| 174 return new PaymentRequest(scriptState, supportedMethods, details, PaymentOpt ions(), ScriptValue(), exceptionState); | 181 return new PaymentRequest(scriptState, supportedMethods, details, PaymentOpt ions(), ScriptValue(), exceptionState); |
| 175 } | 182 } |
| 176 | 183 |
| 177 PaymentRequest* PaymentRequest::create(ScriptState* scriptState, const Vector<St ring>& supportedMethods, const PaymentDetails& details, const PaymentOptions& op tions, ExceptionState& exceptionState) | 184 PaymentRequest* PaymentRequest::create(ScriptState* scriptState, const Vector<St ring>& supportedMethods, const PaymentDetails& details, const PaymentOptions& op tions, ExceptionState& exceptionState) |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 433 void PaymentRequest::clearResolversAndCloseMojoConnection() | 440 void PaymentRequest::clearResolversAndCloseMojoConnection() |
| 434 { | 441 { |
| 435 m_completeResolver.clear(); | 442 m_completeResolver.clear(); |
| 436 m_showResolver.clear(); | 443 m_showResolver.clear(); |
| 437 if (m_clientBinding.is_bound()) | 444 if (m_clientBinding.is_bound()) |
| 438 m_clientBinding.Close(); | 445 m_clientBinding.Close(); |
| 439 m_paymentProvider.reset(); | 446 m_paymentProvider.reset(); |
| 440 } | 447 } |
| 441 | 448 |
| 442 } // namespace blink | 449 } // namespace blink |
| OLD | NEW |