Title: [204587] trunk/Source
Revision
204587
Author
[email protected]
Date
2016-08-17 17:46:17 -0700 (Wed, 17 Aug 2016)

Log Message

Add support for additional networks
https://bugs.webkit.org/show_bug.cgi?id=160951
rdar://problem/27807479

Reviewed by Sam Weinig.

Source/WebCore:

* Modules/applepay/ApplePaySession.cpp:
(WebCore::createSupportedNetworks):
(WebCore::createPaymentRequest):
(WebCore::ApplePaySession::create):
* Modules/applepay/PaymentRequest.cpp:
(WebCore::isAdditionalValidSupportedNetwork):
(WebCore::PaymentRequest::isValidSupportedNetwork):
* Modules/applepay/PaymentRequest.h:
(WebCore::PaymentRequest::supportedNetworks):
(WebCore::PaymentRequest::setSupportedNetworks):
* Modules/applepay/PaymentRequestValidator.cpp:
(WebCore::PaymentRequestValidator::validateSupportedNetworks):
* Modules/applepay/PaymentRequestValidator.h:

Source/WebKit2:

* Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
(IPC::ArgumentCoder<PaymentRequest>::decode):
(IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::encode): Deleted.
(IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:
* UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
(WebKit::toAdditionalSupportedNetwork):
(WebKit::toSupportedNetwork):
(WebKit::toSupportedNetworks):
* WebProcess/ApplePay/WebPaymentCoordinator.cpp:
(WebKit::WebPaymentCoordinator::supportsVersion):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (204586 => 204587)


--- trunk/Source/WebCore/ChangeLog	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/ChangeLog	2016-08-18 00:46:17 UTC (rev 204587)
@@ -1,5 +1,27 @@
 2016-08-17  Anders Carlsson  <[email protected]>
 
+        Add support for additional networks
+        https://bugs.webkit.org/show_bug.cgi?id=160951
+        rdar://problem/27807479
+
+        Reviewed by Sam Weinig.
+
+        * Modules/applepay/ApplePaySession.cpp:
+        (WebCore::createSupportedNetworks):
+        (WebCore::createPaymentRequest):
+        (WebCore::ApplePaySession::create):
+        * Modules/applepay/PaymentRequest.cpp:
+        (WebCore::isAdditionalValidSupportedNetwork):
+        (WebCore::PaymentRequest::isValidSupportedNetwork):
+        * Modules/applepay/PaymentRequest.h:
+        (WebCore::PaymentRequest::supportedNetworks):
+        (WebCore::PaymentRequest::setSupportedNetworks):
+        * Modules/applepay/PaymentRequestValidator.cpp:
+        (WebCore::PaymentRequestValidator::validateSupportedNetworks):
+        * Modules/applepay/PaymentRequestValidator.h:
+
+2016-08-17  Anders Carlsson  <[email protected]>
+
         Remove a couple of unused WKSI function pointers
         https://bugs.webkit.org/show_bug.cgi?id=160946
 

Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp (204586 => 204587)


--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2016-08-18 00:46:17 UTC (rev 204587)
@@ -313,9 +313,9 @@
     return result;
 }
 
-static Optional<PaymentRequest::SupportedNetworks> createSupportedNetworks(DOMWindow& window, const ArrayValue& supportedNetworksArray)
+static Optional<Vector<String>> createSupportedNetworks(unsigned version, DOMWindow& window, const ArrayValue& supportedNetworksArray)
 {
-    PaymentRequest::SupportedNetworks result;
+    Vector<String> result;
 
     size_t supportedNetworksCount;
     if (!supportedNetworksArray.length(supportedNetworksCount))
@@ -326,25 +326,13 @@
         if (!supportedNetworksArray.get(i, supportedNetwork))
             return Nullopt;
 
-        if (supportedNetwork == "amex")
-            result.amex = true;
-        else if (supportedNetwork == "chinaUnionPay")
-            result.chinaUnionPay = true;
-        else if (supportedNetwork == "discover")
-            result.discover = true;
-        else if (supportedNetwork == "interac")
-            result.interac = true;
-        else if (supportedNetwork == "masterCard")
-            result.masterCard = true;
-        else if (supportedNetwork == "privateLabel")
-            result.privateLabel = true;
-        else if (supportedNetwork == "visa")
-            result.visa = true;
-        else {
+        if (!PaymentRequest::isValidSupportedNetwork(version, supportedNetwork)) {
             auto message = makeString("\"" + supportedNetwork, "\" is not a valid payment network.");
             window.printErrorMessage(message);
             return Nullopt;
         }
+
+        result.append(WTFMove(supportedNetwork));
     }
 
     return result;
@@ -482,7 +470,7 @@
     return false;
 }
 
