Title: [241105] trunk
Revision
241105
Author
aes...@apple.com
Date
2019-02-06 15:18:07 -0800 (Wed, 06 Feb 2019)

Log Message

[Payment Request] It should be possible to require a phonetic name for shipping contacts
https://bugs.webkit.org/show_bug.cgi?id=194311
<rdar://46733045>

Reviewed by Alex Christensen.

Source/WebCore:

It should be possible to require that a shipping contact has a phonetic name in Payment Request.
To accomplish this, move requiredShippingContactFields from ApplePayPaymentRequest to
ApplePayRequestBase so that it can be used as part of an Apple Pay payment method data.

Since required shipping contact fields can now be specified both in
requiredShippingContactFields and PaymentOptions, we merge the required fields from these
two sources such that, e.g., email is required if it is specified in either place.

So that clients can detect this new feature, the API version number is bumped from 5 to 6.

Added test cases to ApplePayRequestShippingContact.https.html and ApplePayRequestShippingContactV3.https.html.

* DerivedSources.make:
* Modules/applepay/ApplePayPaymentRequest.h:
* Modules/applepay/ApplePayPaymentRequest.idl:
* Modules/applepay/ApplePayRequestBase.cpp:
(WebCore::convertAndValidate):
* Modules/applepay/ApplePayRequestBase.h:
* Modules/applepay/ApplePayRequestBase.idl:
* Modules/applepay/ApplePaySession.cpp:
(WebCore::convertAndValidate):
* Modules/applepay/PaymentCoordinatorClient.cpp: Added.
(WebCore::PaymentCoordinatorClient::supportsVersion):
* Modules/applepay/PaymentCoordinatorClient.h:
* Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
(WebCore::mergePaymentOptions):
(WebCore::ApplePayPaymentHandler::show):
* SourcesCocoa.txt:
* WebCore.xcodeproj/project.pbxproj:
* loader/EmptyClients.cpp:
* testing/MockPaymentContactFields.h: Added.
(WebCore::MockPaymentContactFields::MockPaymentContactFields):
* testing/MockPaymentContactFields.idl: Added.
* testing/MockPaymentCoordinator.cpp:
(WebCore::MockPaymentCoordinator::showPaymentUI):
(WebCore::MockPaymentCoordinator::supportsVersion): Deleted.
* testing/MockPaymentCoordinator.h:
* testing/MockPaymentCoordinator.idl:

Source/WebKit:

* WebProcess/ApplePay/WebPaymentCoordinator.cpp:
(WebKit::WebPaymentCoordinator::supportsVersion): Deleted.
* WebProcess/ApplePay/WebPaymentCoordinator.h:

Source/WebKitLegacy/mac:

* WebCoreSupport/WebPaymentCoordinatorClient.h:
* WebCoreSupport/WebPaymentCoordinatorClient.mm:
(WebPaymentCoordinatorClient::supportsVersion): Deleted.

LayoutTests:

* http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt:
* http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html:
* http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt:
* http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html:
* http/tests/ssl/applepay/PaymentRequest.https-expected.txt:
* http/tests/ssl/applepay/PaymentRequest.https.html:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (241104 => 241105)


