Changeset 262069 in webkit
- Timestamp:
- May 22, 2020 1:10:01 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 18 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r262062 r262069 1 2020-05-22 Andy Estes <aestes@apple.com> 2 3 [Apple Pay] Add new ApplePayInstallmentConfiguration members 4 https://bugs.webkit.org/show_bug.cgi?id=212160 5 <rdar://problem/60703650> 6 7 Reviewed by Alex Christensen. 8 9 * http/tests/ssl/applepay/ApplePayInstallmentItems.https-expected.txt: 10 * http/tests/ssl/applepay/ApplePayInstallmentItems.https.html: Added. 11 * platform/mac-wk2/TestExpectations: Skipped test on Mojave and Catalina. 12 1 13 2020-05-22 Carlos Alberto Lopez Perez <clopez@igalia.com> 2 14 -
trunk/LayoutTests/platform/mac-wk2/TestExpectations
r261969 r262069 39 39 # ApplePayInstallmentConfiguration was first available in Catalina. 40 40 [ Mojave ] http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html [ Skip ] 41 42 # ApplePayInstallmentItem is not available in Mojave or Catalina. 43 [ Mojave Catalina ] http/tests/ssl/applepay/ApplePayInstallmentItems.https.html [ Skip ] 41 44 42 45 fast/visual-viewport/rubberbanding-viewport-rects.html [ Pass ] -
trunk/Source/WTF/ChangeLog
r262040 r262069 1 2020-05-22 Andy Estes <aestes@apple.com> 2 3 [Apple Pay] Add new ApplePayInstallmentConfiguration members 4 https://bugs.webkit.org/show_bug.cgi?id=212160 5 <rdar://problem/60703650> 6 7 Reviewed by Alex Christensen. 8 9 * wtf/PlatformEnableCocoa.h: Defined ENABLE_APPLE_PAY_INSTALLMENT_IDENTIFIERS. 10 1 11 2020-05-21 Robin Morisset <rmorisset@apple.com> 2 12 -
trunk/Source/WTF/wtf/PlatformEnableCocoa.h
r261845 r262069 44 44 #endif 45 45 46 #if HAVE(PASSKIT_INSTALLMENT_IDENTIFIERS) 47 #if !defined(ENABLE_APPLE_PAY_INSTALLMENT_IDENTIFIERS) 48 #define ENABLE_APPLE_PAY_INSTALLMENT_IDENTIFIERS 1 49 #endif 50 #endif 51 46 52 #if HAVE(PASSKIT_INSTALLMENT_ITEMS) 47 53 #if !defined(ENABLE_APPLE_PAY_INSTALLMENT_ITEMS) … … 57 63 #define ENABLE_APPLE_PAY_SESSION_V8 1 58 64 #endif 59 60 65 #endif 61 66 -
trunk/Source/WebCore/ChangeLog
r262066 r262069 1 2020-05-22 Andy Estes <aestes@apple.com> 2 3 [Apple Pay] Add new ApplePayInstallmentConfiguration members 4 https://bugs.webkit.org/show_bug.cgi?id=212160 5 <rdar://problem/60703650> 6 7 Reviewed by Alex Christensen. 8 9 Test: http/tests/ssl/applepay/ApplePayInstallmentItems.https.html 10 11 * DerivedSources-input.xcfilelist: 12 * DerivedSources-output.xcfilelist: 13 * DerivedSources.make: 14 * SourcesCocoa.txt: 15 * WebCore.xcodeproj/project.pbxproj: Added IDLs, headers, and derived sources for 16 ApplePayInstallment{Item,ItemType,RetailChannel}. 17 18 * Modules/applepay/ApplePayInstallmentConfiguration.idl: 19 * Modules/applepay/ApplePayInstallmentConfigurationWebCore.h: Added items, 20 applicationMetadata, and retailChannel members. Added missing conditionals to 21 merchantIdentifier and referrerIdentifier. 22 23 * Modules/applepay/ApplePayInstallmentItem.h: 24 * Modules/applepay/ApplePayInstallmentItem.idl: 25 * Modules/applepay/ApplePayInstallmentItemType.h: 26 * Modules/applepay/ApplePayInstallmentItemType.idl: 27 * Modules/applepay/ApplePayInstallmentRetailChannel.h: 28 * Modules/applepay/ApplePayInstallmentRetailChannel.idl: Added. 29 30 * Modules/applepay/ApplePayRequestBase.cpp: 31 (WebCore::convertAndValidate): Changed to call PaymentInstallmentConfiguration::create, 32 returning an exception if present. 33 34 * Modules/applepay/PaymentInstallmentConfiguration.mm: 35 (WebCore::fromDecimalNumber): Allowed for a large maximum number of fractional digits to 36 support formatting high-precision currency and APRs (note that this formatter is only used 37 for test support). 38 39 (WebCore::applePayItemType): 40 (WebCore::platformItemType): Added to convert between PKInstallmentItemType and 41 ApplePayInstallmentItemType. 42 43 (WebCore::applePayRetailChannel): 44 (WebCore::platformRetailChannel): Added to convert between PKInstallmentRetailChannel and 45 ApplePayInstallmentRetailChannel. 46 47 (WebCore::makeNSArrayElement): 48 (WebCore::makeVectorElement): Added to convert between NSArray<PKPaymentInstallmentItem *> 49 and Vector<ApplePayInstallmentItem>. 50 51 (WebCore::createPlatformConfiguration): Added a parameter for passing in applicationMetadata 52 as an NSDictionary. Set properties on PKPaymentInstallmentConfiguration for new 53 ApplePayInstallmentConfiguration members. 54 (WebCore::PaymentInstallmentConfiguration::create): Added; converts the applicationMetadata 55 JSON string (if present) to an NSDictionary, returning a TypeError if the JSON string does 56 not deserialize to an NSDictionary (as PassKit requires). 57 (WebCore::PaymentInstallmentConfiguration::PaymentInstallmentConfiguration): Added a 58 parameter for passing in applicationMetadata as an NSDictionary. Made private. 59 (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const): Set 60 members on ApplePayInstallmentConfiguration for new PKPaymentInstallmentConfiguration 61 properties. 62 63 * Modules/applepay/PaymentInstallmentConfigurationWebCore.h: 64 1 65 2020-05-22 Alex Christensen <achristensen@webkit.org> 2 66 -
trunk/Source/WebCore/DerivedSources-input.xcfilelist
r261883 r262069 26 26 $(PROJECT_DIR)/Modules/applepay/ApplePayErrorContactField.idl 27 27 $(PROJECT_DIR)/Modules/applepay/ApplePayInstallmentConfiguration.idl 28 $(PROJECT_DIR)/Modules/applepay/ApplePayInstallmentItem.idl 29 $(PROJECT_DIR)/Modules/applepay/ApplePayInstallmentItemType.idl 30 $(PROJECT_DIR)/Modules/applepay/ApplePayInstallmentRetailChannel.idl 28 31 $(PROJECT_DIR)/Modules/applepay/ApplePayLineItem.idl 29 32 $(PROJECT_DIR)/Modules/applepay/ApplePayMerchantCapability.idl -
trunk/Source/WebCore/DerivedSources-output.xcfilelist
r261883 r262069 80 80 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentConfiguration.cpp 81 81 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentConfiguration.h 82 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentItem.cpp 83 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentItem.h 84 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentItemType.cpp 85 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentItemType.h 86 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentRetailChannel.cpp 87 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayInstallmentRetailChannel.h 82 88 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayLineItem.cpp 83 89 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayLineItem.h -
trunk/Source/WebCore/DerivedSources.make
r261883 r262069 105 105 $(WebCore)/Modules/applepay/ApplePayErrorContactField.idl \ 106 106 $(WebCore)/Modules/applepay/ApplePayInstallmentConfiguration.idl \ 107 $(WebCore)/Modules/applepay/ApplePayInstallmentItem.idl \ 108 $(WebCore)/Modules/applepay/ApplePayInstallmentItemType.idl \ 109 $(WebCore)/Modules/applepay/ApplePayInstallmentRetailChannel.idl \ 107 110 $(WebCore)/Modules/applepay/ApplePayLineItem.idl \ 108 111 $(WebCore)/Modules/applepay/ApplePayMerchantCapability.idl \ -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentConfiguration.idl
r261785 r262069 34 34 DOMString bindingTotalAmount; 35 35 DOMString currencyCode; 36 DOMString merchantIdentifier;37 DOMString referrerIdentifier;38 36 boolean isInStorePurchase; 37 [Conditional=APPLE_PAY_INSTALLMENT_IDENTIFIERS] DOMString merchantIdentifier; 38 [Conditional=APPLE_PAY_INSTALLMENT_IDENTIFIERS] DOMString referrerIdentifier; 39 [Conditional=APPLE_PAY_INSTALLMENT_ITEMS] sequence<ApplePayInstallmentItem> items; 40 [Conditional=APPLE_PAY_INSTALLMENT_ITEMS] JSON applicationMetadata; 41 [Conditional=APPLE_PAY_INSTALLMENT_ITEMS] ApplePayInstallmentRetailChannel retailChannel = "unknown"; 39 42 }; -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentConfigurationWebCore.h
r260718 r262069 28 28 #if ENABLE(APPLE_PAY_INSTALLMENTS) 29 29 30 #include "ApplePayInstallmentItem.h" 31 #include "ApplePayInstallmentRetailChannel.h" 30 32 #include "ApplePaySetupFeatureTypeWebCore.h" 33 #include <wtf/Vector.h> 31 34 #include <wtf/text/WTFString.h> 32 35 … … 39 42 String bindingTotalAmount; 40 43 String currencyCode; 44 bool isInStorePurchase { false }; 45 #if ENABLE(APPLE_PAY_INSTALLMENT_IDENTIFIERS) 41 46 String merchantIdentifier; 42 47 String referrerIdentifier; 43 bool isInStorePurchase { false }; 48 #endif 49 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 50 Vector<ApplePayInstallmentItem> items; 51 String applicationMetadata; 52 ApplePayInstallmentRetailChannel retailChannel { ApplePayInstallmentRetailChannel::Unknown }; 53 #endif 44 54 }; 45 55 -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentItem.h
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 #pragma once 27 27 28 #if ENABLE(APPLE_PAY_INSTALLMENT S)28 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 29 29 30 #include "ApplePay SetupFeatureTypeWebCore.h"30 #include "ApplePayInstallmentItemType.h" 31 31 #include <wtf/text/WTFString.h> 32 32 33 33 namespace WebCore { 34 34 35 struct ApplePayInstallmentConfiguration { 36 ApplePaySetupFeatureType featureType { ApplePaySetupFeatureType::AppleCard }; 37 String merchandisingImageData; 38 String openToBuyThresholdAmount; 39 String bindingTotalAmount; 35 struct ApplePayInstallmentItem { 36 ApplePayInstallmentItemType type { ApplePayInstallmentItemType::Generic }; 37 String amount; 40 38 String currencyCode; 41 String merchantIdentifier;42 String referrerIdentifier;43 bool isInStorePurchase { false };39 String programIdentifier; 40 String apr; 41 String programTerms; 44 42 }; 45 43 46 44 } // namespace WebCore 47 45 48 #endif // ENABLE(APPLE_PAY_INSTALLMENT S)46 #endif // ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentItem.idl
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 [ 27 Conditional=APPLE_PAY_INSTALLMENTS, 28 ExportMacro=WEBCORE_EXPORT, 27 Conditional=APPLE_PAY_INSTALLMENT_ITEMS, 29 28 JSGenerateToJSObject, 30 ] dictionary ApplePayInstallmentConfiguration { 31 ApplePaySetupFeatureType featureType = "appleCard"; 32 DOMString merchandisingImageData; 33 DOMString openToBuyThresholdAmount; 34 DOMString bindingTotalAmount; 29 ] dictionary ApplePayInstallmentItem { 30 ApplePayInstallmentItemType type = "generic"; 31 DOMString amount; 35 32 DOMString currencyCode; 36 DOMString merchantIdentifier;37 DOMString referrerIdentifier;38 boolean isInStorePurchase;33 DOMString programIdentifier; 34 DOMString apr; 35 DOMString programTerms; 39 36 }; -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentItemType.h
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 [ 27 Conditional=APPLE_PAY_INSTALLMENTS, 28 ExportMacro=WEBCORE_EXPORT, 29 JSGenerateToJSObject, 30 ] dictionary ApplePayInstallmentConfiguration { 31 ApplePaySetupFeatureType featureType = "appleCard"; 32 DOMString merchandisingImageData; 33 DOMString openToBuyThresholdAmount; 34 DOMString bindingTotalAmount; 35 DOMString currencyCode; 36 DOMString merchantIdentifier; 37 DOMString referrerIdentifier; 38 boolean isInStorePurchase; 26 #pragma once 27 28 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 29 30 namespace WebCore { 31 32 enum class ApplePayInstallmentItemType : uint8_t { 33 Generic, 34 Phone, 35 Pad, 36 Watch, 37 Mac, 39 38 }; 39 40 } // namespace WebCore 41 42 #endif // ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentItemType.idl
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 [ 27 Conditional=APPLE_PAY_INSTALLMENTS, 28 ExportMacro=WEBCORE_EXPORT, 29 JSGenerateToJSObject, 30 ] dictionary ApplePayInstallmentConfiguration { 31 ApplePaySetupFeatureType featureType = "appleCard"; 32 DOMString merchandisingImageData; 33 DOMString openToBuyThresholdAmount; 34 DOMString bindingTotalAmount; 35 DOMString currencyCode; 36 DOMString merchantIdentifier; 37 DOMString referrerIdentifier; 38 boolean isInStorePurchase; 27 Conditional=APPLE_PAY_INSTALLMENT_ITEMS, 28 ] enum ApplePayInstallmentItemType { 29 "generic", 30 "phone", 31 "pad", 32 "watch", 33 "mac" 39 34 }; -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentRetailChannel.h
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 [ 27 Conditional=APPLE_PAY_INSTALLMENTS, 28 ExportMacro=WEBCORE_EXPORT, 29 JSGenerateToJSObject, 30 ] dictionary ApplePayInstallmentConfiguration { 31 ApplePaySetupFeatureType featureType = "appleCard"; 32 DOMString merchandisingImageData; 33 DOMString openToBuyThresholdAmount; 34 DOMString bindingTotalAmount; 35 DOMString currencyCode; 36 DOMString merchantIdentifier; 37 DOMString referrerIdentifier; 38 boolean isInStorePurchase; 26 #pragma once 27 28 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 29 30 namespace WebCore { 31 32 enum class ApplePayInstallmentRetailChannel : uint8_t { 33 Unknown, 34 App, 35 Web, 36 InStore, 39 37 }; 38 39 } // namespace WebCore 40 41 #endif // ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) -
trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentRetailChannel.idl
r262068 r262069 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 [ 27 Conditional=APPLE_PAY_INSTALLMENTS, 28 ExportMacro=WEBCORE_EXPORT, 29 JSGenerateToJSObject, 30 ] dictionary ApplePayInstallmentConfiguration { 31 ApplePaySetupFeatureType featureType = "appleCard"; 32 DOMString merchandisingImageData; 33 DOMString openToBuyThresholdAmount; 34 DOMString bindingTotalAmount; 35 DOMString currencyCode; 36 DOMString merchantIdentifier; 37 DOMString referrerIdentifier; 38 boolean isInStorePurchase; 27 Conditional=APPLE_PAY_INSTALLMENT_ITEMS, 28 ] enum ApplePayInstallmentRetailChannel { 29 "unknown", 30 "app", 31 "web", 32 "inStore" 39 33 }; -
trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp
r261785 r262069 107 107 108 108 #if ENABLE(APPLE_PAY_INSTALLMENTS) 109 if (request.installmentConfiguration) 110 result.setInstallmentConfiguration(WTFMove(*request.installmentConfiguration)); 109 if (request.installmentConfiguration) { 110 auto installmentConfiguration = PaymentInstallmentConfiguration::create(*request.installmentConfiguration); 111 if (installmentConfiguration.hasException()) 112 return installmentConfiguration.releaseException(); 113 result.setInstallmentConfiguration(installmentConfiguration.releaseReturnValue()); 114 } 111 115 #endif 112 116 -
trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfiguration.mm
r261789 r262069 30 30 31 31 #import "ApplePayInstallmentConfigurationWebCore.h" 32 #import "ApplePayInstallmentItemType.h" 33 #import "ApplePayInstallmentRetailChannel.h" 34 #import "ExceptionOr.h" 35 #import <wtf/cocoa/VectorCocoa.h> 36 32 37 #import <pal/cocoa/PassKitSoftLink.h> 33 38 … … 48 53 [numberFormatter setMinimumIntegerDigits:1]; 49 54 [numberFormatter setMinimumFractionDigits:2]; 55 [numberFormatter setMaximumFractionDigits:[numberFormatter maximumIntegerDigits]]; 50 56 return [numberFormatter stringFromNumber:number]; 51 57 } 52 58 53 static PKPaymentSetupFeatureType platformFeatureType(const ApplePaySetupFeatureType& featureType) 59 static ApplePaySetupFeatureType applePaySetupFeatureType(PKPaymentSetupFeatureType featureType) 60 { 61 switch (featureType) { 62 case PKPaymentSetupFeatureTypeApplePay: 63 return ApplePaySetupFeatureType::ApplePay; 64 ALLOW_DEPRECATED_DECLARATIONS_BEGIN 65 case PKPaymentSetupFeatureTypeApplePay_X: 66 ALLOW_DEPRECATED_DECLARATIONS_END 67 return ApplePaySetupFeatureType::AppleCard; 68 } 69 } 70 71 static PKPaymentSetupFeatureType platformFeatureType(ApplePaySetupFeatureType featureType) 54 72 { 55 73 switch (featureType) { … … 63 81 } 64 82 65 static ApplePaySetupFeatureType applePaySetupFeatureType(PKPaymentSetupFeatureType featureType) 66 { 67 switch (featureType) { 68 case PKPaymentSetupFeatureTypeApplePay: 69 return ApplePaySetupFeatureType::ApplePay; 70 ALLOW_DEPRECATED_DECLARATIONS_BEGIN 71 case PKPaymentSetupFeatureTypeApplePay_X: 72 ALLOW_DEPRECATED_DECLARATIONS_END 73 return ApplePaySetupFeatureType::AppleCard; 74 } 75 } 76 77 static RetainPtr<PKPaymentInstallmentConfiguration> createPlatformConfiguration(const ApplePayInstallmentConfiguration& coreConfiguration) 83 static ApplePayInstallmentItemType applePayItemType(PKInstallmentItemType itemType) 84 { 85 switch (itemType) { 86 case PKInstallmentItemTypeGeneric: 87 return ApplePayInstallmentItemType::Generic; 88 case PKInstallmentItemTypePhone: 89 return ApplePayInstallmentItemType::Phone; 90 case PKInstallmentItemTypePad: 91 return ApplePayInstallmentItemType::Pad; 92 case PKInstallmentItemTypeWatch: 93 return ApplePayInstallmentItemType::Watch; 94 case PKInstallmentItemTypeMac: 95 return ApplePayInstallmentItemType::Mac; 96 } 97 } 98 99 static PKInstallmentItemType platformItemType(ApplePayInstallmentItemType itemType) 100 { 101 switch (itemType) { 102 case ApplePayInstallmentItemType::Generic: 103 return PKInstallmentItemTypeGeneric; 104 case ApplePayInstallmentItemType::Phone: 105 return PKInstallmentItemTypePhone; 106 case ApplePayInstallmentItemType::Pad: 107 return PKInstallmentItemTypePad; 108 case ApplePayInstallmentItemType::Watch: 109 return PKInstallmentItemTypeWatch; 110 case ApplePayInstallmentItemType::Mac: 111 return PKInstallmentItemTypeMac; 112 } 113 } 114 115 static ApplePayInstallmentRetailChannel applePayRetailChannel(PKInstallmentRetailChannel retailChannel) 116 { 117 switch (retailChannel) { 118 case PKInstallmentRetailChannelUnknown: 119 return ApplePayInstallmentRetailChannel::Unknown; 120 case PKInstallmentRetailChannelApp: 121 return ApplePayInstallmentRetailChannel::App; 122 case PKInstallmentRetailChannelWeb: 123 return ApplePayInstallmentRetailChannel::Web; 124 case PKInstallmentRetailChannelInStore: 125 return ApplePayInstallmentRetailChannel::InStore; 126 } 127 } 128 129 static PKInstallmentRetailChannel platformRetailChannel(ApplePayInstallmentRetailChannel retailChannel) 130 { 131 switch (retailChannel) { 132 case ApplePayInstallmentRetailChannel::Unknown: 133 return PKInstallmentRetailChannelUnknown; 134 case ApplePayInstallmentRetailChannel::App: 135 return PKInstallmentRetailChannelApp; 136 case ApplePayInstallmentRetailChannel::Web: 137 return PKInstallmentRetailChannelWeb; 138 case ApplePayInstallmentRetailChannel::InStore: 139 return PKInstallmentRetailChannelInStore; 140 } 141 } 142 143 static RetainPtr<id> makeNSArrayElement(const ApplePayInstallmentItem& item) 144 { 145 auto installmentItem = adoptNS([PAL::allocPKPaymentInstallmentItemInstance() init]); 146 [installmentItem setInstallmentItemType:platformItemType(item.type)]; 147 [installmentItem setAmount:toDecimalNumber(item.amount)]; 148 [installmentItem setCurrencyCode:item.currencyCode]; 149 [installmentItem setProgramIdentifier:item.programIdentifier]; 150 [installmentItem setApr:toDecimalNumber(item.apr)]; 151 [installmentItem setProgramTerms:item.programTerms]; 152 return installmentItem; 153 } 154 155 static Optional<ApplePayInstallmentItem> makeVectorElement(const ApplePayInstallmentItem*, id arrayElement) 156 { 157 if (![arrayElement isKindOfClass:PAL::getPKPaymentInstallmentItemClass()]) 158 return WTF::nullopt; 159 160 PKPaymentInstallmentItem *item = arrayElement; 161 return ApplePayInstallmentItem { 162 applePayItemType([item installmentItemType]), 163 fromDecimalNumber([item amount]), 164 [item currencyCode], 165 [item programIdentifier], 166 fromDecimalNumber([item apr]), 167 [item programTerms], 168 }; 169 } 170 171 static RetainPtr<PKPaymentInstallmentConfiguration> createPlatformConfiguration(const ApplePayInstallmentConfiguration& coreConfiguration, NSDictionary *applicationMetadata) 78 172 { 79 173 auto configuration = adoptNS([PAL::allocPKPaymentInstallmentConfigurationInstance() init]); … … 97 191 [configuration setReferrerIdentifier:coreConfiguration.referrerIdentifier]; 98 192 #endif 193 194 #if HAVE(PASSKIT_INSTALLMENT_ITEMS) 195 #if PLATFORM(MAC) 196 if (![configuration respondsToSelector:@selector(setInstallmentItems:)] 197 || ![configuration respondsToSelector:@selector(setApplicationMetadata:)] 198 || ![configuration respondsToSelector:@selector(setRetailChannel:)]) 199 return configuration; 200 #endif 201 [configuration setInstallmentItems:createNSArray(coreConfiguration.items).get()]; 202 [configuration setApplicationMetadata:applicationMetadata]; 203 [configuration setRetailChannel:platformRetailChannel(coreConfiguration.retailChannel)]; 204 #else 205 UNUSED_PARAM(applicationMetadata); 206 #endif 99 207 100 208 return configuration; 101 209 } 102 210 103 PaymentInstallmentConfiguration::PaymentInstallmentConfiguration(const ApplePayInstallmentConfiguration& configuration) 104 : m_configuration { createPlatformConfiguration(configuration) } 211 ExceptionOr<PaymentInstallmentConfiguration> PaymentInstallmentConfiguration::create(const ApplePayInstallmentConfiguration& configuration) 212 { 213 NSDictionary *applicationMetadataDictionary = nil; 214 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 215 if (!configuration.applicationMetadata.isNull()) { 216 NSData *applicationMetadata = [configuration.applicationMetadata dataUsingEncoding:NSUTF8StringEncoding]; 217 applicationMetadataDictionary = dynamic_objc_cast<NSDictionary>([NSJSONSerialization JSONObjectWithData:applicationMetadata options:0 error:nil]); 218 if (!applicationMetadataDictionary) 219 return Exception { TypeError, "applicationMetadata must be a JSON object" }; 220 } 221 #endif 222 223 return PaymentInstallmentConfiguration(configuration, applicationMetadataDictionary); 224 } 225 226 PaymentInstallmentConfiguration::PaymentInstallmentConfiguration(const ApplePayInstallmentConfiguration& configuration, NSDictionary *applicationMetadata) 227 : m_configuration { createPlatformConfiguration(configuration, applicationMetadata) } 105 228 { 106 229 } … … 137 260 installmentConfiguration.referrerIdentifier = [m_configuration referrerIdentifier]; 138 261 #endif 139 262 263 #if ENABLE(APPLE_PAY_INSTALLMENT_ITEMS) 264 #if PLATFORM(MAC) 265 if (![m_configuration respondsToSelector:@selector(installmentItems)] 266 || ![m_configuration respondsToSelector:@selector(applicationMetadata)] 267 || ![m_configuration respondsToSelector:@selector(retailChannel)]) 268 return installmentConfiguration; 269 #endif 270 RetainPtr<NSString> applicationMetadataString; 271 if (NSDictionary *applicationMetadataDictionary = [m_configuration applicationMetadata]) { 272 if (NSData *applicationMetadata = [NSJSONSerialization dataWithJSONObject:applicationMetadataDictionary options:NSJSONWritingSortedKeys error:nil]) 273 applicationMetadataString = adoptNS([[NSString alloc] initWithData:applicationMetadata encoding:NSUTF8StringEncoding]); 274 } 275 276 installmentConfiguration.items = makeVector<ApplePayInstallmentItem>([m_configuration installmentItems]); 277 installmentConfiguration.applicationMetadata = applicationMetadataString.get(); 278 installmentConfiguration.retailChannel = applePayRetailChannel([m_configuration retailChannel]); 279 #endif 280 140 281 return installmentConfiguration; 141 282 } -
trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfigurationWebCore.h
r261785 r262069 30 30 #include <wtf/RetainPtr.h> 31 31 32 OBJC_CLASS NSDictionary; 32 33 OBJC_CLASS PKPaymentInstallmentConfiguration; 33 34 34 35 namespace WebCore { 35 36 37 class Document; 36 38 struct ApplePayInstallmentConfiguration; 39 template<typename> class ExceptionOr; 37 40 38 41 class WEBCORE_EXPORT PaymentInstallmentConfiguration { 39 42 public: 43 static ExceptionOr<PaymentInstallmentConfiguration> create(const ApplePayInstallmentConfiguration&); 44 40 45 PaymentInstallmentConfiguration() = default; 41 PaymentInstallmentConfiguration(const ApplePayInstallmentConfiguration&);42 46 PaymentInstallmentConfiguration(RetainPtr<PKPaymentInstallmentConfiguration>&&); 43 47 … … 46 50 47 51 private: 52 PaymentInstallmentConfiguration(const ApplePayInstallmentConfiguration&, NSDictionary *applicationMetadata); 53 48 54 RetainPtr<PKPaymentInstallmentConfiguration> m_configuration; 49 55 }; -
trunk/Source/WebCore/PAL/ChangeLog
r261921 r262069 1 2020-05-22 Andy Estes <aestes@apple.com> 2 3 [Apple Pay] Add new ApplePayInstallmentConfiguration members 4 https://bugs.webkit.org/show_bug.cgi?id=212160 5 <rdar://problem/60703650> 6 7 Reviewed by Alex Christensen. 8 9 * pal/cocoa/PassKitSoftLink.h: 10 * pal/cocoa/PassKitSoftLink.mm: Added soft-linking macros for PKPaymentInstallmentItem. 11 1 12 2020-05-20 Andy Estes <aestes@apple.com> 2 13 -
trunk/Source/WebCore/PAL/pal/cocoa/PassKitSoftLink.h
r260717 r262069 52 52 #endif 53 53 54 #if HAVE(PASSKIT_INSTALLMENT_ITEMS) 55 SOFT_LINK_CLASS_FOR_HEADER(PAL, PKPaymentInstallmentItem) 56 #endif 57 54 58 #if PLATFORM(IOS_FAMILY) 55 59 SOFT_LINK_CLASS_FOR_HEADER(PAL, PKPaymentAuthorizationController) -
trunk/Source/WebCore/PAL/pal/cocoa/PassKitSoftLink.mm
r260717 r262069 43 43 #endif 44 44 45 #if HAVE(PASSKIT_INSTALLMENT_ITEMS) 46 SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT(PAL, PassKit, PKPaymentInstallmentItem, PAL_EXPORT) 47 #endif 48 45 49 #else // PLATFORM(MAC) 46 50 … … 55 59 #if HAVE(PASSKIT_INSTALLMENTS) 56 60 SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT(PAL, PassKit, PKPaymentInstallmentConfiguration, PAL_EXPORT) 61 #endif 62 63 #if HAVE(PASSKIT_INSTALLMENT_ITEMS) 64 SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT(PAL, PassKit, PKPaymentInstallmentItem, PAL_EXPORT) 57 65 #endif 58 66 -
trunk/Source/WebCore/SourcesCocoa.txt
r261883 r262069 624 624 JSApplePayErrorContactField.cpp 625 625 JSApplePayInstallmentConfiguration.cpp 626 JSApplePayInstallmentItem.cpp 627 JSApplePayInstallmentItemType.cpp 628 JSApplePayInstallmentRetailChannel.cpp 626 629 JSApplePayLineItem.cpp 627 630 JSApplePayMerchantCapability.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r262066 r262069 2963 2963 A113E02823318293009C33A0 /* PaymentSessionError.h in Headers */ = {isa = PBXBuildFile; fileRef = A113E02723318293009C33A0 /* PaymentSessionError.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2964 2964 A113E02E2331A134009C33A0 /* ApplePayCancelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A113E02B2331A0E4009C33A0 /* ApplePayCancelEvent.h */; }; 2965 A117509A247468D600D4D26C /* ApplePayInstallmentConfigurationWebCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C53DCD02446449A00A93124 /* ApplePayInstallmentConfigurationWebCore.h */; }; 2966 A11750A0247468F300D4D26C /* ApplePayInstallmentItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A117509C247468E500D4D26C /* ApplePayInstallmentItem.h */; }; 2967 A11750A1247468F700D4D26C /* ApplePayInstallmentItemType.h in Headers */ = {isa = PBXBuildFile; fileRef = A117509D247468E600D4D26C /* ApplePayInstallmentItemType.h */; }; 2965 2968 A11AE0CC1FFD60530047348B /* MerchantValidationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A11AE0C91FFD60530047348B /* MerchantValidationEvent.h */; }; 2966 2969 A11AE0D31FFD61DF0047348B /* JSMerchantValidationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A11AE0D11FFD61DF0047348B /* JSMerchantValidationEvent.h */; }; … … 2984 2987 A12C59FE20360B4A0012236B /* JSApplePayShippingMethodUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADFDFEA1E71DCA0008F5D34 /* JSApplePayShippingMethodUpdate.h */; }; 2985 2988 A136A00D1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h in Headers */ = {isa = PBXBuildFile; fileRef = A136A00B1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h */; }; 2989 A13B616B2475E04800BBE6DE /* ApplePayInstallmentRetailChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B61672475DFC500BBE6DE /* ApplePayInstallmentRetailChannel.h */; }; 2990 A13B61742475E34200BBE6DE /* JSApplePayInstallmentConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B61722475E31500BBE6DE /* JSApplePayInstallmentConfiguration.h */; }; 2991 A13B61752475E35F00BBE6DE /* JSApplePayInstallmentItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B61712475E31400BBE6DE /* JSApplePayInstallmentItem.h */; }; 2992 A13B61762475E37A00BBE6DE /* JSApplePayInstallmentItemType.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B616E2475E31100BBE6DE /* JSApplePayInstallmentItemType.h */; }; 2993 A13B61772475E3A300BBE6DE /* JSApplePayInstallmentRetailChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B616F2475E31200BBE6DE /* JSApplePayInstallmentRetailChannel.h */; }; 2986 2994 A140618B1E2ECA0A0032B34E /* MockPreviewLoaderClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14061891E2ECA0A0032B34E /* MockPreviewLoaderClient.cpp */; }; 2987 2995 A140618C1E2ECA0A0032B34E /* MockPreviewLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = A140618A1E2ECA0A0032B34E /* MockPreviewLoaderClient.h */; }; … … 11478 11486 A113E02B2331A0E4009C33A0 /* ApplePayCancelEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayCancelEvent.h; sourceTree = "<group>"; }; 11479 11487 A113E02C2331A0E4009C33A0 /* ApplePayCancelEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplePayCancelEvent.cpp; sourceTree = "<group>"; }; 11488 A117509C247468E500D4D26C /* ApplePayInstallmentItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayInstallmentItem.h; sourceTree = "<group>"; }; 11489 A117509D247468E600D4D26C /* ApplePayInstallmentItemType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayInstallmentItemType.h; sourceTree = "<group>"; }; 11490 A117509E247468E600D4D26C /* ApplePayInstallmentItemType.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayInstallmentItemType.idl; sourceTree = "<group>"; }; 11491 A117509F247468E700D4D26C /* ApplePayInstallmentItem.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayInstallmentItem.idl; sourceTree = "<group>"; }; 11480 11492 A11AE0C91FFD60530047348B /* MerchantValidationEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MerchantValidationEvent.h; sourceTree = "<group>"; }; 11481 11493 A11AE0CA1FFD60530047348B /* MerchantValidationEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MerchantValidationEvent.cpp; sourceTree = "<group>"; }; … … 11494 11506 A136A00A1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XMLHttpRequestProgressEventThrottle.cpp; sourceTree = "<group>"; }; 11495 11507 A136A00B1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLHttpRequestProgressEventThrottle.h; sourceTree = "<group>"; }; 11508 A13B61672475DFC500BBE6DE /* ApplePayInstallmentRetailChannel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayInstallmentRetailChannel.h; sourceTree = "<group>"; }; 11509 A13B61692475DFC500BBE6DE /* ApplePayInstallmentRetailChannel.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayInstallmentRetailChannel.idl; sourceTree = "<group>"; }; 11510 A13B616C2475E31000BBE6DE /* JSApplePayInstallmentRetailChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayInstallmentRetailChannel.cpp; sourceTree = "<group>"; }; 11511 A13B616D2475E31000BBE6DE /* JSApplePayInstallmentConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayInstallmentConfiguration.cpp; sourceTree = "<group>"; }; 11512 A13B616E2475E31100BBE6DE /* JSApplePayInstallmentItemType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayInstallmentItemType.h; sourceTree = "<group>"; }; 11513 A13B616F2475E31200BBE6DE /* JSApplePayInstallmentRetailChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayInstallmentRetailChannel.h; sourceTree = "<group>"; }; 11514 A13B61702475E31300BBE6DE /* JSApplePayInstallmentItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayInstallmentItem.cpp; sourceTree = "<group>"; }; 11515 A13B61712475E31400BBE6DE /* JSApplePayInstallmentItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayInstallmentItem.h; sourceTree = "<group>"; }; 11516 A13B61722475E31500BBE6DE /* JSApplePayInstallmentConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayInstallmentConfiguration.h; sourceTree = "<group>"; }; 11517 A13B61732475E31600BBE6DE /* JSApplePayInstallmentItemType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayInstallmentItemType.cpp; sourceTree = "<group>"; }; 11496 11518 A14061891E2ECA0A0032B34E /* MockPreviewLoaderClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockPreviewLoaderClient.cpp; sourceTree = "<group>"; }; 11497 11519 A140618A1E2ECA0A0032B34E /* MockPreviewLoaderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockPreviewLoaderClient.h; sourceTree = "<group>"; }; … … 17365 17387 5C53DCD52446449B00A93124 /* ApplePayInstallmentConfiguration.idl */, 17366 17388 5C53DCD02446449A00A93124 /* ApplePayInstallmentConfigurationWebCore.h */, 17389 A117509C247468E500D4D26C /* ApplePayInstallmentItem.h */, 17390 A117509F247468E700D4D26C /* ApplePayInstallmentItem.idl */, 17391 A117509D247468E600D4D26C /* ApplePayInstallmentItemType.h */, 17392 A117509E247468E600D4D26C /* ApplePayInstallmentItemType.idl */, 17393 A13B61672475DFC500BBE6DE /* ApplePayInstallmentRetailChannel.h */, 17394 A13B61692475DFC500BBE6DE /* ApplePayInstallmentRetailChannel.idl */, 17367 17395 7C6579E21E00827000E3A27A /* ApplePayLineItem.h */, 17368 17396 7C6579E41E0082C800E3A27A /* ApplePayLineItem.idl */, … … 17561 17589 A1BB85AC2159B19F0067E07D /* JSApplePayErrorContactField.cpp */, 17562 17590 A1BB85AF2159B1A00067E07D /* JSApplePayErrorContactField.h */, 17591 A13B616D2475E31000BBE6DE /* JSApplePayInstallmentConfiguration.cpp */, 17592 A13B61722475E31500BBE6DE /* JSApplePayInstallmentConfiguration.h */, 17593 A13B61702475E31300BBE6DE /* JSApplePayInstallmentItem.cpp */, 17594 A13B61712475E31400BBE6DE /* JSApplePayInstallmentItem.h */, 17595 A13B61732475E31600BBE6DE /* JSApplePayInstallmentItemType.cpp */, 17596 A13B616E2475E31100BBE6DE /* JSApplePayInstallmentItemType.h */, 17597 A13B616C2475E31000BBE6DE /* JSApplePayInstallmentRetailChannel.cpp */, 17598 A13B616F2475E31200BBE6DE /* JSApplePayInstallmentRetailChannel.h */, 17563 17599 7C6579E91E00856600E3A27A /* JSApplePayLineItem.cpp */, 17564 17600 7C6579EA1E00856600E3A27A /* JSApplePayLineItem.h */, … … 29573 29609 A1BB859C2159AEA10067E07D /* ApplePayErrorCode.h in Headers */, 29574 29610 A1BB85A32159AF570067E07D /* ApplePayErrorContactField.h in Headers */, 29611 A117509A247468D600D4D26C /* ApplePayInstallmentConfigurationWebCore.h in Headers */, 29612 A11750A0247468F300D4D26C /* ApplePayInstallmentItem.h in Headers */, 29613 A11750A1247468F700D4D26C /* ApplePayInstallmentItemType.h in Headers */, 29614 A13B616B2475E04800BBE6DE /* ApplePayInstallmentRetailChannel.h in Headers */, 29575 29615 7C6579E31E00827000E3A27A /* ApplePayLineItem.h in Headers */, 29576 29616 A1DF5A861F7EBDF20058A477 /* ApplePayMerchantCapability.h in Headers */, … … 31039 31079 A1BB85B22159B1A10067E07D /* JSApplePayErrorCode.h in Headers */, 31040 31080 A1BB85B32159B1A10067E07D /* JSApplePayErrorContactField.h in Headers */, 31081 A13B61742475E34200BBE6DE /* JSApplePayInstallmentConfiguration.h in Headers */, 31082 A13B61752475E35F00BBE6DE /* JSApplePayInstallmentItem.h in Headers */, 31083 A13B61762475E37A00BBE6DE /* JSApplePayInstallmentItemType.h in Headers */, 31084 A13B61772475E3A300BBE6DE /* JSApplePayInstallmentRetailChannel.h in Headers */, 31041 31085 7C6579F01E00856600E3A27A /* JSApplePayLineItem.h in Headers */, 31042 31086 A1DF5A8E1F7EC0020058A477 /* JSApplePayMerchantCapability.h in Headers */,
Note: See TracChangeset
for help on using the changeset viewer.