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

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

Issue 2645813006: Download web payment manifests. (Closed)
Patch Set: Address more comments Created 3 years, 9 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 <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
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());
Marijn Kruisselbrink 2017/02/23 20:07:06 I don't think using ScriptState::forMainWorld (or
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698