Diff
Modified: trunk/LayoutTests/ChangeLog (226122 => 226123)
--- trunk/LayoutTests/ChangeLog 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/LayoutTests/ChangeLog 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,3 +1,15 @@
+2017-12-19 Andy Estes <[email protected]>
+
+ [Apple Pay] Stop maintaining a list of payment networks
+ https://bugs.webkit.org/show_bug.cgi?id=180965
+ <rdar://problem/34696560>
+
+ Reviewed by Tim Horton.
+
+ * http/tests/ssl/applepay/ApplePaySession-expected.txt:
+ * http/tests/ssl/applepay/ApplePaySession.html: Added a test case for network names with
+ varying capitalization.
+
2017-12-19 Ms2ger <[email protected]>
[WPE] Enable the rest of the wpt html tests.
Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession-expected.txt (226122 => 226123)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession-expected.txt 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession-expected.txt 2017-12-19 17:49:29 UTC (rev 226123)
@@ -82,6 +82,9 @@
SETUP: request = validRequest(); request.supportedNetworks = ['visa', 'visa'];
PASS new ApplePaySession(2, request) did not throw exception.
+SETUP: request = validRequest(); request.supportedNetworks = ['vIsa', 'MasterCard', 'JCB'];
+PASS new ApplePaySession(2, request) did not throw exception.
+
Testing PaymentRequest.merchantCapabilities
SETUP: request = validRequest(); delete request.merchantCapabilities;
Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession.html (226122 => 226123)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession.html 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePaySession.html 2017-12-19 17:49:29 UTC (rev 226123)
@@ -75,6 +75,7 @@
logAndShouldThrow("request = validRequest(); request.supportedNetworks = ['carteBancaire'];", "new ApplePaySession(2, request)")
// FIXME: Should duplicate supportedNetworks be allowed?
logAndShouldNotThrow("request = validRequest(); request.supportedNetworks = ['visa', 'visa'];", "new ApplePaySession(2, request)")
+ logAndShouldNotThrow("request = validRequest(); request.supportedNetworks = ['vIsa', 'MasterCard', 'JCB'];", "new ApplePaySession(2, request)")
debug("Testing PaymentRequest.merchantCapabilities")
debug("");
Modified: trunk/Source/WebCore/ChangeLog (226122 => 226123)
--- trunk/Source/WebCore/ChangeLog 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/ChangeLog 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,3 +1,47 @@
+2017-12-19 Andy Estes <[email protected]>
+
+ [Apple Pay] Stop maintaining a list of payment networks
+ https://bugs.webkit.org/show_bug.cgi?id=180965
+ <rdar://problem/34696560>
+
+ Reviewed by Tim Horton.
+
+ Instead of maintaining the list of valid payment networks in WebCore, allow the client to
+ provide the list when constructing a PaymentCoordinator. Then, use PaymentCoordinator's list
+ to validate ApplePaySessionPaymentRequests.
+
+ Validation will now be done case-insensitively since Cocoa clients will provide a list of
+ network names that differ in capitalization from the names formerly accepted by WebCore.
+
+ Added new test cases to http/tests/ssl/applepay/ApplePaySession.html.
+
+ * Modules/applepay/ApplePayRequestBase.cpp:
+ (WebCore::convertAndValidate): Changed to return a Vector of validated strings.
+ (WebCore::validate): Renamed to convertAndValidate.
+ * Modules/applepay/ApplePayRequestBase.h:
+ * Modules/applepay/ApplePaySession.cpp:
+ (WebCore::convertAndValidate):
+ (WebCore::ApplePaySession::create):
+ * Modules/applepay/ApplePaySessionPaymentRequest.cpp:
+ (WebCore::ApplePaySessionPaymentRequest::isValidSupportedNetwork): Deleted.
+ * Modules/applepay/ApplePaySessionPaymentRequest.h:
+ * Modules/applepay/PaymentCoordinator.cpp:
+ (WebCore::toHashSet):
+ (WebCore::PaymentCoordinator::PaymentCoordinator): Converted availablePaymentNetworks to a
+ case-insensitive HashSet and stored in m_availablePaymentNetworks.
+ (WebCore::PaymentCoordinator::validatedPaymentNetwork const): Added special cases for "jcb"
+ and "carteBancaire" for API compatibility. For other networks, checked m_availablePaymentNetworks.
+ * Modules/applepay/PaymentCoordinator.h:
+ * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
+ (WebCore::ApplePayPaymentHandler::show):
+ * page/MainFrame.cpp:
+ (WebCore::MainFrame::MainFrame): Constructed m_paymentCoordinator with configuration.availablePaymentNetworks.
+ * page/PageConfiguration.h:
+ * testing/Internals.cpp:
+ (WebCore::Internals::Internals):
+ * testing/MockPaymentCoordinator.cpp:
+ * testing/MockPaymentCoordinator.h:
+
2017-12-19 Wenson Hsieh <[email protected]>
Unreviewed, try to fix the Windows build after r226097.
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -28,22 +28,28 @@
#if ENABLE(APPLE_PAY)
+#include "PaymentCoordinator.h"
+
namespace WebCore {
-static ExceptionOr<void> validate(unsigned version, const Vector<String>& supportedNetworks)
+static ExceptionOr<Vector<String>> convertAndValidate(unsigned version, const Vector<String>& supportedNetworks, const PaymentCoordinator& paymentCoordinator)
{
if (supportedNetworks.isEmpty())
return Exception { TypeError, "At least one supported network must be provided." };
+ Vector<String> result;
+ result.reserveInitialCapacity(supportedNetworks.size());
for (auto& supportedNetwork : supportedNetworks) {
- if (!ApplePaySessionPaymentRequest::isValidSupportedNetwork(version, supportedNetwork))
- return Exception { TypeError, makeString("\"" + supportedNetwork, "\" is not a valid payment network.") };
+ auto validatedNetwork = paymentCoordinator.validatedPaymentNetwork(version, supportedNetwork);
+ if (!validatedNetwork)
+ return Exception { TypeError, makeString("\"", supportedNetwork, "\" is not a valid payment network.") };
+ result.uncheckedAppend(*validatedNetwork);
}
- return { };
+ return WTFMove(result);
}
-ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayRequestBase& request)
+ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayRequestBase& request, const PaymentCoordinator& paymentCoordinator)
{
ApplePaySessionPaymentRequest result;
result.setCountryCode(request.countryCode);
@@ -53,10 +59,10 @@
return merchantCapabilities.releaseException();
result.setMerchantCapabilities(merchantCapabilities.releaseReturnValue());
- auto exception = validate(version, WTFMove(request.supportedNetworks));
- if (exception.hasException())
- return exception.releaseException();
- result.setSupportedNetworks(request.supportedNetworks);
+ auto supportedNetworks = convertAndValidate(version, request.supportedNetworks, paymentCoordinator);
+ if (supportedNetworks.hasException())
+ return supportedNetworks.releaseException();
+ result.setSupportedNetworks(supportedNetworks.releaseReturnValue());
if (request.requiredBillingContactFields) {
auto requiredBillingContactFields = convertAndValidate(version, *request.requiredBillingContactFields);
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -33,6 +33,8 @@
namespace WebCore {
+class PaymentCoordinator;
+
struct ApplePayRequestBase {
Vector<ApplePayMerchantCapability> merchantCapabilities;
Vector<String> supportedNetworks;
@@ -45,7 +47,7 @@
Vector<String> supportedCountries;
};
-ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayRequestBase&);
+ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayRequestBase&, const PaymentCoordinator&);
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -207,9 +207,9 @@
return WTFMove(result);
}
-static ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayPaymentRequest&& paymentRequest)
+static ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayPaymentRequest&& paymentRequest, const PaymentCoordinator& paymentCoordinator)
{
- auto convertedRequest = convertAndValidate(version, paymentRequest);
+ auto convertedRequest = convertAndValidate(version, paymentRequest, paymentCoordinator);
if (convertedRequest.hasException())
return convertedRequest.releaseException();
@@ -413,7 +413,7 @@
if (!version || !paymentCoordinator.supportsVersion(version))
return Exception { InvalidAccessError, makeString("\"" + String::number(version), "\" is not a supported version.") };
- auto convertedPaymentRequest = convertAndValidate(version, WTFMove(paymentRequest));
+ auto convertedPaymentRequest = convertAndValidate(version, WTFMove(paymentRequest), paymentCoordinator);
if (convertedPaymentRequest.hasException())
return convertedPaymentRequest.releaseException();
Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.cpp (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -37,30 +37,6 @@
ApplePaySessionPaymentRequest::~ApplePaySessionPaymentRequest() = default;
-bool ApplePaySessionPaymentRequest::isValidSupportedNetwork(unsigned version, const String& supportedNetwork)
-{
- if (supportedNetwork == "amex")
- return true;
- if (supportedNetwork == "chinaUnionPay")
- return true;
- if (supportedNetwork == "discover")
- return true;
- if (supportedNetwork == "interac")
- return true;
- if (supportedNetwork == "masterCard")
- return true;
- if (supportedNetwork == "privateLabel")
- return true;
- if (supportedNetwork == "visa")
- return true;
- if (version >= 2 && supportedNetwork == "jcb")
- return true;
- if (version >= 3 && supportedNetwork == "carteBancaire")
- return true;
-
- return false;
-}
-
bool isFinalStateResult(const std::optional<PaymentAuthorizationResult>& result)
{
if (!result)
Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -68,8 +68,6 @@
const PaymentContact& shippingContact() const { return m_shippingContact; }
void setShippingContact(const PaymentContact& shippingContact) { m_shippingContact = shippingContact; }
- static bool isValidSupportedNetwork(unsigned version, const String&);
-
const Vector<String>& supportedNetworks() const { return m_supportedNetworks; }
void setSupportedNetworks(const Vector<String>& supportedNetworks) { m_supportedNetworks = supportedNetworks; }
Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,11 +35,20 @@
namespace WebCore {
-PaymentCoordinator::PaymentCoordinator(PaymentCoordinatorClient& client)
- : m_client(client)
+static HashSet<String, ASCIICaseInsensitiveHash> toHashSet(const Vector<String>& values)
{
+ HashSet<String, ASCIICaseInsensitiveHash> result;
+ for (auto& value : values)
+ result.add(value);
+ return result;
}
+PaymentCoordinator::PaymentCoordinator(PaymentCoordinatorClient& client, const Vector<String>& availablePaymentNetworks)
+ : m_client { client }
+ , m_availablePaymentNetworks { toHashSet(availablePaymentNetworks) }
+{
+}
+
PaymentCoordinator::~PaymentCoordinator()
{
m_client.paymentCoordinatorDestroyed();
@@ -194,6 +203,21 @@
m_activeSession = nullptr;
}
+std::optional<String> PaymentCoordinator::validatedPaymentNetwork(unsigned version, const String& paymentNetwork) const
+{
+ if (version < 2 && equalIgnoringASCIICase(paymentNetwork, "jcb"))
+ return std::nullopt;
+
+ if (version < 3 && equalIgnoringASCIICase(paymentNetwork, "carteBancaire"))
+ return std::nullopt;
+
+ auto result = m_availablePaymentNetworks.find(paymentNetwork);
+ if (result == m_availablePaymentNetworks.end())
+ return std::nullopt;
+
+ return *result;
}
-#endif
+} // namespace WebCore
+
+#endif // ENABLE(APPLE_PAY)
Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -29,6 +29,7 @@
#include "ApplePaySessionPaymentRequest.h"
#include <wtf/Function.h>
+#include <wtf/text/StringHash.h>
namespace WebCore {
@@ -47,7 +48,7 @@
class PaymentCoordinator {
public:
- WEBCORE_EXPORT explicit PaymentCoordinator(PaymentCoordinatorClient&);
+ WEBCORE_EXPORT PaymentCoordinator(PaymentCoordinatorClient&, const Vector<String>& availablePaymentNetworks);
WEBCORE_EXPORT ~PaymentCoordinator();
bool supportsVersion(unsigned version) const;
@@ -73,10 +74,13 @@
WEBCORE_EXPORT void didSelectShippingContact(const PaymentContact&);
WEBCORE_EXPORT void didCancelPaymentSession();
+ std::optional<String> validatedPaymentNetwork(unsigned version, const String&) const;
+
private:
PaymentCoordinatorClient& m_client;
RefPtr<PaymentSession> m_activeSession;
+ HashSet<String, ASCIICaseInsensitiveHash> m_availablePaymentNetworks;
};
}
Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp (226122 => 226123)
--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -174,7 +174,7 @@
ExceptionOr<void> ApplePayPaymentHandler::show()
{
- auto validatedRequest = convertAndValidate(m_applePayRequest->version, *m_applePayRequest);
+ auto validatedRequest = convertAndValidate(m_applePayRequest->version, *m_applePayRequest, paymentCoordinator());
if (validatedRequest.hasException())
return validatedRequest.releaseException();
Modified: trunk/Source/WebCore/PAL/ChangeLog (226122 => 226123)
--- trunk/Source/WebCore/PAL/ChangeLog 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/PAL/ChangeLog 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,3 +1,13 @@
+2017-12-19 Andy Estes <[email protected]>
+
+ [Apple Pay] Stop maintaining a list of payment networks
+ https://bugs.webkit.org/show_bug.cgi?id=180965
+ <rdar://problem/34696560>
+
+ Reviewed by Tim Horton.
+
+ * pal/spi/cocoa/PassKitSPI.h: Defined +[PKPaymentRequest availableNetworks].
+
2017-12-14 David Kilzer <[email protected]>
Fix 32-bit build: Enable -Wstrict-prototypes for WebKit
Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/PassKitSPI.h (226122 => 226123)
--- trunk/Source/WebCore/PAL/pal/spi/cocoa/PassKitSPI.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/PassKitSPI.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -176,6 +176,7 @@
@end
@interface PKPaymentRequest : NSObject
++ (NSArray<PKPaymentNetwork> *)availableNetworks;
@property (nonatomic, copy) NSString *countryCode;
@property (nonatomic, copy) NSArray<PKPaymentNetwork> *supportedNetworks;
@property (nonatomic, assign) PKMerchantCapability merchantCapabilities;
Modified: trunk/Source/WebCore/page/MainFrame.cpp (226122 => 226123)
--- trunk/Source/WebCore/page/MainFrame.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/page/MainFrame.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -49,7 +49,7 @@
, m_recentWheelEventDeltaFilter(WheelEventDeltaFilter::create())
, m_pageOverlayController(std::make_unique<PageOverlayController>(*this))
#if ENABLE(APPLE_PAY)
- , m_paymentCoordinator(std::make_unique<PaymentCoordinator>(*configuration.paymentCoordinatorClient))
+ , m_paymentCoordinator(std::make_unique<PaymentCoordinator>(*configuration.paymentCoordinatorClient, configuration.availablePaymentNetworks))
#endif
#if ENABLE(APPLICATION_MANIFEST)
, m_applicationManifest(configuration.applicationManifest)
Modified: trunk/Source/WebCore/page/PageConfiguration.h (226122 => 226123)
--- trunk/Source/WebCore/page/PageConfiguration.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/page/PageConfiguration.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -78,6 +78,7 @@
InspectorClient* inspectorClient { nullptr };
#if ENABLE(APPLE_PAY)
PaymentCoordinatorClient* paymentCoordinatorClient { nullptr };
+ Vector<String> availablePaymentNetworks;
#endif
#if ENABLE(APPLICATION_MANIFEST)
Modified: trunk/Source/WebCore/testing/Internals.cpp (226122 => 226123)
--- trunk/Source/WebCore/testing/Internals.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/testing/Internals.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -520,7 +520,7 @@
auto* frame = document.frame();
if (frame && frame->isMainFrame()) {
m_mockPaymentCoordinator = new MockPaymentCoordinator(frame->mainFrame());
- frame->mainFrame().setPaymentCoordinator(std::make_unique<PaymentCoordinator>(*m_mockPaymentCoordinator));
+ frame->mainFrame().setPaymentCoordinator(std::make_unique<PaymentCoordinator>(*m_mockPaymentCoordinator, m_mockPaymentCoordinator->availablePaymentNetworks()));
}
#endif
}
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp (226122 => 226123)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -41,6 +41,15 @@
MockPaymentCoordinator::MockPaymentCoordinator(MainFrame& mainFrame)
: m_mainFrame { mainFrame }
{
+ m_availablePaymentNetworks.append("amex");
+ m_availablePaymentNetworks.append("carteBancaire");
+ m_availablePaymentNetworks.append("chinaUnionPay");
+ m_availablePaymentNetworks.append("discover");
+ m_availablePaymentNetworks.append("interac");
+ m_availablePaymentNetworks.append("jcb");
+ m_availablePaymentNetworks.append("masterCard");
+ m_availablePaymentNetworks.append("privateLabel");
+ m_availablePaymentNetworks.append("visa");
}
bool MockPaymentCoordinator::supportsVersion(unsigned version)
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.h (226122 => 226123)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -48,6 +48,7 @@
const ApplePayLineItem& total() const { return m_total; }
const Vector<ApplePayLineItem>& lineItems() const { return m_lineItems; }
+ const Vector<String>& availablePaymentNetworks() const { return m_availablePaymentNetworks; }
void ref() const { }
void deref() const { }
@@ -73,6 +74,7 @@
MockPaymentAddress m_shippingAddress;
ApplePayLineItem m_total;
Vector<ApplePayLineItem> m_lineItems;
+ Vector<String> m_availablePaymentNetworks;
};
} // namespace WebCore
Modified: trunk/Source/WebKit/ChangeLog (226122 => 226123)
--- trunk/Source/WebKit/ChangeLog 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/ChangeLog 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,3 +1,28 @@
+2017-12-19 Andy Estes <[email protected]>
+
+ [Apple Pay] Stop maintaining a list of payment networks
+ https://bugs.webkit.org/show_bug.cgi?id=180965
+ <rdar://problem/34696560>
+
+ Reviewed by Tim Horton.
+
+ * Shared/WebPageCreationParameters.cpp:
+ (WebKit::WebPageCreationParameters::encode const):
+ (WebKit::WebPageCreationParameters::decode):
+ * Shared/WebPageCreationParameters.h: Defined availablePaymentNetworks.
+ * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
+ * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
+ (WebKit::toSupportedNetworks):
+ (WebKit::WebPaymentCoordinatorProxy::availablePaymentNetworks): Called
+ +[PKPaymentRequest availableNetworks].
+ (WebKit::toSupportedNetwork): Deleted.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::creationParameters): Set parameters.availablePaymentNetworks by
+ calling WebPaymentCoordinatorProxy::availablePaymentNetworks.
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::WebPage): Set pageConfiguration.availablePaymentNetworks to
+ parameters.availablePaymentNetworks.
+
2017-12-18 Brady Eidson <[email protected]>
Add ability to API test Service Workers via a custom protocol.
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (226122 => 226123)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010, 2011, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -110,6 +110,9 @@
#if ENABLE(CONTENT_EXTENSIONS)
encoder << contentRuleLists;
#endif
+#if ENABLE(APPLE_PAY)
+ encoder << availablePaymentNetworks;
+#endif
}
std::optional<WebPageCreationParameters> WebPageCreationParameters::decode(IPC::Decoder& decoder)
@@ -311,6 +314,15 @@
return std::nullopt;
parameters.contentRuleLists = WTFMove(*contentRuleLists);
#endif
+
+#if ENABLE(APPLE_PAY)
+ std::optional<Vector<String>> availablePaymentNetworks;
+ decoder >> availablePaymentNetworks;
+ if (!availablePaymentNetworks)
+ return std::nullopt;
+ parameters.availablePaymentNetworks = WTFMove(*availablePaymentNetworks);
+#endif
+
return WTFMove(parameters);
}
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (226122 => 226123)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010, 2011, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -175,6 +175,10 @@
#if ENABLE(CONTENT_EXTENSIONS)
Vector<std::pair<String, WebCompiledContentRuleListData>> contentRuleLists;
#endif
+
+#if ENABLE(APPLE_PAY)
+ Vector<String> availablePaymentNetworks;
+#endif
};
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h (226122 => 226123)
--- trunk/Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -69,6 +69,8 @@
void hidePaymentUI();
+ static Vector<String> availablePaymentNetworks();
+
private:
// IPC::MessageReceiver.
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
Modified: trunk/Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm (226122 => 226123)
--- trunk/Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm 2017-12-19 17:49:29 UTC (rev 226123)
@@ -50,15 +50,6 @@
SOFT_LINK_CLASS(PassKit, PKPaymentRequest);
SOFT_LINK_CLASS(PassKit, PKPaymentSummaryItem);
SOFT_LINK_CLASS(PassKit, PKShippingMethod);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkAmex, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkCarteBancaire, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkChinaUnionPay, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkDiscover, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkInterac, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkJCB, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkMasterCard, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkPrivateLabel, NSString *);
-SOFT_LINK_CONSTANT(PassKit, PKPaymentNetworkVisa, NSString *);
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000)
SOFT_LINK_FRAMEWORK(Contacts)
@@ -440,39 +431,11 @@
return result;
}
-static NSString *toSupportedNetwork(const String& supportedNetwork)
-{
- if (supportedNetwork == "amex")
- return getPKPaymentNetworkAmex();
- if (supportedNetwork == "carteBancaire")
- return getPKPaymentNetworkCarteBancaire();
- if (supportedNetwork == "chinaUnionPay")
- return getPKPaymentNetworkChinaUnionPay();
- if (supportedNetwork == "discover")
- return getPKPaymentNetworkDiscover();
- if (supportedNetwork == "interac")
- return getPKPaymentNetworkInterac();
- if (supportedNetwork == "jcb")
- return getPKPaymentNetworkJCB();
- if (supportedNetwork == "masterCard")
- return getPKPaymentNetworkMasterCard();
- if (supportedNetwork == "privateLabel")
- return getPKPaymentNetworkPrivateLabel();
- if (supportedNetwork == "visa")
- return getPKPaymentNetworkVisa();
-
- return nil;
-}
-
static RetainPtr<NSArray> toSupportedNetworks(const Vector<String>& supportedNetworks)
{
- auto result = adoptNS([[NSMutableArray alloc] init]);
-
- for (auto& supportedNetwork : supportedNetworks) {
- if (auto network = toSupportedNetwork(supportedNetwork))
- [result addObject:network];
- }
-
+ auto result = adoptNS([[NSMutableArray alloc] initWithCapacity:supportedNetworks.size()]);
+ for (auto& supportedNetwork : supportedNetworks)
+ [result addObject:supportedNetwork];
return result;
}
@@ -866,7 +829,16 @@
m_paymentAuthorizationViewControllerDelegate->_didSelectPaymentMethodCompletion = nullptr;
}
+Vector<String> WebPaymentCoordinatorProxy::availablePaymentNetworks()
+{
+ NSArray<PKPaymentNetwork> *availableNetworks = [getPKPaymentRequestClass() availableNetworks];
+ Vector<String> result;
+ result.reserveInitialCapacity(availableNetworks.count);
+ for (PKPaymentNetwork network in availableNetworks)
+ result.uncheckedAppend(network);
+ return result;
}
-#endif
+} // namespace WebKit
+#endif // ENABLE(APPLE_PAY)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (226122 => 226123)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -5846,6 +5846,10 @@
parameters.applicationManifest = m_configuration->applicationManifest() ? std::optional<WebCore::ApplicationManifest>(m_configuration->applicationManifest()->applicationManifest()) : std::nullopt;
#endif
+#if ENABLE(APPLE_PAY)
+ parameters.availablePaymentNetworks = WebPaymentCoordinatorProxy::availablePaymentNetworks();
+#endif
+
m_process->addWebUserContentControllerProxy(m_userContentController, parameters);
return parameters;
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (226122 => 226123)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2017-12-19 17:03:48 UTC (rev 226122)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2017-12-19 17:49:29 UTC (rev 226123)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010-2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2017 Apple Inc. All rights reserved.
* Copyright (C) 2012 Intel Corporation. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
*
@@ -418,6 +418,7 @@
#if ENABLE(APPLE_PAY)
pageConfiguration.paymentCoordinatorClient = new WebPaymentCoordinator(*this);
+ pageConfiguration.availablePaymentNetworks = WTFMove(parameters.availablePaymentNetworks);
#endif
#if ENABLE(APPLICATION_MANIFEST)