--- trunk/LayoutTests/ChangeLog	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/ChangeLog	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,3 +1,18 @@
+2019-02-06  Andy Estes  <aes...@apple.com>
+
+        [Payment Request] It should be possible to require a phonetic name for shipping contacts
+        https://bugs.webkit.org/show_bug.cgi?id=194311
+        <rdar://46733045>
+
+        Reviewed by Alex Christensen.
+
+        * http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt:
+        * http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html:
+        * http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt:
+        * http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html:
+        * http/tests/ssl/applepay/PaymentRequest.https-expected.txt:
+        * http/tests/ssl/applepay/PaymentRequest.https.html:
+
 2019-02-06  Yusuke Suzuki  <ysuz...@apple.com>
 
         [JSC] PrivateName to PublicName hash table is wasteful

Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt	2019-02-06 23:18:07 UTC (rev 241105)
@@ -3,6 +3,16 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
+Test setting required contact fields in a version 2 request.
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.name is true
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.email is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.phone is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.postalAddress is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.name is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.email is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.phone is false
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.postalAddress is true
+
 Test setting a default shipping contact in a version 2 request.
 PASS paymentResponse.details.shippingContact.phoneNumber is expectedPhoneNumber
 PASS paymentResponse.details.shippingContact.emailAddress is expectedEmailAddress

Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html	2019-02-06 23:18:07 UTC (rev 241105)
@@ -83,6 +83,40 @@
 
 async function runTests() {
     await new Promise((resolve, reject) => {
+        debug("Test setting required contact fields in a version 2 request.");
+
+        var paymentMethod = validPaymentMethod(2, validShippingContact());
+        paymentMethod.data.requiredBillingContactFields = ["name", "postalAddress"];
+        paymentMethod.data.requiredShippingContactFields = ["email"];
+
+        var paymentOptions = validPaymentOptions();
+        paymentOptions.requestPayerEmail = false;
+        paymentOptions.requestPayerPhone = false;
+
+        var paymentRequest = new PaymentRequest([paymentMethod], validPaymentDetails(), paymentOptions);
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.name", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.email", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.phone", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.postalAddress", "true");
+
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.name", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.email", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.phone", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.postalAddress", "true");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    await new Promise((resolve, reject) => {
         debug("Test setting a default shipping contact in a version 2 request.");
 
         var paymentRequest = new PaymentRequest([validPaymentMethod(2, validShippingContact())], validPaymentDetails(), validPaymentOptions());

Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt	2019-02-06 23:18:07 UTC (rev 241105)
@@ -3,6 +3,18 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
+Test setting required contact fields in a version 3 request.
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.name is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.phoneticName is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.email is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.phone is false
+PASS internals.mockPaymentCoordinator.requiredBillingContactFields.postalAddress is false
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.name is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.phoneticName is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.email is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.phone is true
+PASS internals.mockPaymentCoordinator.requiredShippingContactFields.postalAddress is true
+
 Test setting a default shipping contact in a version 3 request.
 PASS paymentResponse.details.shippingContact.phoneticGivenName is expectedGivenName
 PASS paymentResponse.details.shippingContact.phoneticFamilyName is expectedFamilyName

Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html	2019-02-06 23:18:07 UTC (rev 241105)
@@ -83,6 +83,37 @@
 
 async function runTests() {
     await new Promise((resolve, reject) => {
+        debug("Test setting required contact fields in a version 3 request.");
+
+        var paymentMethod = validPaymentMethod(3, validShippingContact());
+        paymentMethod.data.requiredShippingContactFields = ["phoneticName"];
+
+        var paymentRequest = new PaymentRequest([paymentMethod], validPaymentDetails(), validPaymentOptions());
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.name", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.phoneticName", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.email", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.phone", "false");
+                shouldBe("internals.mockPaymentCoordinator.requiredBillingContactFields.postalAddress", "false");
+
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.name", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.phoneticName", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.email", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.phone", "true");
+                shouldBe("internals.mockPaymentCoordinator.requiredShippingContactFields.postalAddress", "true");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    await new Promise((resolve, reject) => {
         debug("Test setting a default shipping contact in a version 3 request.");
 
         var paymentRequest = new PaymentRequest([validPaymentMethod(3, validShippingContact())], validPaymentDetails(), validPaymentOptions());

Modified: trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https-expected.txt (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https-expected.txt	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https-expected.txt	2019-02-06 23:18:07 UTC (rev 241105)
@@ -124,6 +124,43 @@
 SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.billingContact = 7;
 PASS new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with InvalidStateError: The object is in an invalid state..
 
+Testing ApplePayRequest.requiredShippingContactFields
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = '';
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Value is not a sequence.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = null;
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Value is not a sequence.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = 7;
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Value is not a sequence.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = { };
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [''];
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [null];
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [undefined];
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [{}];
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = ['invalid'];
+PASS request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with TypeError: Type error.
+
+Testing ApplePayRequest.shippingContact
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = '';
+PASS new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with InvalidStateError: The object is in an invalid state..
+
+SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = 7;
+PASS new PaymentRequest([paymentMethod], validPaymentDetails()); request.show() rejected promise  with InvalidStateError: The object is in an invalid state..
+
 Testing ApplePayRequest.applicationData
 
 SETUP: paymentMethod = validPaymentMethod(); paymentMethod.data.applicationData = { toString: function() { throw '"Error in toString"'; } };

Modified: trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html (241104 => 241105)


--- trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html	2019-02-06 23:18:07 UTC (rev 241105)
@@ -142,6 +142,34 @@
     debug("")
     await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.billingContact = 7;", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
     debug("")
+
+    debug("Testing ApplePayRequest.requiredShippingContactFields")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = { };", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [''];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [null];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [undefined];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [{}];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = ['invalid'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+
+    debug("Testing ApplePayRequest.shippingContact")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = '';", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
+    await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = 7;", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()")
+    debug("")
     
     debug("Testing ApplePayRequest.applicationData")
     debug("")

Modified: trunk/Source/WebCore/ChangeLog (241104 => 241105)


--- trunk/Source/WebCore/ChangeLog	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/ChangeLog	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,3 +1,50 @@
+2019-02-06  Andy Estes  <aes...@apple.com>
+
+        [Payment Request] It should be possible to require a phonetic name for shipping contacts
+        https://bugs.webkit.org/show_bug.cgi?id=194311
+        <rdar://46733045>
+
+        Reviewed by Alex Christensen.
+
+        It should be possible to require that a shipping contact has a phonetic name in Payment Request.
+        To accomplish this, move requiredShippingContactFields from ApplePayPaymentRequest to
+        ApplePayRequestBase so that it can be used as part of an Apple Pay payment method data.
+
+        Since required shipping contact fields can now be specified both in
+        requiredShippingContactFields and PaymentOptions, we merge the required fields from these
+        two sources such that, e.g., email is required if it is specified in either place.
+
+        So that clients can detect this new feature, the API version number is bumped from 5 to 6.
+
+        Added test cases to ApplePayRequestShippingContact.https.html and ApplePayRequestShippingContactV3.https.html.
+
+        * DerivedSources.make:
+        * Modules/applepay/ApplePayPaymentRequest.h:
+        * Modules/applepay/ApplePayPaymentRequest.idl:
+        * Modules/applepay/ApplePayRequestBase.cpp:
+        (WebCore::convertAndValidate):
+        * Modules/applepay/ApplePayRequestBase.h:
+        * Modules/applepay/ApplePayRequestBase.idl:
+        * Modules/applepay/ApplePaySession.cpp:
+        (WebCore::convertAndValidate):
+        * Modules/applepay/PaymentCoordinatorClient.cpp: Added.
+        (WebCore::PaymentCoordinatorClient::supportsVersion):
+        * Modules/applepay/PaymentCoordinatorClient.h:
+        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
+        (WebCore::mergePaymentOptions):
+        (WebCore::ApplePayPaymentHandler::show):
+        * SourcesCocoa.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * loader/EmptyClients.cpp:
+        * testing/MockPaymentContactFields.h: Added.
+        (WebCore::MockPaymentContactFields::MockPaymentContactFields):
+        * testing/MockPaymentContactFields.idl: Added.
+        * testing/MockPaymentCoordinator.cpp:
+        (WebCore::MockPaymentCoordinator::showPaymentUI):
+        (WebCore::MockPaymentCoordinator::supportsVersion): Deleted.
+        * testing/MockPaymentCoordinator.h:
+        * testing/MockPaymentCoordinator.idl:
+
 2019-02-06  Yusuke Suzuki  <ysuz...@apple.com>
 
         [JSC] PrivateName to PublicName hash table is wasteful

Modified: trunk/Source/WebCore/DerivedSources.make (241104 => 241105)


--- trunk/Source/WebCore/DerivedSources.make	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/DerivedSources.make	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1054,6 +1054,7 @@
     $(WebCore)/testing/MockContentFilterSettings.idl \
     $(WebCore)/testing/MockPageOverlay.idl \
     $(WebCore)/testing/MockPaymentAddress.idl \
+    $(WebCore)/testing/MockPaymentContactFields.idl \
     $(WebCore)/testing/MockPaymentCoordinator.idl \
     $(WebCore)/testing/MockPaymentError.idl \
     $(WebCore)/testing/ServiceWorkerInternals.idl \

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -40,8 +40,6 @@
 
     String currencyCode;
 
-    Optional<Vector<ApplePayContactField>> requiredShippingContactFields;
-
     ShippingType shippingType { ShippingType::Shipping };
     Optional<Vector<ApplePayShippingMethod>> shippingMethods;
 

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -40,8 +40,6 @@
 
     required DOMString currencyCode;
 
-    sequence<ApplePayContactField> requiredShippingContactFields;
-
     ApplePayShippingType shippingType = "shipping";
     sequence<ApplePayShippingMethod> shippingMethods;
 };

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 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,13 @@
 
     if (request.billingContact)
         result.setBillingContact(PaymentContact::fromApplePayPaymentContact(version, *request.billingContact));
+    
+    if (request.requiredShippingContactFields) {
+        auto requiredShippingContactFields = convertAndValidate(version, *request.requiredShippingContactFields);
+        if (requiredShippingContactFields.hasException())
+            return requiredShippingContactFields.releaseException();
+        result.setRequiredShippingContactFields(requiredShippingContactFields.releaseReturnValue());
+    }
 
     if (request.shippingContact)
         result.setShippingContact(PaymentContact::fromApplePayPaymentContact(version, *request.shippingContact));

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -43,6 +43,7 @@
     Optional<Vector<ApplePayContactField>> requiredBillingContactFields;
     Optional<ApplePayPaymentContact> billingContact;
 
+    Optional<Vector<ApplePayContactField>> requiredShippingContactFields;
     Optional<ApplePayPaymentContact> shippingContact;
 
     String applicationData;

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -33,6 +33,7 @@
     sequence<ApplePayContactField> requiredBillingContactFields;
     ApplePayPaymentContact billingContact;
 
+    sequence<ApplePayContactField> requiredShippingContactFields;
     ApplePayPaymentContact shippingContact;
 
     DOMString applicationData;

Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -227,13 +227,6 @@
         return lineItems.releaseException();
     result.setLineItems(lineItems.releaseReturnValue());
 
-    if (paymentRequest.requiredShippingContactFields) {
-        auto requiredShippingContactFields = convertAndValidate(version, WTFMove(*paymentRequest.requiredShippingContactFields));
-        if (requiredShippingContactFields.hasException())
-            return requiredShippingContactFields.releaseException();
-        result.setRequiredShippingContactFields(requiredShippingContactFields.releaseReturnValue());
-    }
-
     result.setShippingType(paymentRequest.shippingType);
 
     if (paymentRequest.shippingMethods) {

Copied: trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.cpp (from rev 241104, trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl) (0 => 241105)


--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.cpp	                        (rev 0)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PaymentCoordinatorClient.h"
+
+#if ENABLE(APPLE_PAY)
+
+namespace WebCore {
+
+bool PaymentCoordinatorClient::supportsVersion(unsigned version)
+{
+    ASSERT(version > 0);
+
+#if !ENABLE(APPLE_PAY_SESSION_V3)
+    static const unsigned currentVersion = 2;
+#elif !ENABLE(APPLE_PAY_SESSION_V4)
+    static const unsigned currentVersion = 3;
+#else
+    static const unsigned currentVersion = 6;
+#endif
+
+    return version <= currentVersion;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(APPLE_PAY)

Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -45,7 +45,8 @@
 
 class PaymentCoordinatorClient {
 public:
-    virtual bool supportsVersion(unsigned version) = 0;
+    bool supportsVersion(unsigned version);
+
     virtual Optional<String> validatedPaymentNetwork(const String&) = 0;
     virtual bool canMakePayments() = 0;
     virtual void canMakePaymentsWithActiveCard(const String& merchantIdentifier, const String& domainName, WTF::Function<void (bool)>&& completionHandler) = 0;

Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp (241104 => 241105)


--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -129,16 +129,6 @@
     return { WTFMove(result) };
 }
 
-static ApplePaySessionPaymentRequest::ContactFields convert(const PaymentOptions& options)
-{
-    ApplePaySessionPaymentRequest::ContactFields result;
-    result.email = options.requestPayerEmail;
-    result.name = options.requestPayerName;
-    result.phone = options.requestPayerPhone;
-    result.postalAddress = options.requestShipping;
-    return result;
-}
-
 static ApplePaySessionPaymentRequest::ShippingType convert(PaymentShippingType type)
 {
     switch (type) {
@@ -182,6 +172,19 @@
     return { };
 }
 
+static void mergePaymentOptions(const PaymentOptions& options, ApplePaySessionPaymentRequest& request)
+{
+    auto requiredShippingContactFields = request.requiredShippingContactFields();
+    requiredShippingContactFields.email |= options.requestPayerEmail;
+    requiredShippingContactFields.name |= options.requestPayerName;
+    requiredShippingContactFields.phone |= options.requestPayerPhone;
+    requiredShippingContactFields.postalAddress |= options.requestShipping;
+    request.setRequiredShippingContactFields(requiredShippingContactFields);
+
+    if (options.requestShipping)
+        request.setShippingType(convert(options.shippingType));
+}
+
 ExceptionOr<void> ApplePayPaymentHandler::show()
 {
     auto validatedRequest = convertAndValidate(m_applePayRequest->version, *m_applePayRequest, paymentCoordinator());
@@ -203,9 +206,7 @@
         return convertedLineItems.releaseException();
     request.setLineItems(convertedLineItems.releaseReturnValue());
 
-    request.setRequiredShippingContactFields(convert(m_paymentRequest->paymentOptions()));
-    if (m_paymentRequest->paymentOptions().requestShipping)
-        request.setShippingType(convert(m_paymentRequest->paymentOptions().shippingType));
+    mergePaymentOptions(m_paymentRequest->paymentOptions(), request);
 
     auto shippingMethods = computeShippingMethods();
     if (shippingMethods.hasException())

Modified: trunk/Source/WebCore/SourcesCocoa.txt (241104 => 241105)


--- trunk/Source/WebCore/SourcesCocoa.txt	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/SourcesCocoa.txt	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,4 +1,4 @@
-// Copyright (C) 2017-2018 Apple Inc. All rights reserved.
+// Copyright (C) 2017-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -588,6 +588,7 @@
     Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp
     Modules/applepay/ApplePayValidateMerchantEvent.cpp
     Modules/applepay/PaymentCoordinator.cpp
+    Modules/applepay/PaymentCoordinatorClient.cpp
     Modules/applepay/PaymentRequestValidator.mm
     Modules/applepay/PaymentSession.cpp
 

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (241104 => 241105)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2019-02-06 23:18:07 UTC (rev 241105)
@@ -2942,6 +2942,9 @@
 		A0EE0DF6144F825500F80B0D /* WebGLDebugRendererInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A0EE0DF2144F825500F80B0D /* WebGLDebugRendererInfo.h */; };
 		A0EE0DF7144F825500F80B0D /* WebGLDebugShaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0EE0DF3144F825500F80B0D /* WebGLDebugShaders.cpp */; };
 		A0EE0DF8144F825500F80B0D /* WebGLDebugShaders.h in Headers */ = {isa = PBXBuildFile; fileRef = A0EE0DF4144F825500F80B0D /* WebGLDebugShaders.h */; };
+		A104EC5A220A3DE000CBF67A /* MockPaymentContactFields.h in Headers */ = {isa = PBXBuildFile; fileRef = A104EC55220A39B400CBF67A /* MockPaymentContactFields.h */; };
+		A104EC5D220A3E4B00CBF67A /* JSMockPaymentContactFields.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A104EC5B220A3E4300CBF67A /* JSMockPaymentContactFields.cpp */; };
+		A104EC5E220A3E4E00CBF67A /* JSMockPaymentContactFields.h in Headers */ = {isa = PBXBuildFile; fileRef = A104EC5C220A3E4400CBF67A /* JSMockPaymentContactFields.h */; };
 		A104F24414C71F7A009E2C23 /* CachedSVGDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = A104F24214C71F7A009E2C23 /* CachedSVGDocument.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		A10BB5851484E3A700B2E87A /* RenderSVGRect.h in Headers */ = {isa = PBXBuildFile; fileRef = A10BB5831484E3A700B2E87A /* RenderSVGRect.h */; };
 		A10BB58B1484E3B300B2E87A /* RenderSVGShape.h in Headers */ = {isa = PBXBuildFile; fileRef = A10BB5891484E3B300B2E87A /* RenderSVGShape.h */; };
@@ -11139,6 +11142,11 @@
 		A0EE0DF2144F825500F80B0D /* WebGLDebugRendererInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGLDebugRendererInfo.h; sourceTree = "<group>"; };
 		A0EE0DF3144F825500F80B0D /* WebGLDebugShaders.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebGLDebugShaders.cpp; sourceTree = "<group>"; };
 		A0EE0DF4144F825500F80B0D /* WebGLDebugShaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGLDebugShaders.h; sourceTree = "<group>"; };
+		A104EC53220A017400CBF67A /* PaymentCoordinatorClient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentCoordinatorClient.cpp; sourceTree = "<group>"; };
+		A104EC55220A39B400CBF67A /* MockPaymentContactFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockPaymentContactFields.h; sourceTree = "<group>"; };
+		A104EC57220A39B400CBF67A /* MockPaymentContactFields.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MockPaymentContactFields.idl; sourceTree = "<group>"; };
+		A104EC5B220A3E4300CBF67A /* JSMockPaymentContactFields.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSMockPaymentContactFields.cpp; sourceTree = "<group>"; };
+		A104EC5C220A3E4400CBF67A /* JSMockPaymentContactFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSMockPaymentContactFields.h; sourceTree = "<group>"; };
 		A104F24114C71F7A009E2C23 /* CachedSVGDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedSVGDocument.cpp; sourceTree = "<group>"; };
 		A104F24214C71F7A009E2C23 /* CachedSVGDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedSVGDocument.h; sourceTree = "<group>"; };
 		A10BB5821484E3A700B2E87A /* RenderSVGRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGRect.cpp; sourceTree = "<group>"; };
@@ -16754,6 +16762,7 @@
 				1A8A64381D19FC5300D0E00F /* PaymentContact.h */,
 				1A58E86B1D19E42D00C0EA73 /* PaymentCoordinator.cpp */,
 				1A58E86C1D19E42D00C0EA73 /* PaymentCoordinator.h */,
+				A104EC53220A017400CBF67A /* PaymentCoordinatorClient.cpp */,
 				1A58E8621D19D3BF00C0EA73 /* PaymentCoordinatorClient.h */,
 				7CF930E61E01F9AD00BAFFBE /* PaymentHeaders.h */,
 				1AE96A871D1A0CEB00B86768 /* PaymentMerchantSession.h */,
@@ -17860,6 +17869,8 @@
 				A146D31C1F99C9C200D29196 /* MockPaymentAddress.h */,
 				A146D31E1F99C9C200D29196 /* MockPaymentAddress.idl */,
 				A146D3241F99D69800D29196 /* MockPaymentContact.h */,
+				A104EC55220A39B400CBF67A /* MockPaymentContactFields.h */,
+				A104EC57220A39B400CBF67A /* MockPaymentContactFields.idl */,
 				A1AFEDE51F8BFF6D0087013F /* MockPaymentCoordinator.cpp */,
 				A1AFEDE41F8BFF6D0087013F /* MockPaymentCoordinator.h */,
 				A146D3161F99B53D00D29196 /* MockPaymentCoordinator.idl */,
@@ -17901,6 +17912,8 @@
 				2D6F3E931C1F85550061DBD4 /* JSMockPageOverlay.h */,
 				A146D3201F99CA3E00D29196 /* JSMockPaymentAddress.cpp */,
 				A146D31F1F99CA3D00D29196 /* JSMockPaymentAddress.h */,
+				A104EC5B220A3E4300CBF67A /* JSMockPaymentContactFields.cpp */,
+				A104EC5C220A3E4400CBF67A /* JSMockPaymentContactFields.h */,
 				A146D3191F99BCBB00D29196 /* JSMockPaymentCoordinator.cpp */,
 				A146D3181F99BCBA00D29196 /* JSMockPaymentCoordinator.h */,
 				A1BB85B42159B3890067E07D /* JSMockPaymentError.cpp */,
@@ -28263,6 +28276,7 @@
 				A19AEA211AAA808600B52B25 /* JSMockContentFilterSettings.h in Headers */,
 				538EC9341F99B9F7004D22A8 /* JSMockPageOverlay.h in Headers */,
 				A146D3231F99D0EF00D29196 /* JSMockPaymentAddress.h in Headers */,
+				A104EC5E220A3E4E00CBF67A /* JSMockPaymentContactFields.h in Headers */,
 				A146D31B1F99BCFB00D29196 /* JSMockPaymentCoordinator.h in Headers */,
 				A1BB85B92159B3AE0067E07D /* JSMockPaymentError.h in Headers */,
 				427DA71E13735DFA007C57FB /* JSServiceWorkerInternals.h in Headers */,
@@ -28278,6 +28292,7 @@
 				A14BB0A01F9813B800605A35 /* MockPayment.h in Headers */,
 				A146D3211F99CB1A00D29196 /* MockPaymentAddress.h in Headers */,
 				A146D3251F99D69800D29196 /* MockPaymentContact.h in Headers */,
+				A104EC5A220A3DE000CBF67A /* MockPaymentContactFields.h in Headers */,
 				A1AFEDE61F8BFF6D0087013F /* MockPaymentCoordinator.h in Headers */,
 				A1CBEF641F9F11290028DE7C /* MockPaymentMethod.h in Headers */,
 				A140618C1E2ECA0A0032B34E /* MockPreviewLoaderClient.h in Headers */,
@@ -32837,6 +32852,7 @@
 				A19AEA221AAA808A00B52B25 /* JSMockContentFilterSettings.cpp in Sources */,
 				2D4150DE1C1F868C000A3BA2 /* JSMockPageOverlay.cpp in Sources */,
 				A146D3221F99D0EC00D29196 /* JSMockPaymentAddress.cpp in Sources */,
+				A104EC5D220A3E4B00CBF67A /* JSMockPaymentContactFields.cpp in Sources */,
 				A146D31A1F99BCF800D29196 /* JSMockPaymentCoordinator.cpp in Sources */,
 				A1BB85B82159B3A40067E07D /* JSMockPaymentError.cpp in Sources */,
 				427DA71D13735DFA007C57FB /* JSServiceWorkerInternals.cpp in Sources */,

Modified: trunk/Source/WebCore/loader/EmptyClients.cpp (241104 => 241105)


--- trunk/Source/WebCore/loader/EmptyClients.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/loader/EmptyClients.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2006 Eric Seidel <e...@webkit.org>
- * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
  * Copyright (C) Research In Motion Limited 2011. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -312,7 +312,6 @@
 #if ENABLE(APPLE_PAY)
 
 class EmptyPaymentCoordinatorClient final : public PaymentCoordinatorClient {
-    bool supportsVersion(unsigned) final { return false; }
     Optional<String> validatedPaymentNetwork(const String&) final { return WTF::nullopt; }
     bool canMakePayments() final { return false; }
     void canMakePaymentsWithActiveCard(const String&, const String&, WTF::Function<void(bool)>&& completionHandler) final { callOnMainThread([completionHandler = WTFMove(completionHandler)] { completionHandler(false); }); }

Copied: trunk/Source/WebCore/testing/MockPaymentContactFields.h (from rev 241104, trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl) (0 => 241105)


--- trunk/Source/WebCore/testing/MockPaymentContactFields.h	                        (rev 0)
+++ trunk/Source/WebCore/testing/MockPaymentContactFields.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(APPLE_PAY)
+
+#include "ApplePaySessionPaymentRequest.h"
+
+namespace WebCore {
+
+struct MockPaymentContactFields : public ApplePaySessionPaymentRequest::ContactFields {
+    MockPaymentContactFields() = default;
+    MockPaymentContactFields(const ApplePaySessionPaymentRequest::ContactFields& contactFields)
+        : ApplePaySessionPaymentRequest::ContactFields { contactFields }
+    {
+    }
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(APPLE_PAY)

Copied: trunk/Source/WebCore/testing/MockPaymentContactFields.idl (from rev 241104, trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl) (0 => 241105)


--- trunk/Source/WebCore/testing/MockPaymentContactFields.idl	                        (rev 0)
+++ trunk/Source/WebCore/testing/MockPaymentContactFields.idl	2019-02-06 23:18:07 UTC (rev 241105)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    Conditional=APPLE_PAY,
+    JSGenerateToJSObject,
+] dictionary MockPaymentContactFields {
+    boolean postalAddress = false;
+    boolean phone = false;
+    boolean email = false;
+    boolean name = false;
+    boolean phoneticName = false;
+};

Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp (241104 => 241105)


--- trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -53,21 +53,6 @@
     m_availablePaymentNetworks.add("visa");
 }
 
-bool MockPaymentCoordinator::supportsVersion(unsigned version)
-{
-    ASSERT(version > 0);
-
-#if !ENABLE(APPLE_PAY_SESSION_V3)
-    static const unsigned currentVersion = 2;
-#elif !ENABLE(APPLE_PAY_SESSION_V4)
-    static const unsigned currentVersion = 3;
-#else
-    static const unsigned currentVersion = 5;
-#endif
-
-    return version <= currentVersion;
-}
-
 Optional<String> MockPaymentCoordinator::validatedPaymentNetwork(const String& paymentNetwork)
 {
     auto result = m_availablePaymentNetworks.find(paymentNetwork);
@@ -119,6 +104,8 @@
     if (request.shippingContact().pkContact())
         m_shippingAddress = request.shippingContact().toApplePayPaymentContact(request.version());
     m_shippingMethods = convert(request.shippingMethods());
+    m_requiredBillingContactFields = request.requiredBillingContactFields();
+    m_requiredShippingContactFields = request.requiredShippingContactFields();
 
     ASSERT(showCount == hideCount);
     ++showCount;

Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.h (241104 => 241105)


--- trunk/Source/WebCore/testing/MockPaymentCoordinator.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,6 +30,7 @@
 #include "ApplePayLineItem.h"
 #include "ApplePayShippingMethod.h"
 #include "MockPaymentAddress.h"
+#include "MockPaymentContactFields.h"
 #include "MockPaymentError.h"
 #include "PaymentCoordinatorClient.h"
 #include <wtf/HashSet.h>
@@ -56,12 +57,13 @@
     const Vector<ApplePayLineItem>& lineItems() const { return m_lineItems; }
     const Vector<MockPaymentError>& errors() const { return m_errors; }
     const Vector<ApplePayShippingMethod>& shippingMethods() const { return m_shippingMethods; }
+    const MockPaymentContactFields& requiredBillingContactFields() const { return m_requiredBillingContactFields; }
+    const MockPaymentContactFields& requiredShippingContactFields() const { return m_requiredShippingContactFields; }
 
     void ref() const { }
     void deref() const { }
 
 private:
-    bool supportsVersion(unsigned) final;
     Optional<String> validatedPaymentNetwork(const String&) final;
     bool canMakePayments() final;
     void canMakePaymentsWithActiveCard(const String&, const String&, WTF::Function<void(bool)>&&);
@@ -89,6 +91,8 @@
     Vector<MockPaymentError> m_errors;
     Vector<ApplePayShippingMethod> m_shippingMethods;
     HashSet<String, ASCIICaseInsensitiveHash> m_availablePaymentNetworks;
+    MockPaymentContactFields m_requiredBillingContactFields;
+    MockPaymentContactFields m_requiredShippingContactFields;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.idl (241104 => 241105)


--- trunk/Source/WebCore/testing/MockPaymentCoordinator.idl	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.idl	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -39,4 +39,6 @@
     readonly attribute sequence<ApplePayLineItem> lineItems;
     readonly attribute sequence<MockPaymentError> errors;
     readonly attribute sequence<ApplePayShippingMethod> shippingMethods;
+    readonly attribute MockPaymentContactFields requiredBillingContactFields;
+    readonly attribute MockPaymentContactFields requiredShippingContactFields;
 };

Modified: trunk/Source/WebKit/ChangeLog (241104 => 241105)


--- trunk/Source/WebKit/ChangeLog	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKit/ChangeLog	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,3 +1,15 @@
+2019-02-06  Andy Estes  <aes...@apple.com>
+
+        [Payment Request] It should be possible to require a phonetic name for shipping contacts
+        https://bugs.webkit.org/show_bug.cgi?id=194311
+        <rdar://46733045>
+
+        Reviewed by Alex Christensen.
+
+        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
+        (WebKit::WebPaymentCoordinator::supportsVersion): Deleted.
+        * WebProcess/ApplePay/WebPaymentCoordinator.h:
+
 2019-02-06  Keith Rollin  <krol...@apple.com>
 
         Really enable the automatic checking and regenerations of .xcfilelists during builds

Modified: trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp (241104 => 241105)


--- trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -51,21 +51,6 @@
     WebProcess::singleton().removeMessageReceiver(*this);
 }
 
-bool WebPaymentCoordinator::supportsVersion(unsigned version)
-{
-    ASSERT(version > 0);
-
-#if !ENABLE(APPLE_PAY_SESSION_V3)
-    static const unsigned currentVersion = 2;
-#elif !ENABLE(APPLE_PAY_SESSION_V4)
-    static const unsigned currentVersion = 3;
-#else
-    static const unsigned currentVersion = 5;
-#endif
-
-    return version <= currentVersion;
-}
-
 const WebPaymentCoordinator::AvailablePaymentNetworksSet& WebPaymentCoordinator::availablePaymentNetworks()
 {
     if (m_availablePaymentNetworks)

Modified: trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h (241104 => 241105)


--- trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -55,7 +55,6 @@
 
 private:
     // WebCore::PaymentCoordinatorClient.
-    bool supportsVersion(unsigned version) override;
     Optional<String> validatedPaymentNetwork(const String&) override;
     bool canMakePayments() override;
     void canMakePaymentsWithActiveCard(const String& merchantIdentifier, const String& domainName, WTF::Function<void (bool)>&& completionHandler) override;

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (241104 => 241105)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,3 +1,15 @@
+2019-02-06  Andy Estes  <aes...@apple.com>
+
+        [Payment Request] It should be possible to require a phonetic name for shipping contacts
+        https://bugs.webkit.org/show_bug.cgi?id=194311
+        <rdar://46733045>
+
+        Reviewed by Alex Christensen.
+
+        * WebCoreSupport/WebPaymentCoordinatorClient.h:
+        * WebCoreSupport/WebPaymentCoordinatorClient.mm:
+        (WebPaymentCoordinatorClient::supportsVersion): Deleted.
+
 2019-02-04  Said Abou-Hallawa  <s...@apple.com>
 
         [CG] Enable setAdditionalSupportedImageTypes for WK1

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h (241104 => 241105)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -36,7 +36,6 @@
 private:
     ~WebPaymentCoordinatorClient();
 
-    bool supportsVersion(unsigned) override;
     Optional<String> validatedPaymentNetwork(const String&) override;
     bool canMakePayments() override;
     void canMakePaymentsWithActiveCard(const String&, const String&, WTF::Function<void (bool)>&& completionHandler) override;

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm (241104 => 241105)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm	2019-02-06 22:58:00 UTC (rev 241104)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm	2019-02-06 23:18:07 UTC (rev 241105)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -38,11 +38,6 @@
 {
 }
 
-bool WebPaymentCoordinatorClient::supportsVersion(unsigned)
-{
-    return false;
-}
-
 Optional<String> WebPaymentCoordinatorClient::validatedPaymentNetwork(const String&)
 {
     return WTF::nullopt;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to