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/ConditionalFeatures.h" | 9 #include "bindings/core/v8/ConditionalFeatures.h" |
10 #include "bindings/core/v8/ExceptionState.h" | 10 #include "bindings/core/v8/ExceptionState.h" |
11 #include "bindings/core/v8/ScriptPromiseResolver.h" | 11 #include "bindings/core/v8/ScriptPromiseResolver.h" |
12 #include "bindings/core/v8/ScriptState.h" | 12 #include "bindings/core/v8/ScriptState.h" |
13 #include "bindings/core/v8/V8StringResource.h" | 13 #include "bindings/core/v8/V8StringResource.h" |
14 #include "bindings/modules/v8/V8AndroidPayMethodData.h" | 14 #include "bindings/modules/v8/V8AndroidPayMethodData.h" |
15 #include "bindings/modules/v8/V8BasicCardRequest.h" | 15 #include "bindings/modules/v8/V8BasicCardRequest.h" |
| 16 #include "bindings/modules/v8/V8NativeAndroidPaymentAppManifest.h" |
| 17 #include "bindings/modules/v8/V8NativeAndroidPaymentAppManifestSection.h" |
16 #include "bindings/modules/v8/V8PaymentDetails.h" | 18 #include "bindings/modules/v8/V8PaymentDetails.h" |
17 #include "core/EventTypeNames.h" | 19 #include "core/EventTypeNames.h" |
18 #include "core/dom/DOMException.h" | 20 #include "core/dom/DOMException.h" |
19 #include "core/dom/Document.h" | 21 #include "core/dom/Document.h" |
20 #include "core/dom/ExceptionCode.h" | 22 #include "core/dom/ExceptionCode.h" |
21 #include "core/dom/TaskRunnerHelper.h" | 23 #include "core/dom/TaskRunnerHelper.h" |
22 #include "core/events/Event.h" | 24 #include "core/events/Event.h" |
23 #include "core/events/EventQueue.h" | 25 #include "core/events/EventQueue.h" |
24 #include "core/frame/FrameOwner.h" | 26 #include "core/frame/FrameOwner.h" |
25 #include "core/html/HTMLIFrameElement.h" | 27 #include "core/html/HTMLIFrameElement.h" |
26 #include "core/inspector/ConsoleMessage.h" | 28 #include "core/inspector/ConsoleMessage.h" |
27 #include "core/inspector/ConsoleTypes.h" | 29 #include "core/inspector/ConsoleTypes.h" |
28 #include "modules/EventTargetModulesNames.h" | 30 #include "modules/EventTargetModulesNames.h" |
29 #include "modules/payments/AndroidPayMethodData.h" | 31 #include "modules/payments/AndroidPayMethodData.h" |
30 #include "modules/payments/AndroidPayTokenization.h" | 32 #include "modules/payments/AndroidPayTokenization.h" |
31 #include "modules/payments/BasicCardRequest.h" | 33 #include "modules/payments/BasicCardRequest.h" |
32 #include "modules/payments/HTMLIFrameElementPayments.h" | 34 #include "modules/payments/HTMLIFrameElementPayments.h" |
| 35 #include "modules/payments/NativeAndroidPaymentAppManifest.h" |
| 36 #include "modules/payments/NativeAndroidPaymentAppManifestSection.h" |
33 #include "modules/payments/PaymentAddress.h" | 37 #include "modules/payments/PaymentAddress.h" |
34 #include "modules/payments/PaymentItem.h" | 38 #include "modules/payments/PaymentItem.h" |
35 #include "modules/payments/PaymentRequestUpdateEvent.h" | 39 #include "modules/payments/PaymentRequestUpdateEvent.h" |
36 #include "modules/payments/PaymentResponse.h" | 40 #include "modules/payments/PaymentResponse.h" |
37 #include "modules/payments/PaymentShippingOption.h" | 41 #include "modules/payments/PaymentShippingOption.h" |
38 #include "modules/payments/PaymentsValidators.h" | 42 #include "modules/payments/PaymentsValidators.h" |
39 #include "mojo/public/cpp/bindings/interface_request.h" | 43 #include "mojo/public/cpp/bindings/interface_request.h" |
40 #include "platform/RuntimeEnabledFeatures.h" | 44 #include "platform/RuntimeEnabledFeatures.h" |
41 #include "platform/mojo/MojoHelper.h" | 45 #include "platform/mojo/MojoHelper.h" |
42 #include "public/platform/InterfaceProvider.h" | 46 #include "public/platform/InterfaceProvider.h" |
43 #include "public/platform/Platform.h" | 47 #include "public/platform/Platform.h" |
44 #include "public/platform/WebTraceLocation.h" | 48 #include "public/platform/WebTraceLocation.h" |
45 #include "wtf/HashSet.h" | 49 #include "wtf/HashSet.h" |
| 50 #include "wtf/Optional.h" |
46 | 51 |
47 using payments::mojom::blink::CanMakePaymentQueryResult; | 52 namespace { |
48 using payments::mojom::blink::PaymentAddressPtr; | 53 |
49 using payments::mojom::blink::PaymentCurrencyAmount; | 54 using ::payments::mojom::blink::CanMakePaymentQueryResult; |
50 using payments::mojom::blink::PaymentCurrencyAmountPtr; | 55 using ::payments::mojom::blink::NativeAndroidPaymentAppManifestSection; |
51 using payments::mojom::blink::PaymentDetailsModifierPtr; | 56 using ::payments::mojom::blink::NativeAndroidPaymentAppManifestSectionPtr; |
52 using payments::mojom::blink::PaymentDetailsPtr; | 57 using ::payments::mojom::blink::PaymentAddressPtr; |
53 using payments::mojom::blink::PaymentErrorReason; | 58 using ::payments::mojom::blink::PaymentCurrencyAmount; |
54 using payments::mojom::blink::PaymentItemPtr; | 59 using ::payments::mojom::blink::PaymentCurrencyAmountPtr; |
55 using payments::mojom::blink::PaymentMethodDataPtr; | 60 using ::payments::mojom::blink::PaymentDetailsModifierPtr; |
56 using payments::mojom::blink::PaymentOptionsPtr; | 61 using ::payments::mojom::blink::PaymentDetailsPtr; |
57 using payments::mojom::blink::PaymentResponsePtr; | 62 using ::payments::mojom::blink::PaymentErrorReason; |
58 using payments::mojom::blink::PaymentShippingOptionPtr; | 63 using ::payments::mojom::blink::PaymentItemPtr; |
59 using payments::mojom::blink::PaymentShippingType; | 64 using ::payments::mojom::blink::PaymentMethodDataPtr; |
| 65 using ::payments::mojom::blink::PaymentOptionsPtr; |
| 66 using ::payments::mojom::blink::PaymentResponsePtr; |
| 67 using ::payments::mojom::blink::PaymentShippingOptionPtr; |
| 68 using ::payments::mojom::blink::PaymentShippingType; |
| 69 |
| 70 } // namespace |
60 | 71 |
61 namespace mojo { | 72 namespace mojo { |
62 | 73 |
63 template <> | 74 template <> |
| 75 struct TypeConverter<NativeAndroidPaymentAppManifestSectionPtr, |
| 76 blink::NativeAndroidPaymentAppManifestSection> { |
| 77 static NativeAndroidPaymentAppManifestSectionPtr Convert( |
| 78 const blink::NativeAndroidPaymentAppManifestSection& input) { |
| 79 NativeAndroidPaymentAppManifestSectionPtr output = |
| 80 NativeAndroidPaymentAppManifestSection::New(); |
| 81 output->package_name = input.package(); |
| 82 output->version = input.hasVersion() ? input.version() : 0; |
| 83 if (input.hasSha256_cert_fingerprints()) |
| 84 output->sha256_cert_fingerprints = input.sha256_cert_fingerprints(); |
| 85 return output; |
| 86 } |
| 87 }; |
| 88 |
| 89 template <> |
64 struct TypeConverter<PaymentCurrencyAmountPtr, blink::PaymentCurrencyAmount> { | 90 struct TypeConverter<PaymentCurrencyAmountPtr, blink::PaymentCurrencyAmount> { |
65 static PaymentCurrencyAmountPtr Convert( | 91 static PaymentCurrencyAmountPtr Convert( |
66 const blink::PaymentCurrencyAmount& input) { | 92 const blink::PaymentCurrencyAmount& input) { |
67 PaymentCurrencyAmountPtr output = PaymentCurrencyAmount::New(); | 93 PaymentCurrencyAmountPtr output = PaymentCurrencyAmount::New(); |
68 output->currency = input.currency(); | 94 output->currency = input.currency(); |
69 output->value = input.value(); | 95 output->value = input.value(); |
70 output->currency_system = input.currencySystem(); | 96 output->currency_system = input.currencySystem(); |
71 return output; | 97 return output; |
72 } | 98 } |
73 }; | 99 }; |
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 break; | 1073 break; |
1048 case CanMakePaymentQueryResult::QUERY_QUOTA_EXCEEDED: | 1074 case CanMakePaymentQueryResult::QUERY_QUOTA_EXCEEDED: |
1049 m_canMakePaymentResolver->reject( | 1075 m_canMakePaymentResolver->reject( |
1050 DOMException::create(QuotaExceededError, "Query quota exceeded")); | 1076 DOMException::create(QuotaExceededError, "Query quota exceeded")); |
1051 break; | 1077 break; |
1052 } | 1078 } |
1053 | 1079 |
1054 m_canMakePaymentResolver.clear(); | 1080 m_canMakePaymentResolver.clear(); |
1055 } | 1081 } |
1056 | 1082 |
| 1083 void PaymentRequest::ParsePaymentManifest( |
| 1084 const String& content, |
| 1085 const ParsePaymentManifestCallback& callback) { |
| 1086 Optional<Vector<NativeAndroidPaymentAppManifestSectionPtr>> result; |
| 1087 |
| 1088 ScriptState* state = ScriptState::forMainWorld(frame()); |
| 1089 if (!state->contextIsValid()) { |
| 1090 callback.Run(std::move(result)); |
| 1091 return; |
| 1092 } |
| 1093 |
| 1094 ScriptState::Scope scope(state); |
| 1095 ExceptionState exceptionState(state->isolate(), |
| 1096 ExceptionState::ConstructionContext, |
| 1097 "NativeAndroidPaymentAppManifest"); |
| 1098 v8::Local<v8::Value> input = |
| 1099 fromJSONString(state->isolate(), content, exceptionState); |
| 1100 if (exceptionState.hadException()) { |
| 1101 callback.Run(std::move(result)); |
| 1102 return; |
| 1103 } |
| 1104 |
| 1105 NativeAndroidPaymentAppManifest manifest; |
| 1106 V8NativeAndroidPaymentAppManifest::toImpl(state->isolate(), input, manifest, |
| 1107 exceptionState); |
| 1108 if (exceptionState.hadException()) { |
| 1109 callback.Run(std::move(result)); |
| 1110 return; |
| 1111 } |
| 1112 |
| 1113 if (manifest.hasAndroid() && !manifest.android().isEmpty()) { |
| 1114 result = Vector<NativeAndroidPaymentAppManifestSectionPtr>(); |
| 1115 for (const auto& section : manifest.android()) { |
| 1116 result->push_back( |
| 1117 payments::mojom::blink::NativeAndroidPaymentAppManifestSection::From( |
| 1118 section)); |
| 1119 } |
| 1120 } |
| 1121 |
| 1122 callback.Run(std::move(result)); |
| 1123 } |
| 1124 |
1057 void PaymentRequest::onCompleteTimeout(TimerBase*) { | 1125 void PaymentRequest::onCompleteTimeout(TimerBase*) { |
1058 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); | 1126 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); |
1059 clearResolversAndCloseMojoConnection(); | 1127 clearResolversAndCloseMojoConnection(); |
1060 } | 1128 } |
1061 | 1129 |
1062 void PaymentRequest::clearResolversAndCloseMojoConnection() { | 1130 void PaymentRequest::clearResolversAndCloseMojoConnection() { |
1063 m_completeTimer.stop(); | 1131 m_completeTimer.stop(); |
1064 m_completeResolver.clear(); | 1132 m_completeResolver.clear(); |
1065 m_showResolver.clear(); | 1133 m_showResolver.clear(); |
1066 m_abortResolver.clear(); | 1134 m_abortResolver.clear(); |
1067 m_canMakePaymentResolver.clear(); | 1135 m_canMakePaymentResolver.clear(); |
1068 if (m_clientBinding.is_bound()) | 1136 if (m_clientBinding.is_bound()) |
1069 m_clientBinding.Close(); | 1137 m_clientBinding.Close(); |
1070 m_paymentProvider.reset(); | 1138 m_paymentProvider.reset(); |
1071 } | 1139 } |
1072 | 1140 |
1073 } // namespace blink | 1141 } // namespace blink |
OLD | NEW |