Title: [227140] trunk
Revision
227140
Author
[email protected]
Date
2018-01-18 07:42:08 -0800 (Thu, 18 Jan 2018)

Log Message

[Payment Request] Support a default shipping address for Apple Pay
https://bugs.webkit.org/show_bug.cgi?id=181754
<rdar://problem/36009733>

Reviewed by Brady Eidson.

Source/WebCore:

Move shippingContact from ApplePayPaymentRequest to ApplePayRequestBase. This allows
merchants to specify a default shipping address when using Apple Pay with Payment Request.

This also fixes a bug found during testing where
+[NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:style:options:]
would throw an exception when passed a nil NSPersonNameComponents.

Test: http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html

* 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/ApplePaySessionPaymentRequest.h:
(WebCore::ApplePaySessionPaymentRequest::version const):
(WebCore::ApplePaySessionPaymentRequest::setVersion):
* Modules/applepay/cocoa/PaymentContactCocoa.mm:
(WebCore::convert):
* Modules/applepay/paymentrequest/ApplePayRequest.idl:
* testing/MockPaymentCoordinator.cpp:
(WebCore::MockPaymentCoordinator::showPaymentUI):
(WebCore::MockPaymentCoordinator::completeMerchantValidation):
* testing/MockPaymentCoordinator.h:

LayoutTests:

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

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (227139 => 227140)


--- trunk/LayoutTests/ChangeLog	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/LayoutTests/ChangeLog	2018-01-18 15:42:08 UTC (rev 227140)
@@ -1,3 +1,14 @@
+2018-01-18  Andy Estes  <[email protected]>
+
+        [Payment Request] Support a default shipping address for Apple Pay
+        https://bugs.webkit.org/show_bug.cgi?id=181754
+        <rdar://problem/36009733>
+
+        Reviewed by Brady Eidson.
+
+        * http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt: Added.
+        * http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html: Added.
+
 2018-01-18  Ali Juma  <[email protected]>
 
         imported/w3c/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page.html is flaky

Added: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt (0 => 227140)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt	2018-01-18 15:42:08 UTC (rev 227140)
@@ -0,0 +1,62 @@
+Test ApplePayRequest.shippingContact.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+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
+PASS paymentResponse.details.shippingContact.givenName is expectedGivenName
+PASS paymentResponse.details.shippingContact.familyName is expectedFamilyName
+PASS paymentResponse.details.shippingContact.phoneticGivenName is undefined.
+PASS paymentResponse.details.shippingContact.phoneticFamilyName is undefined.
+PASS paymentResponse.details.shippingContact.addressLines is expectedAddressLines
+PASS paymentResponse.details.shippingContact.subLocality is expectedSubLocality
+PASS paymentResponse.details.shippingContact.locality is expectedLocality
+PASS paymentResponse.details.shippingContact.postalCode is expectedPostalCode
+PASS paymentResponse.details.shippingContact.subAdministrativeArea is expectedSubAdministrativeArea
+PASS paymentResponse.details.shippingContact.administrativeArea is expectedAdministrativeArea
+PASS paymentResponse.details.shippingContact.country is expectedCountry
+PASS paymentResponse.details.shippingContact.countryCode is expectedCountryCode
+PASS paymentResponse.shippingAddress.country is expectedCountryCode
+PASS paymentResponse.shippingAddress.addressLine is expectedAddressLines
+PASS paymentResponse.shippingAddress.region is expectedAdministrativeArea
+PASS paymentResponse.shippingAddress.city is expectedLocality
+PASS paymentResponse.shippingAddress.dependentLocality is expectedSubLocality
+PASS paymentResponse.shippingAddress.postalCode is expectedPostalCode
+PASS paymentResponse.shippingAddress.postalCode is expectedPostalCode
+PASS paymentResponse.shippingAddress.sortingCode is ''
+PASS paymentResponse.shippingAddress.languageCode is ''
+PASS paymentResponse.shippingAddress.organization is ''
+PASS paymentResponse.shippingAddress.recipient is expectedName
+PASS paymentResponse.shippingAddress.phone is expectedPhoneNumber
+PASS paymentResponse.payerName is expectedName
+PASS paymentResponse.payerEmail is expectedEmailAddress
+PASS paymentResponse.payerPhone is expectedPhoneNumber
+
+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
+
+Test setting a default shipping contact that only specifies an email address.
+PASS paymentResponse.shippingAddress is null
+PASS paymentResponse.payerName is null
+PASS paymentResponse.payerEmail is expectedEmailAddress
+PASS paymentResponse.payerPhone is null
+
+Test setting a default shipping contact that only specifies a phone number.
+PASS paymentResponse.shippingAddress is null
+PASS paymentResponse.payerName is null
+PASS paymentResponse.payerEmail is null
+PASS paymentResponse.payerPhone is expectedPhoneNumber
+
+Test setting a default shipping contact that only specifies a name.
+PASS paymentResponse.shippingAddress is null
+PASS paymentResponse.payerName is expectedName
+PASS paymentResponse.payerEmail is null
+PASS paymentResponse.payerPhone is null
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html (0 => 227140)