-static Optional<PaymentRequest> createPaymentRequest(DOMWindow& window, const Dictionary& dictionary)
+static Optional<PaymentRequest> createPaymentRequest(unsigned version, DOMWindow& window, const Dictionary& dictionary)
 {
     PaymentRequest paymentRequest;
 
@@ -516,7 +504,7 @@
     }
 
     if (auto supportedNetworksArray = dictionary.get<ArrayValue>("supportedNetworks")) {
-        auto supportedNetworks = createSupportedNetworks(window, *supportedNetworksArray);
+        auto supportedNetworks = createSupportedNetworks(version, window, *supportedNetworksArray);
         if (!supportedNetworks)
             return Nullopt;
 
@@ -672,7 +660,7 @@
         return nullptr;
     }
 
-    auto paymentRequest = createPaymentRequest(window, dictionary);
+    auto paymentRequest = createPaymentRequest(version, window, dictionary);
     if (!paymentRequest) {
         ec = TYPE_MISMATCH_ERR;
         return nullptr;

Modified: trunk/Source/WebCore/Modules/applepay/PaymentRequest.cpp (204586 => 204587)


--- trunk/Source/WebCore/Modules/applepay/PaymentRequest.cpp	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/Modules/applepay/PaymentRequest.cpp	2016-08-18 00:46:17 UTC (rev 204587)
@@ -28,6 +28,8 @@
 
 #if ENABLE(APPLE_PAY)
 
+#include "SoftLinking.h"
+
 namespace WebCore {
 
 PaymentRequest::PaymentRequest()
@@ -38,6 +40,35 @@
 {
 }
 
+#if USE(APPLE_INTERNAL_SDK) && __has_include(<WebKitAdditions/PaymentRequestAdditions.cpp>)
+#include <WebKitAdditions/PaymentRequestAdditions.cpp>
+#else
+static inline bool isAdditionalValidSupportedNetwork(unsigned, const String&)
+{
+    return false;
 }
+#endif
 
+bool PaymentRequest::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;
+
+    return isAdditionalValidSupportedNetwork(version, supportedNetwork);
+}
+
+}
+
 #endif

Modified: trunk/Source/WebCore/Modules/applepay/PaymentRequest.h (204586 => 204587)


--- trunk/Source/WebCore/Modules/applepay/PaymentRequest.h	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/Modules/applepay/PaymentRequest.h	2016-08-18 00:46:17 UTC (rev 204587)
@@ -64,18 +64,10 @@
     const PaymentContact& shippingContact() const { return m_shippingContact; }
     void setShippingContact(const PaymentContact& shippingContact) { m_shippingContact = shippingContact; }
 
-    struct SupportedNetworks {
-        bool amex { false };
-        bool chinaUnionPay { false };
-        bool discover { false };
-        bool interac { false };
-        bool masterCard { false };
-        bool privateLabel { false };
-        bool visa { false };
-    };
+    static bool isValidSupportedNetwork(unsigned version, const String&);
 
-    const SupportedNetworks& supportedNetworks() const { return m_supportedNetworks; }
-    void setSupportedNetworks(const SupportedNetworks& supportedNetworks) { m_supportedNetworks = supportedNetworks; }
+    const Vector<String>& supportedNetworks() const { return m_supportedNetworks; }
+    void setSupportedNetworks(const Vector<String>& supportedNetworks) { m_supportedNetworks = supportedNetworks; }
 
     struct MerchantCapabilities {
         bool supports3DS { false };
@@ -143,7 +135,7 @@
     ContactFields m_requiredShippingContactFields;
     PaymentContact m_shippingContact;
 
-    SupportedNetworks m_supportedNetworks;
+    Vector<String> m_supportedNetworks;
     MerchantCapabilities m_merchantCapabilities;
 
     ShippingType m_shippingType { ShippingType::Shipping };

Modified: trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.cpp (204586 => 204587)


--- trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.cpp	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.cpp	2016-08-18 00:46:17 UTC (rev 204587)
@@ -147,9 +147,9 @@
     return true;
 }
 
