Title: [226123] trunk
Revision
226123
Author
[email protected]
Date
2017-12-19 09:49:29 -0800 (Tue, 19 Dec 2017)

Log Message

[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.

Source/WebCore:

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:

Source/WebCore/PAL:

* pal/spi/cocoa/PassKitSPI.h: Defined +[PKPaymentRequest availableNetworks].

Source/WebKit:

* 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.

LayoutTests:

* http/tests/ssl/applepay/ApplePaySession-expected.txt:
* http/tests/ssl/applepay/ApplePaySession.html: Added a test case for network names with
varying capitalization.

Modified Paths

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)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to