--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html	2018-01-18 15:42:08 UTC (rev 227140)
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<script>
+
+description("Test ApplePayRequest.shippingContact.");
+
+window.jsTestIsAsync = true;
+
+const expectedGivenName = 'Web';
+const expectedFamilyName = 'Test';
+const expectedName = [expectedGivenName, expectedFamilyName].join(' ');
+const expectedEmailAddress = '[email protected]';
+const expectedPhoneNumber = '+12345678910';
+const expectedAddressLines = ['1 wpt street'];
+const expectedSubLocality = 'AA';
+const expectedLocality = 'BB';
+const expectedPostalCode = '12345';
+const expectedSubAdministrativeArea = 'CC';
+const expectedAdministrativeArea = 'DD';
+const expectedCountry = 'United States';
+const expectedCountryCode = 'US';
+
+function validShippingContact() {
+    return {
+        phoneNumber: expectedPhoneNumber,
+        emailAddress: expectedEmailAddress,
+        givenName: expectedGivenName,
+        familyName: expectedFamilyName,
+        phoneticGivenName: expectedGivenName,
+        phoneticFamilyName: expectedFamilyName,
+        addressLines: expectedAddressLines,
+        subLocality: expectedSubLocality,
+        locality: expectedLocality,
+        postalCode: expectedPostalCode,
+        subAdministrativeArea: expectedSubAdministrativeArea,
+        administrativeArea: expectedAdministrativeArea,
+        country: expectedCountry,
+        countryCode: expectedCountryCode,
+    };
+}
+
+function validPaymentMethod(version, shippingContact) {
+    return {
+        supportedMethods: 'https://apple.com/apple-pay',
+        data: {
+            version,
+            merchantIdentifier: '',
+            countryCode: 'US',
+            supportedNetworks: ['visa', 'masterCard'],
+            merchantCapabilities: ['supports3DS'],
+            shippingContact,
+        },
+    }
+}
+
+function validPaymentDetails() {
+    return {
+        total: {
+            label: 'Total',
+            amount: {
+                currency: 'USD',
+                value: '10.00',
+            },
+        },
+    };
+}
+
+function validPaymentOptions() {
+    return {
+        requestPayerName: true,
+        requestPayerEmail: true,
+        requestPayerPhone: true,
+        requestShipping: true,
+    };
+}
+
+async function runTests() {
+    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());
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                window.paymentResponse = response;
+
+                shouldBe("paymentResponse.details.shippingContact.phoneNumber", "expectedPhoneNumber");
+                shouldBe("paymentResponse.details.shippingContact.emailAddress", "expectedEmailAddress");
+                shouldBe("paymentResponse.details.shippingContact.givenName", "expectedGivenName");
+                shouldBe("paymentResponse.details.shippingContact.familyName", "expectedFamilyName");
+                shouldBeUndefined("paymentResponse.details.shippingContact.phoneticGivenName");
+                shouldBeUndefined("paymentResponse.details.shippingContact.phoneticFamilyName");
+                shouldBe("paymentResponse.details.shippingContact.addressLines", "expectedAddressLines");
+                shouldBe("paymentResponse.details.shippingContact.subLocality", "expectedSubLocality");
+                shouldBe("paymentResponse.details.shippingContact.locality", "expectedLocality");
+                shouldBe("paymentResponse.details.shippingContact.postalCode", "expectedPostalCode");
+                shouldBe("paymentResponse.details.shippingContact.subAdministrativeArea", "expectedSubAdministrativeArea");
+                shouldBe("paymentResponse.details.shippingContact.administrativeArea", "expectedAdministrativeArea");
+                shouldBe("paymentResponse.details.shippingContact.country", "expectedCountry");
+                shouldBe("paymentResponse.details.shippingContact.countryCode", "expectedCountryCode");
+
+                shouldBe("paymentResponse.shippingAddress.country", "expectedCountryCode");
+                shouldBe("paymentResponse.shippingAddress.addressLine", "expectedAddressLines");
+                shouldBe("paymentResponse.shippingAddress.region", "expectedAdministrativeArea");
+                shouldBe("paymentResponse.shippingAddress.city", "expectedLocality");
+                shouldBe("paymentResponse.shippingAddress.dependentLocality", "expectedSubLocality");
+                shouldBe("paymentResponse.shippingAddress.postalCode", "expectedPostalCode");
+                shouldBe("paymentResponse.shippingAddress.postalCode", "expectedPostalCode");
+                shouldBe("paymentResponse.shippingAddress.sortingCode", "''");
+                shouldBe("paymentResponse.shippingAddress.languageCode", "''");
+                shouldBe("paymentResponse.shippingAddress.organization", "''");
+                shouldBe("paymentResponse.shippingAddress.recipient", "expectedName");
+                shouldBe("paymentResponse.shippingAddress.phone", "expectedPhoneNumber");
+
+                shouldBe("paymentResponse.payerName", "expectedName");
+                shouldBe("paymentResponse.payerEmail", "expectedEmailAddress");
+                shouldBe("paymentResponse.payerPhone", "expectedPhoneNumber");
+
+                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());
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                window.paymentResponse = response;
+
+                shouldBe("paymentResponse.details.shippingContact.phoneticGivenName", "expectedGivenName");
+                shouldBe("paymentResponse.details.shippingContact.phoneticFamilyName", "expectedFamilyName");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    await new Promise((resolve, reject) => {
+        debug("Test setting a default shipping contact that only specifies an email address.");
+
+        var paymentRequest = new PaymentRequest([validPaymentMethod(3, { emailAddress: expectedEmailAddress })], validPaymentDetails(), { requestPayerEmail: true });
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                window.paymentResponse = response;
+
+                shouldBeNull("paymentResponse.shippingAddress");
+                shouldBeNull("paymentResponse.payerName");
+                shouldBe("paymentResponse.payerEmail", "expectedEmailAddress");
+                shouldBeNull("paymentResponse.payerPhone");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    await new Promise((resolve, reject) => {
+        debug("Test setting a default shipping contact that only specifies a phone number.");
+
+        var paymentRequest = new PaymentRequest([validPaymentMethod(3, { phoneNumber: expectedPhoneNumber })], validPaymentDetails(), { requestPayerPhone: true });
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                window.paymentResponse = response;
+
+                shouldBeNull("paymentResponse.shippingAddress");
+                shouldBeNull("paymentResponse.payerName");
+                shouldBeNull("paymentResponse.payerEmail");
+                shouldBe("paymentResponse.payerPhone", "expectedPhoneNumber");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    await new Promise((resolve, reject) => {
+        debug("Test setting a default shipping contact that only specifies a name.");
+
+        var paymentRequest = new PaymentRequest([validPaymentMethod(3, { givenName: expectedGivenName, familyName: expectedFamilyName })], validPaymentDetails(), { requestPayerName: true });
+
+        activateThen(() => {
+            paymentRequest.show().then((response) => {
+                window.paymentResponse = response;
+
+                shouldBeNull("paymentResponse.shippingAddress");
+                shouldBe("paymentResponse.payerName", "expectedName");
+                shouldBeNull("paymentResponse.payerEmail");
+                shouldBeNull("paymentResponse.payerPhone");
+
+                response.complete("success");
+                resolve();
+            });
+
+            internals.mockPaymentCoordinator.acceptPayment();
+        });
+    });
+    debug("");
+
+    finishJSTest();
+}
+
+runTests();
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (227139 => 227140)


--- trunk/Source/WebCore/ChangeLog	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/ChangeLog	2018-01-18 15:42:08 UTC (rev 227140)
@@ -1,3 +1,39 @@
+2018-01-18  Andy Estes  <[email protected]>
+
+        [Payment Request] Support a default shipping address for Apple Pay
+        https://bugs.webkit.org/show_bug.cgi?id=181754
+        <rdar://problem/36009733>
+
+        Reviewed by Brady Eidson.
+
+        Move shippingContact from ApplePayPaymentRequest to ApplePayRequestBase. This allows
+        merchants to specify a default shipping address when using Apple Pay with Payment Request.
+
+        This also fixes a bug found during testing where
+        +[NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:style:options:]
+        would throw an exception when passed a nil NSPersonNameComponents.
+
+        Test: http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html
+
+        * 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/ApplePaySessionPaymentRequest.h:
+        (WebCore::ApplePaySessionPaymentRequest::version const):
+        (WebCore::ApplePaySessionPaymentRequest::setVersion):
+        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
+        (WebCore::convert):
+        * Modules/applepay/paymentrequest/ApplePayRequest.idl:
+        * testing/MockPaymentCoordinator.cpp:
+        (WebCore::MockPaymentCoordinator::showPaymentUI):
+        (WebCore::MockPaymentCoordinator::completeMerchantValidation):
+        * testing/MockPaymentCoordinator.h:
+
 2018-01-18  Wenson Hsieh  <[email protected]>
 
         [iOS] Specify -[NSURL _title] for the associated URL when copying an image element

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.h	2018-01-18 15:42:08 UTC (rev 227140)
@@ -41,7 +41,6 @@
     String currencyCode;
 
     std::optional<Vector<ApplePayContactField>> requiredShippingContactFields;
-    std::optional<ApplePayPaymentContact> shippingContact;
 
     ShippingType shippingType { ShippingType::Shipping };
     std::optional<Vector<ApplePayShippingMethod>> shippingMethods;

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentRequest.idl	2018-01-18 15:42:08 UTC (rev 227140)
@@ -41,7 +41,6 @@
     required DOMString currencyCode;
 
     sequence<ApplePayContactField> requiredShippingContactFields;
-    ApplePayPaymentContact shippingContact;
 
     ApplePayShippingType shippingType = "shipping";
     sequence<ApplePayShippingMethod> shippingMethods;

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.cpp	2018-01-18 15:42:08 UTC (rev 227140)
@@ -52,6 +52,7 @@
 ExceptionOr<ApplePaySessionPaymentRequest> convertAndValidate(unsigned version, ApplePayRequestBase& request, const PaymentCoordinator& paymentCoordinator)
 {
     ApplePaySessionPaymentRequest result;
+    result.setVersion(version);
     result.setCountryCode(request.countryCode);
 
     auto merchantCapabilities = convertAndValidate(request.merchantCapabilities);
@@ -74,6 +75,9 @@
     if (request.billingContact)
         result.setBillingContact(PaymentContact::fromApplePayPaymentContact(version, *request.billingContact));
 
+    if (request.shippingContact)
+        result.setShippingContact(PaymentContact::fromApplePayPaymentContact(version, *request.shippingContact));
+
     result.setApplicationData(request.applicationData);
 
     if (version >= 3)

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.h	2018-01-18 15:42:08 UTC (rev 227140)
@@ -43,6 +43,8 @@
     std::optional<Vector<ApplePayContactField>> requiredBillingContactFields;
     std::optional<ApplePayPaymentContact> billingContact;
 
+    std::optional<ApplePayPaymentContact> shippingContact;
+
     String applicationData;
     Vector<String> supportedCountries;
 };

Modified: trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayRequestBase.idl	2018-01-18 15:42:08 UTC (rev 227140)
@@ -33,6 +33,8 @@
     sequence<ApplePayContactField> requiredBillingContactFields;
     ApplePayPaymentContact billingContact;
 
+    ApplePayPaymentContact shippingContact;
+
     DOMString applicationData;
     [Conditional=APPLE_PAY_SESSION_V3] sequence<DOMString> supportedCountries;
 };

Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp	2018-01-18 15:42:08 UTC (rev 227140)
@@ -234,9 +234,6 @@
         result.setRequiredShippingContactFields(requiredShippingContactFields.releaseReturnValue());
     }
 
-    if (paymentRequest.shippingContact)
-        result.setShippingContact(PaymentContact::fromApplePayPaymentContact(version, paymentRequest.shippingContact.value()));
-
     result.setShippingType(paymentRequest.shippingType);
 
     if (paymentRequest.shippingMethods) {

Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySessionPaymentRequest.h	2018-01-18 15:42:08 UTC (rev 227140)
@@ -42,6 +42,9 @@
     WEBCORE_EXPORT ApplePaySessionPaymentRequest();
     WEBCORE_EXPORT ~ApplePaySessionPaymentRequest();
 
+    unsigned version() const { return m_version; }
+    void setVersion(unsigned version) { m_version = version; }
+
     const String& countryCode() const { return m_countryCode; }
     void setCountryCode(const String& countryCode) { m_countryCode = countryCode; }
 
@@ -136,6 +139,8 @@
     void setRequester(Requester requester) { m_requester = requester; }
 
 private:
+    unsigned m_version { 0 };
+
     String m_countryCode;
     String m_currencyCode;
 

Modified: trunk/Source/WebCore/Modules/applepay/cocoa/PaymentContactCocoa.mm (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/cocoa/PaymentContactCocoa.mm	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/cocoa/PaymentContactCocoa.mm	2018-01-18 15:42:08 UTC (rev 227140)
@@ -189,13 +189,15 @@
     NSPersonNameComponents *name = contact.name;
     result.givenName = name.givenName;
     result.familyName = name.familyName;
-    result.localizedName = [NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:name style:NSPersonNameComponentsFormatterStyleDefault options:0];
+    if (name)
+        result.localizedName = [NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:name style:NSPersonNameComponentsFormatterStyleDefault options:0];
 
     if (version >= 3) {
         NSPersonNameComponents *phoneticName = name.phoneticRepresentation;
         result.phoneticGivenName = phoneticName.givenName;
         result.phoneticFamilyName = phoneticName.familyName;
-        result.localizedPhoneticName = [NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:name style:NSPersonNameComponentsFormatterStyleDefault options:NSPersonNameComponentsFormatterPhonetic];
+        if (phoneticName)
+            result.localizedPhoneticName = [NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:name style:NSPersonNameComponentsFormatterStyleDefault options:NSPersonNameComponentsFormatterPhonetic];
     }
 
     CNPostalAddress *postalAddress = contact.postalAddress;

Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl (227139 => 227140)


--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayRequest.idl	2018-01-18 15:42:08 UTC (rev 227140)
@@ -29,4 +29,3 @@
     required unsigned long version;
     required DOMString merchantIdentifier;
 };
-

Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp (227139 => 227140)


--- trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp	2018-01-18 15:42:08 UTC (rev 227140)
@@ -96,8 +96,11 @@
     });
 }
 