-bool PaymentRequestValidator::validateSupportedNetworks(const PaymentRequest::SupportedNetworks& supportedNetworks) const
+bool PaymentRequestValidator::validateSupportedNetworks(const Vector<String>& supportedNetworks) const
 {
-    if (!supportedNetworks.amex && !supportedNetworks.chinaUnionPay && !supportedNetworks.discover && !supportedNetworks.interac && !supportedNetworks.masterCard && !supportedNetworks.privateLabel &&!supportedNetworks.visa) {
+    if (supportedNetworks.isEmpty()) {
         m_window.printErrorMessage("Missing supported networks");
         return false;
     }

Modified: trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.h (204586 => 204587)


--- trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.h	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebCore/Modules/applepay/PaymentRequestValidator.h	2016-08-18 00:46:17 UTC (rev 204587)
@@ -45,7 +45,7 @@
     bool validateCountryCode(const String&) const;
     bool validateCurrencyCode(const String&) const;
     bool validateMerchantCapabilities(const PaymentRequest::MerchantCapabilities&) const;
-    bool validateSupportedNetworks(const PaymentRequest::SupportedNetworks&) const;
+    bool validateSupportedNetworks(const Vector<String>&) const;
 
     bool validateShippingMethods(const Vector<PaymentRequest::ShippingMethod>&) const;
     bool validateShippingMethod(const PaymentRequest::ShippingMethod&) const;

Modified: trunk/Source/WebKit2/ChangeLog (204586 => 204587)


--- trunk/Source/WebKit2/ChangeLog	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebKit2/ChangeLog	2016-08-18 00:46:17 UTC (rev 204587)
@@ -1,5 +1,25 @@
 2016-08-17  Anders Carlsson  <[email protected]>
 
+        Add support for additional networks
+        https://bugs.webkit.org/show_bug.cgi?id=160951
+        rdar://problem/27807479
+
+        Reviewed by Sam Weinig.
+
+        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
+        (IPC::ArgumentCoder<PaymentRequest>::decode):
+        (IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::encode): Deleted.
+        (IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
+        (WebKit::toAdditionalSupportedNetwork):
+        (WebKit::toSupportedNetwork):
+        (WebKit::toSupportedNetworks):
+        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
+        (WebKit::WebPaymentCoordinator::supportsVersion):
+
+2016-08-17  Anders Carlsson  <[email protected]>
+
         Remove a couple of unused WKSI function pointers
         https://bugs.webkit.org/show_bug.cgi?id=160946
 

Modified: trunk/Source/WebKit2/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm (204586 => 204587)


--- trunk/Source/WebKit2/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebKit2/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm	2016-08-18 00:46:17 UTC (rev 204587)
@@ -238,7 +238,7 @@
         return false;
     request.setMerchantCapabilities(merchantCapabilities);
 
-    PaymentRequest::SupportedNetworks supportedNetworks;
+    Vector<String> supportedNetworks;
     if (!decoder.decode(supportedNetworks))
         return false;
     request.setSupportedNetworks(supportedNetworks);
@@ -334,37 +334,6 @@
     return true;
 }
 
-void ArgumentCoder<PaymentRequest::SupportedNetworks>::encode(ArgumentEncoder& encoder, const PaymentRequest::SupportedNetworks& supportedNetworks)
-{
-    encoder << supportedNetworks.amex;
-    encoder << supportedNetworks.chinaUnionPay;
-    encoder << supportedNetworks.discover;
-    encoder << supportedNetworks.interac;
-    encoder << supportedNetworks.masterCard;
-    encoder << supportedNetworks.privateLabel;
-    encoder << supportedNetworks.visa;
-}
-
-bool ArgumentCoder<PaymentRequest::SupportedNetworks>::decode(ArgumentDecoder& decoder, PaymentRequest::SupportedNetworks& supportedNetworks)
-{
-    if (!decoder.decode(supportedNetworks.amex))
-        return false;
-    if (!decoder.decode(supportedNetworks.chinaUnionPay))
-        return false;
-    if (!decoder.decode(supportedNetworks.discover))
-        return false;
-    if (!decoder.decode(supportedNetworks.interac))
-        return false;
-    if (!decoder.decode(supportedNetworks.masterCard))
-        return false;
-    if (!decoder.decode(supportedNetworks.privateLabel))
-        return false;
-    if (!decoder.decode(supportedNetworks.visa))
-        return false;
-
-    return true;
-}
-
 void ArgumentCoder<PaymentRequest::ShippingMethod>::encode(ArgumentEncoder& encoder, const PaymentRequest::ShippingMethod& shippingMethod)
 {
     encoder << shippingMethod.label;

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h (204586 => 204587)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2016-08-18 00:46:17 UTC (rev 204587)
@@ -521,11 +521,6 @@
     static bool decode(ArgumentDecoder&, WebCore::PaymentRequest::ShippingMethod&);
 };
 
-template<> struct ArgumentCoder<WebCore::PaymentRequest::SupportedNetworks> {
-    static void encode(ArgumentEncoder&, const WebCore::PaymentRequest::SupportedNetworks&);
-    static bool decode(ArgumentDecoder&, WebCore::PaymentRequest::SupportedNetworks&);
-};
-
 template<> struct ArgumentCoder<WebCore::PaymentRequest::TotalAndLineItems> {
     static void encode(ArgumentEncoder&, const WebCore::PaymentRequest::TotalAndLineItems&);
     static bool decode(ArgumentDecoder&, WebCore::PaymentRequest::TotalAndLineItems&);

Modified: trunk/Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm (204586 => 204587)


--- trunk/Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm	2016-08-18 00:46:17 UTC (rev 204587)
@@ -274,24 +274,43 @@
     return result;
 }
 
-static RetainPtr<NSArray> toSupportedNetworks(const WebCore::PaymentRequest::SupportedNetworks& supportedNetworks)
+#if USE(APPLE_INTERNAL_SDK) && __has_include(<WebKitAdditions/WebPaymentCoordinatorProxyCocoaAdditions.mm>)
+#import <WebKitAdditions/WebPaymentCoordinatorProxyCocoaAdditions.mm>
+#else
+static inline NSString *toAdditionalSupportedNetwork(const String&)
 {
+    return nullptr;
+}
+#endif
+
+static NSString *toSupportedNetwork(const String& supportedNetwork)
+{
+    if (supportedNetwork == "amex")
+        return getPKPaymentNetworkAmex();
+    if (supportedNetwork == "chinaUnionPay")
+        return getPKPaymentNetworkChinaUnionPay();
+    if (supportedNetwork == "discover")
+        return getPKPaymentNetworkDiscover();
+    if (supportedNetwork == "interac")
+        return getPKPaymentNetworkInterac();
+    if (supportedNetwork == "masterCard")
+        return getPKPaymentNetworkMasterCard();
+    if (supportedNetwork == "privateLabel")
+        return getPKPaymentNetworkPrivateLabel();
+    if (supportedNetwork == "visa")
+        return getPKPaymentNetworkVisa();
+
+    return toAdditionalSupportedNetwork(supportedNetwork);
+}
+
+static RetainPtr<NSArray> toSupportedNetworks(const Vector<String>& supportedNetworks)
+{
     auto result = adoptNS([[NSMutableArray alloc] init]);
 
-    if (supportedNetworks.amex)
-        [result addObject:getPKPaymentNetworkAmex()];
-    if (supportedNetworks.chinaUnionPay)
-        [result addObject:getPKPaymentNetworkChinaUnionPay()];
-    if (supportedNetworks.discover)
-        [result addObject:getPKPaymentNetworkDiscover()];
-    if (supportedNetworks.interac)
-        [result addObject:getPKPaymentNetworkInterac()];
-    if (supportedNetworks.masterCard)
-        [result addObject:getPKPaymentNetworkMasterCard()];
-    if (supportedNetworks.privateLabel)
-        [result addObject:getPKPaymentNetworkPrivateLabel()];
-    if (supportedNetworks.visa)
-        [result addObject:getPKPaymentNetworkVisa()];
+    for (auto& supportedNetwork : supportedNetworks) {
+        if (auto network = toSupportedNetwork(supportedNetwork))
+            [result addObject:network];
+    }
 
     return result;
 }

Modified: trunk/Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp (204586 => 204587)


--- trunk/Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp	2016-08-17 23:57:03 UTC (rev 204586)
+++ trunk/Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp	2016-08-18 00:46:17 UTC (rev 204587)
@@ -54,7 +54,7 @@
 {
     ASSERT(version > 0);
 
-    if (version == 1)
+    if (version <= 2)
         return true;
 
     return false;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to