Diff
Modified: trunk/LayoutTests/ChangeLog (261784 => 261785)
--- trunk/LayoutTests/ChangeLog 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/LayoutTests/ChangeLog 2020-05-16 19:13:58 UTC (rev 261785)
@@ -1,3 +1,14 @@
+2020-05-16 Andy Estes <[email protected]>
+
+ REGRESSION (r260717): installmentConfiguration member is no longer available on ApplePayPaymentRequest
+ https://bugs.webkit.org/show_bug.cgi?id=211911
+ <rdar://problem/63236367>
+
+ Reviewed by Tim Horton.
+
+ * http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https-expected.txt: Added.
+ * http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html: Added.
+
2020-05-16 Zalan Bujtas <[email protected]>
[LFC][TFC] Ignore table padding when borders are collapsed
Added: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https-expected.txt (0 => 261785)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https-expected.txt 2020-05-16 19:13:58 UTC (rev 261785)
@@ -0,0 +1,17 @@
+Test ApplePayInstallmentConfiguration.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS internals.mockPaymentCoordinator.installmentConfiguration.bindingTotalAmount is expectedBindingTotalAmount
+PASS internals.mockPaymentCoordinator.installmentConfiguration.currencyCode is expectedCurrencyCode
+PASS internals.mockPaymentCoordinator.installmentConfiguration.featureType is expectedFeatureType
+PASS internals.mockPaymentCoordinator.installmentConfiguration.isInStorePurchase is expectedIsInStorePurchase
+PASS internals.mockPaymentCoordinator.installmentConfiguration.merchandisingImageData is expectedMerchandisingImageData
+PASS internals.mockPaymentCoordinator.installmentConfiguration.merchantIdentifier is expectedMerchantIdentifier
+PASS internals.mockPaymentCoordinator.installmentConfiguration.openToBuyThresholdAmount is expectedOpenToBuyThresholdAmount
+PASS internals.mockPaymentCoordinator.installmentConfiguration.referrerIdentifier is expectedReferrerIdentifier
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html (0 => 261785)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html (rev 0)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html 2020-05-16 19:13:58 UTC (rev 261785)
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<script>
+
+description("Test ApplePayInstallmentConfiguration.");
+
+window.jsTestIsAsync = true;
+
+expectedBindingTotalAmount = '1.00';
+expectedCurrencyCode = 'USD';
+expectedFeatureType = 'appleCard';
+expectedIsInStorePurchase = false;
+expectedMerchandisingImageData = 'dGVzdA==';
+expectedMerchantIdentifier = 'merchant';
+expectedOpenToBuyThresholdAmount = '2.50';
+expectedReferrerIdentifier = 'referrer';
+
+function validRequest()
+{
+ return {
+ countryCode: 'US',
+ currencyCode: 'USD',
+ supportedNetworks: ['visa', 'masterCard'],
+ merchantCapabilities: ['supports3DS'],
+ total: { label: 'Your Label', amount: '10.00' },
+ installmentConfiguration: {
+ bindingTotalAmount: expectedBindingTotalAmount,
+ currencyCode: expectedCurrencyCode,
+ merchandisingImageData: expectedMerchandisingImageData,
+ merchantIdentifier: expectedMerchantIdentifier,
+ openToBuyThresholdAmount: expectedOpenToBuyThresholdAmount,
+ referrerIdentifier: expectedReferrerIdentifier,
+ },
+ }
+}
+
+activateThen(() => {
+ var session = new ApplePaySession(8, validRequest());
+ session.begin();
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.bindingTotalAmount', 'expectedBindingTotalAmount');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.currencyCode', 'expectedCurrencyCode');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.featureType', 'expectedFeatureType');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.isInStorePurchase', 'expectedIsInStorePurchase');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.merchandisingImageData', 'expectedMerchandisingImageData');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.merchantIdentifier', 'expectedMerchantIdentifier');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.openToBuyThresholdAmount', 'expectedOpenToBuyThresholdAmount');
+ shouldBe('internals.mockPaymentCoordinator.installmentConfiguration.referrerIdentifier', 'expectedReferrerIdentifier');
+ internals.mockPaymentCoordinator.cancelPayment();
+ finishJSTest();
+});
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (261784 => 261785)
--- trunk/LayoutTests/platform/mac-wk2/TestExpectations 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations 2020-05-16 19:13:58 UTC (rev 261785)
@@ -36,6 +36,9 @@
http/tests/ssl/applepay/ [ Pass ]
+# ApplePayInstallmentConfiguration was first available in Catalina.
+[ Mojave ] http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html [ Skip ]
+
fast/visual-viewport/rubberbanding-viewport-rects.html [ Pass ]
fast/visual-viewport/rubberbanding-viewport-rects-header-footer.html [ Pass ]
Modified: trunk/Source/WebCore/ChangeLog (261784 => 261785)
--- trunk/Source/WebCore/ChangeLog 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/ChangeLog 2020-05-16 19:13:58 UTC (rev 261785)
@@ -1,3 +1,36 @@
+2020-05-16 Andy Estes <[email protected]>
+
+ REGRESSION (r260717): installmentConfiguration member is no longer available on ApplePayPaymentRequest
+ https://bugs.webkit.org/show_bug.cgi?id=211911
+ <rdar://problem/63236367>
+
+ Reviewed by Tim Horton.
+
+ Prior to r260717, installmentConfiguration was a member of ApplePayRequestBase, making it
+ available on ApplePayRequest and ApplePayPaymentRequest. In r260717, it was mistakenly
+ moved to ApplePayRequest.
+
+ This change moves it back to ApplePayRequestBase, adds infrastructure for regression testing
+ ApplePayInstallmentConfiguration, and adds a regression test.
+
+ Test: http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html
+
+ * Modules/applepay/ApplePayInstallmentConfiguration.idl:
+ * Modules/applepay/ApplePayRequestBase.cpp:
+ (WebCore::convertAndValidate):
+ (WebCore::finishConverting): Deleted.
+ * Modules/applepay/ApplePayRequestBase.idl:
+ * Modules/applepay/PaymentInstallmentConfiguration.mm:
+ (WebCore::fromDecimalNumber):
+ (WebCore::applePaySetupFeatureType):
+ (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const):
+ * Modules/applepay/PaymentInstallmentConfigurationWebCore.h:
+ * Modules/applepay/paymentrequest/ApplePayRequest.idl:
+ * testing/MockPaymentCoordinator.cpp:
+ (WebCore::MockPaymentCoordinator::showPaymentUI):
+ * testing/MockPaymentCoordinator.h:
+ * testing/MockPaymentCoordinator.idl:
+
2020-05-16 Zalan Bujtas <[email protected]>
[LFC][TFC] Ignore table padding when borders are collapsed
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentConfiguration.idl (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentConfiguration.idl 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayInstallmentConfiguration.idl 2020-05-16 19:13:58 UTC (rev 261785)
@@ -25,6 +25,8 @@
[
Conditional=APPLE_PAY_INSTALLMENTS,
+ ExportMacro=WEBCORE_EXPORT,
+ JSGenerateToJSObject,
] dictionary ApplePayInstallmentConfiguration {
ApplePaySetupFeatureType featureType = "appleCard";
DOMString merchandisingImageData;
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp 2020-05-16 19:13:58 UTC (rev 261785)
@@ -33,17 +33,6 @@
namespace WebCore {
-static void finishConverting(ApplePaySessionPaymentRequest& result, ApplePayRequestBase& request)
-{
-#if ENABLE(APPLE_PAY_INSTALLMENTS)
- if (request.installmentConfiguration)
- result.setInstallmentConfiguration(WTFMove(*request.installmentConfiguration));
-#else
- UNUSED_PARAM(result);
- UNUSED_PARAM(request);
-#endif
-}
-
static bool requiresSupportedNetworks(unsigned version, const ApplePayRequestBase& request)
{
#if ENABLE(APPLE_PAY_INSTALLMENTS)
@@ -116,7 +105,10 @@
if (version >= 3)
result.setSupportedCountries(WTFMove(request.supportedCountries));
- finishConverting(result, request);
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ if (request.installmentConfiguration)
+ result.setInstallmentConfiguration(WTFMove(*request.installmentConfiguration));
+#endif
return WTFMove(result);
}
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl 2020-05-16 19:13:58 UTC (rev 261785)
@@ -38,4 +38,6 @@
DOMString applicationData;
[Conditional=APPLE_PAY_SESSION_V3] sequence<DOMString> supportedCountries;
+
+ [Conditional=APPLE_PAY_INSTALLMENTS] ApplePayInstallmentConfiguration installmentConfiguration;
};
Modified: trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfiguration.mm (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfiguration.mm 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfiguration.mm 2020-05-16 19:13:58 UTC (rev 261785)
@@ -41,6 +41,15 @@
return [NSDecimalNumber decimalNumberWithString:amount locale:@{ NSLocaleDecimalSeparator : @"." }];
}
+static String fromDecimalNumber(NSDecimalNumber *number)
+{
+ auto numberFormatter = adoptNS([[NSNumberFormatter alloc] init]);
+ numberFormatter.numberStyle = NSNumberFormatterNoStyle;
+ numberFormatter.minimumIntegerDigits = 1;
+ numberFormatter.minimumFractionDigits = 2;
+ return [numberFormatter stringFromNumber:number];
+}
+
static PKPaymentSetupFeatureType platformFeatureType(const ApplePaySetupFeatureType& featureType)
{
switch (featureType) {
@@ -53,6 +62,18 @@
}
}
+static ApplePaySetupFeatureType applePaySetupFeatureType(PKPaymentSetupFeatureType featureType)
+{
+ switch (featureType) {
+ case PKPaymentSetupFeatureTypeApplePay:
+ return ApplePaySetupFeatureType::ApplePay;
+ ALLOW_DEPRECATED_DECLARATIONS_BEGIN
+ case PKPaymentSetupFeatureTypeApplePay_X:
+ ALLOW_DEPRECATED_DECLARATIONS_END
+ return ApplePaySetupFeatureType::AppleCard;
+ }
+}
+
static RetainPtr<PKPaymentInstallmentConfiguration> createPlatformConfiguration(const ApplePayInstallmentConfiguration& coreConfiguration)
{
auto configuration = adoptNS([PAL::allocPKPaymentInstallmentConfigurationInstance() init]);
@@ -94,6 +115,31 @@
return m_configuration.get();
}
+ApplePayInstallmentConfiguration PaymentInstallmentConfiguration::applePayInstallmentConfiguration() const
+{
+ ApplePayInstallmentConfiguration installmentConfiguration;
+
+ installmentConfiguration.featureType = applePaySetupFeatureType([m_configuration feature]);
+
+ installmentConfiguration.bindingTotalAmount = fromDecimalNumber([m_configuration bindingTotalAmount]);
+ installmentConfiguration.currencyCode = [m_configuration currencyCode];
+ installmentConfiguration.isInStorePurchase = [m_configuration isInStorePurchase];
+ installmentConfiguration.openToBuyThresholdAmount = fromDecimalNumber([m_configuration openToBuyThresholdAmount]);
+
+ installmentConfiguration.merchandisingImageData = [[m_configuration merchandisingImageData] base64EncodedStringWithOptions:0];
+
+#if HAVE(PASSKIT_INSTALLMENT_IDENTIFIERS)
+#if PLATFORM(MAC)
+ if (![m_configuration respondsToSelector:@selector(installmentMerchantIdentifier)] || ![m_configuration respondsToSelector:@selector(referrerIdentifier)])
+ return installmentConfiguration;
+#endif
+ installmentConfiguration.merchantIdentifier = [m_configuration installmentMerchantIdentifier];
+ installmentConfiguration.referrerIdentifier = [m_configuration referrerIdentifier];
+#endif
+
+ return installmentConfiguration;
+}
+
} // namespace WebCore
#endif // HAVE(PASSKIT_INSTALLMENTS)
Modified: trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfigurationWebCore.h (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfigurationWebCore.h 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/PaymentInstallmentConfigurationWebCore.h 2020-05-16 19:13:58 UTC (rev 261785)
@@ -42,6 +42,7 @@
PaymentInstallmentConfiguration(RetainPtr<PKPaymentInstallmentConfiguration>&&);
PKPaymentInstallmentConfiguration *platformConfiguration() const;
+ ApplePayInstallmentConfiguration applePayInstallmentConfiguration() const;
private:
RetainPtr<PKPaymentInstallmentConfiguration> m_configuration;
Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl (261784 => 261785)
--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl 2020-05-16 19:13:58 UTC (rev 261785)
@@ -28,5 +28,4 @@
] dictionary ApplePayRequest : ApplePayRequestBase {
required unsigned long version;
required DOMString merchantIdentifier;
- [Conditional=APPLE_PAY_INSTALLMENTS] ApplePayInstallmentConfiguration installmentConfiguration;
};
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp (261784 => 261785)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2020-05-16 19:13:58 UTC (rev 261785)
@@ -109,6 +109,9 @@
m_shippingMethods = convert(request.shippingMethods());
m_requiredBillingContactFields = request.requiredBillingContactFields();
m_requiredShippingContactFields = request.requiredShippingContactFields();
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ m_installmentConfiguration = request.installmentConfiguration().applePayInstallmentConfiguration();
+#endif
ASSERT(showCount == hideCount);
++showCount;
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.h (261784 => 261785)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2020-05-16 19:13:58 UTC (rev 261785)
@@ -27,6 +27,7 @@
#if ENABLE(APPLE_PAY)
+#include "ApplePayInstallmentConfigurationWebCore.h"
#include "ApplePayLineItem.h"
#include "ApplePayShippingMethod.h"
#include "MockPaymentAddress.h"
@@ -62,6 +63,10 @@
bool supportsUnrestrictedApplePay() const final { return m_supportsUnrestrictedApplePay; }
void setSupportsUnrestrictedApplePay(bool supports) { m_supportsUnrestrictedApplePay = supports; }
+
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ ApplePayInstallmentConfiguration installmentConfiguration() const { return m_installmentConfiguration; }
+#endif
void ref() const { }
void deref() const { }
@@ -99,6 +104,9 @@
MockPaymentContactFields m_requiredBillingContactFields;
MockPaymentContactFields m_requiredShippingContactFields;
bool m_supportsUnrestrictedApplePay { true };
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ ApplePayInstallmentConfiguration m_installmentConfiguration;
+#endif
};
} // namespace WebCore
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.idl (261784 => 261785)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.idl 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.idl 2020-05-16 19:13:58 UTC (rev 261785)
@@ -43,4 +43,6 @@
readonly attribute MockPaymentContactFields requiredShippingContactFields;
attribute boolean supportsUnrestrictedApplePay;
+
+ [Conditional=APPLE_PAY_INSTALLMENTS] readonly attribute ApplePayInstallmentConfiguration installmentConfiguration;
};
Modified: trunk/Source/WebKit/ChangeLog (261784 => 261785)
--- trunk/Source/WebKit/ChangeLog 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebKit/ChangeLog 2020-05-16 19:13:58 UTC (rev 261785)
@@ -1,3 +1,17 @@
+2020-05-16 Andy Estes <[email protected]>
+
+ REGRESSION (r260717): installmentConfiguration member is no longer available on ApplePayPaymentRequest
+ https://bugs.webkit.org/show_bug.cgi?id=211911
+ <rdar://problem/63236367>
+
+ Reviewed by Tim Horton.
+
+ * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
+ (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::encode):
+ (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::decode):
+ (IPC::finishDecoding): Deleted.
+ (IPC::finishEncoding): Deleted.
+
2020-05-16 Yury Semikhatsky <[email protected]>
[GTK] Do not leak pages created by window.open
Modified: trunk/Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm (261784 => 261785)
--- trunk/Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm 2020-05-16 17:10:18 UTC (rev 261784)
+++ trunk/Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm 2020-05-16 19:13:58 UTC (rev 261785)
@@ -64,33 +64,6 @@
#if ENABLE(APPLE_PAY)
-static bool finishDecoding(Decoder& decoder, WebCore::ApplePaySessionPaymentRequest& request)
-{
-#if ENABLE(APPLE_PAY_INSTALLMENTS)
- Optional<WebCore::PaymentInstallmentConfiguration> installmentConfiguration;
- decoder >> installmentConfiguration;
- if (!installmentConfiguration)
- return false;
-
- request.setInstallmentConfiguration(WTFMove(*installmentConfiguration));
- return true;
-#else
- UNUSED_PARAM(decoder);
- UNUSED_PARAM(request);
- return true;
-#endif
-}
-
-static void finishEncoding(Encoder& encoder, const WebCore::ApplePaySessionPaymentRequest& request)
-{
-#if ENABLE(APPLE_PAY_INSTALLMENTS)
- encoder << request.installmentConfiguration();
-#else
- UNUSED_PARAM(encoder);
- UNUSED_PARAM(request);
-#endif
-}
-
#if HAVE(PASSKIT_INSTALLMENTS)
void ArgumentCoder<WebCore::PaymentInstallmentConfiguration>::encode(Encoder& encoder, const WebCore::PaymentInstallmentConfiguration& configuration)
@@ -244,7 +217,9 @@
encoder << request.applicationData();
encoder << request.supportedCountries();
encoder.encodeEnum(request.requester());
- finishEncoding(encoder, request);
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ encoder << request.installmentConfiguration();
+#endif
}
bool ArgumentCoder<ApplePaySessionPaymentRequest>::decode(Decoder& decoder, ApplePaySessionPaymentRequest& request)
@@ -326,10 +301,16 @@
if (!decoder.decodeEnum(requester))
return false;
request.setRequester(requester);
-
- if (!finishDecoding(decoder, request))
+
+#if ENABLE(APPLE_PAY_INSTALLMENTS)
+ Optional<WebCore::PaymentInstallmentConfiguration> installmentConfiguration;
+ decoder >> installmentConfiguration;
+ if (!installmentConfiguration)
return false;
+ request.setInstallmentConfiguration(WTFMove(*installmentConfiguration));
+#endif
+
return true;
}