-bool MockPaymentCoordinator::showPaymentUI(const URL&, const Vector<URL>&, const ApplePaySessionPaymentRequest&)
+bool MockPaymentCoordinator::showPaymentUI(const URL&, const Vector<URL>&, const ApplePaySessionPaymentRequest& request)
 {
+    if (request.shippingContact().pkContact())
+        m_shippingAddress = request.shippingContact().toApplePayPaymentContact(request.version());
+
     ASSERT(showCount == hideCount);
     ++showCount;
     dispatchIfShowing([mainFrame = makeRef(m_mainFrame)]() {
@@ -108,9 +111,8 @@
 
 void MockPaymentCoordinator::completeMerchantValidation(const PaymentMerchantSession&)
 {
-    dispatchIfShowing([mainFrame = makeRef(m_mainFrame), shippingAddress = m_shippingAddress]() {
-        ApplePayPaymentContact contact = shippingAddress;
-        mainFrame->paymentCoordinator().didSelectShippingContact(MockPaymentContact { WTFMove(contact) });
+    dispatchIfShowing([mainFrame = makeRef(m_mainFrame), shippingAddress = m_shippingAddress]() mutable {
+        mainFrame->paymentCoordinator().didSelectShippingContact(MockPaymentContact { WTFMove(shippingAddress) });
     });
 }
 

Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.h (227139 => 227140)


--- trunk/Source/WebCore/testing/MockPaymentCoordinator.h	2018-01-18 14:33:32 UTC (rev 227139)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.h	2018-01-18 15:42:08 UTC (rev 227140)
@@ -71,7 +71,7 @@
     void updateTotalAndLineItems(const ApplePaySessionPaymentRequest::TotalAndLineItems&);
 
     MainFrame& m_mainFrame;
-    MockPaymentAddress m_shippingAddress;
+    ApplePayPaymentContact m_shippingAddress;
     ApplePayLineItem m_total;
     Vector<ApplePayLineItem> m_lineItems;
     Vector<String> m_availablePaymentNetworks;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to