Changeset 225849 in webkit


Ignore:
Timestamp:
Dec 13, 2017 10:02:28 AM (6 years ago)
Author:
aestes@apple.com
Message:

[Payment Request] Remove ApplePayPaymentMethodUpdateEvent and use PaymentDetailsModifiers instead
https://bugs.webkit.org/show_bug.cgi?id=180737
<rdar://problem/36013152>

Reviewed by Brady Eidson.

Source/WebCore:

Instead of firing a non-standard "applepaypaymentmethodupdate" event when the payment method
changes, use the PaymentDetailsModifier mechanism to allow the merchant to specify override
totals and additional display items per payment method type.

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

  • DerivedSources.make:
  • Modules/applepay/ApplePayLineItem.idl:
  • Modules/applepay/ApplePayPaymentMethod.h:
  • Modules/applepay/ApplePayPaymentMethod.idl:
  • Modules/applepay/ApplePayPaymentMethodType.h: Added.
  • Modules/applepay/ApplePayPaymentMethodType.idl: Added.
  • Modules/applepay/cocoa/PaymentMethodCocoa.mm:
  • Modules/applepay/paymentrequest/ApplePayModifier.h: Added.
  • Modules/applepay/paymentrequest/ApplePayModifier.idl: Added.
  • Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:

(WebCore::ApplePayPaymentHandler::show):
(WebCore::ApplePayPaymentHandler::computeTotalAndLineItems):
(WebCore::ApplePayPaymentHandler::detailsUpdated):
(WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
(WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
(WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
(WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):

  • Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
  • Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.cpp: Removed.
  • Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.h: Removed.
  • Modules/paymentrequest/PaymentRequest.h:
  • Modules/paymentrequest/PaymentRequest.idl:
  • WebCore.xcodeproj/project.pbxproj:
  • dom/EventNames.h:
  • dom/EventNames.in:
  • testing/MockPaymentCoordinator.cpp:

(WebCore::convert):
(WebCore::MockPaymentCoordinator::updateTotalAndLineItems):
(WebCore::MockPaymentCoordinator::completeShippingMethodSelection):
(WebCore::MockPaymentCoordinator::completeShippingContactSelection):
(WebCore::MockPaymentCoordinator::completePaymentMethodSelection):

  • testing/MockPaymentCoordinator.h:
  • testing/MockPaymentCoordinator.idl:

LayoutTests:

  • http/tests/ssl/applepay/ApplePayPaymentDetailsModifier.https-expected.txt: Added.
  • http/tests/ssl/applepay/ApplePayPaymentDetailsModifier.https.html: Added.
  • http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https-expected.txt: Removed.
  • http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html: Removed.
Location:
trunk
Files:
2 added
4 deleted
17 edited
3 copied
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r225848 r225849  
     12017-12-13  Andy Estes  <aestes@apple.com>
     2
     3        [Payment Request] Remove ApplePayPaymentMethodUpdateEvent and use PaymentDetailsModifiers instead
     4        https://bugs.webkit.org/show_bug.cgi?id=180737
     5        <rdar://problem/36013152>
     6
     7        Reviewed by Brady Eidson.
     8
     9        * http/tests/ssl/applepay/ApplePayPaymentDetailsModifier.https-expected.txt: Added.
     10        * http/tests/ssl/applepay/ApplePayPaymentDetailsModifier.https.html: Added.
     11        * http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https-expected.txt: Removed.
     12        * http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html: Removed.
     13
    1142017-12-13  Matt Lewis  <jlewis3@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r225837 r225849  
     12017-12-13  Andy Estes  <aestes@apple.com>
     2
     3        [Payment Request] Remove ApplePayPaymentMethodUpdateEvent and use PaymentDetailsModifiers instead
     4        https://bugs.webkit.org/show_bug.cgi?id=180737
     5        <rdar://problem/36013152>
     6
     7        Reviewed by Brady Eidson.
     8
     9        Instead of firing a non-standard "applepaypaymentmethodupdate" event when the payment method
     10        changes, use the PaymentDetailsModifier mechanism to allow the merchant to specify override
     11        totals and additional display items per payment method type.
     12
     13        Test: http/tests/ssl/applepay/ApplePayPaymentDetailsModifier.https.html
     14
     15        * DerivedSources.make:
     16        * Modules/applepay/ApplePayLineItem.idl:
     17        * Modules/applepay/ApplePayPaymentMethod.h:
     18        * Modules/applepay/ApplePayPaymentMethod.idl:
     19        * Modules/applepay/ApplePayPaymentMethodType.h: Added.
     20        * Modules/applepay/ApplePayPaymentMethodType.idl: Added.
     21        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
     22        * Modules/applepay/paymentrequest/ApplePayModifier.h: Added.
     23        * Modules/applepay/paymentrequest/ApplePayModifier.idl: Added.
     24        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
     25        (WebCore::ApplePayPaymentHandler::show):
     26        (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems):
     27        (WebCore::ApplePayPaymentHandler::detailsUpdated):
     28        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
     29        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
     30        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
     31        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
     32        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
     33        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.cpp: Removed.
     34        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.h: Removed.
     35        * Modules/paymentrequest/PaymentRequest.h:
     36        * Modules/paymentrequest/PaymentRequest.idl:
     37        * WebCore.xcodeproj/project.pbxproj:
     38        * dom/EventNames.h:
     39        * dom/EventNames.in:
     40        * testing/MockPaymentCoordinator.cpp:
     41        (WebCore::convert):
     42        (WebCore::MockPaymentCoordinator::updateTotalAndLineItems):
     43        (WebCore::MockPaymentCoordinator::completeShippingMethodSelection):
     44        (WebCore::MockPaymentCoordinator::completeShippingContactSelection):
     45        (WebCore::MockPaymentCoordinator::completePaymentMethodSelection):
     46        * testing/MockPaymentCoordinator.h:
     47        * testing/MockPaymentCoordinator.idl:
     48
    1492017-12-12  Zalan Bujtas  <zalan@apple.com>
    250
  • trunk/Source/WebCore/DerivedSources.make

    r225816 r225849  
    9898    $(WebCore)/Modules/applepay/ApplePayPaymentMethod.idl \
    9999    $(WebCore)/Modules/applepay/ApplePayPaymentMethodSelectedEvent.idl \
     100    $(WebCore)/Modules/applepay/ApplePayPaymentMethodType.idl \
    100101        $(WebCore)/Modules/applepay/ApplePayPaymentMethodUpdate.idl \
    101102    $(WebCore)/Modules/applepay/ApplePayPaymentPass.idl \
     
    110111    $(WebCore)/Modules/applepay/ApplePayValidateMerchantEvent.idl \
    111112    $(WebCore)/Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.idl \
    112     $(WebCore)/Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.idl \
     113    $(WebCore)/Modules/applepay/paymentrequest/ApplePayModifier.idl \
    113114    $(WebCore)/Modules/applepay/paymentrequest/ApplePayRequest.idl \
    114115    $(WebCore)/Modules/beacon/NavigatorBeacon.idl \
  • trunk/Source/WebCore/Modules/applepay/ApplePayLineItem.idl

    r209927 r225849  
    3333[
    3434    Conditional=APPLE_PAY,
     35    ExportMacro=WEBCORE_EXPORT,
     36    JSGenerateToJSObject,
    3537] dictionary ApplePayLineItem {
    3638    ApplePayLineItemType type = "final";
  • trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethod.h

    r209927 r225849  
    3333namespace WebCore {
    3434
    35 enum class ApplePayPaymentMethodType { Debit, Credit, Prepaid, Store };
     35enum class ApplePayPaymentMethodType;
    3636
    3737struct ApplePayPaymentMethod {   
  • trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethod.idl

    r223945 r225849  
    2626[
    2727    Conditional=APPLE_PAY,
    28 ] enum ApplePayPaymentMethodType {
    29     "debit",
    30     "credit",
    31     "prepaid",
    32     "store"
    33 };
    34 
    35 [
    36     Conditional=APPLE_PAY,
    3728    ExportMacro=WEBCORE_EXPORT,
    3829    JSGenerateToJSObject
  • trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodType.h

    r225848 r225849  
    2424 */
    2525
    26 [
    27     Conditional=APPLE_PAY&PAYMENT_REQUEST,
    28     NoInterfaceObject,
    29 ] interface ApplePayPaymentMethodUpdateEvent : PaymentRequestUpdateEvent {
    30     [CachedAttribute] readonly attribute ApplePayPaymentMethod paymentMethod;
     26#pragma once
     27
     28#if ENABLE(APPLE_PAY)
     29
     30namespace WebCore {
     31
     32enum class ApplePayPaymentMethodType {
     33    Debit,
     34    Credit,
     35    Prepaid,
     36    Store,
    3137};
     38
     39} // namespace WebCore
     40
     41#endif // ENABLE(APPLE_PAY)
  • trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodType.idl

    r225848 r225849  
    2525
    2626[
    27     Conditional=APPLE_PAY&PAYMENT_REQUEST,
    28     NoInterfaceObject,
    29 ] interface ApplePayPaymentMethodUpdateEvent : PaymentRequestUpdateEvent {
    30     [CachedAttribute] readonly attribute ApplePayPaymentMethod paymentMethod;
     27    Conditional=APPLE_PAY,
     28] enum ApplePayPaymentMethodType {
     29    "debit",
     30    "credit",
     31    "prepaid",
     32    "store"
    3133};
  • trunk/Source/WebCore/Modules/applepay/cocoa/PaymentMethodCocoa.mm

    r220506 r225849  
    3030
    3131#import "ApplePayPaymentMethod.h"
     32#import "ApplePayPaymentMethodType.h"
    3233#import <pal/spi/cocoa/PassKitSPI.h>
    3334
  • trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayModifier.h

    r225848 r225849  
    2424 */
    2525
    26 [
    27     Conditional=APPLE_PAY&PAYMENT_REQUEST,
    28     NoInterfaceObject,
    29 ] interface ApplePayPaymentMethodUpdateEvent : PaymentRequestUpdateEvent {
    30     [CachedAttribute] readonly attribute ApplePayPaymentMethod paymentMethod;
     26#pragma once
     27
     28#if ENABLE(APPLE_PAY) && ENABLE(PAYMENT_REQUEST)
     29
     30#include "ApplePayPaymentMethodType.h"
     31
     32namespace WebCore {
     33
     34struct ApplePayModifier {
     35    ApplePayPaymentMethodType paymentMethodType;
    3136};
     37
     38} // namespace WebCore
     39
     40#endif // ENABLE(APPLE_PAY) && ENABLE(PAYMENT_REQUEST)
  • trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayModifier.idl

    r225848 r225849  
    2626[
    2727    Conditional=APPLE_PAY&PAYMENT_REQUEST,
    28     NoInterfaceObject,
    29 ] interface ApplePayPaymentMethodUpdateEvent : PaymentRequestUpdateEvent {
    30     [CachedAttribute] readonly attribute ApplePayPaymentMethod paymentMethod;
     28] dictionary ApplePayModifier {
     29    required ApplePayPaymentMethodType paymentMethodType;
    3130};
  • trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp

    r223962 r225849  
    3232#include "ApplePayMerchantCapability.h"
    3333#include "ApplePayMerchantValidationEvent.h"
     34#include "ApplePayModifier.h"
    3435#include "ApplePayPayment.h"
    35 #include "ApplePayPaymentMethodUpdateEvent.h"
    3636#include "ApplePaySessionPaymentRequest.h"
    3737#include "Document.h"
     
    191191    if (convertedLineItems.hasException())
    192192        return convertedLineItems.releaseException();
    193 
    194     auto lineItems = convertedLineItems.releaseReturnValue();
    195     for (auto& modifier : m_paymentRequest->paymentDetails().modifiers) {
    196         auto convertedIdentifier = convertAndValidatePaymentMethodIdentifier(modifier.supportedMethods);
    197         if (!convertedIdentifier || !handlesIdentifier(*convertedIdentifier))
    198             continue;
    199 
    200         auto additionalDisplayItems = convertAndValidate(modifier.additionalDisplayItems, expectedCurrency);
    201         if (additionalDisplayItems.hasException())
    202             return additionalDisplayItems.releaseException();
    203 
    204         lineItems.appendVector(additionalDisplayItems.releaseReturnValue());
    205     }
    206     request.setLineItems(lineItems);
     193    request.setLineItems(convertedLineItems.releaseReturnValue());
    207194
    208195    request.setRequiredShippingContactFields(convert(m_paymentRequest->paymentOptions()));
     
    256243}
    257244
    258 static ExceptionOr<ApplePaySessionPaymentRequest::TotalAndLineItems> convertAndValidate(const PaymentDetailsInit& details)
    259 {
     245ExceptionOr<ApplePaySessionPaymentRequest::TotalAndLineItems> ApplePayPaymentHandler::computeTotalAndLineItems()
     246{
     247    auto& details = m_paymentRequest->paymentDetails();
    260248    String currency = details.total.amount.currency;
    261     auto total = convertAndValidate(details.total, currency);
    262     if (total.hasException())
    263         return total.releaseException();
    264 
    265     auto lineItems = convertAndValidate(details.displayItems, currency);
    266     if (lineItems.hasException())
    267         return lineItems.releaseException();
    268 
    269     return ApplePaySessionPaymentRequest::TotalAndLineItems { total.releaseReturnValue(), lineItems.releaseReturnValue() };
     249
     250    auto convertedTotal = convertAndValidate(details.total, currency);
     251    if (convertedTotal.hasException())
     252        return convertedTotal.releaseException();
     253    auto total = convertedTotal.releaseReturnValue();
     254
     255    auto convertedLineItems = convertAndValidate(details.displayItems, currency);
     256    if (convertedLineItems.hasException())
     257        return convertedLineItems.releaseException();
     258    auto lineItems = convertedLineItems.releaseReturnValue();
     259
     260    if (!m_selectedPaymentMethodType)
     261        return ApplePaySessionPaymentRequest::TotalAndLineItems { WTFMove(total), WTFMove(lineItems) };
     262
     263    auto& modifiers = details.modifiers;
     264    auto& serializedModifierData = m_paymentRequest->serializedModifierData();
     265    ASSERT(modifiers.size() == serializedModifierData.size());
     266    for (size_t i = 0; i < modifiers.size(); ++i) {
     267        auto convertedIdentifier = convertAndValidatePaymentMethodIdentifier(modifiers[i].supportedMethods);
     268        if (!convertedIdentifier || !handlesIdentifier(*convertedIdentifier))
     269            continue;
     270
     271        if (serializedModifierData[i].isEmpty())
     272            continue;
     273
     274        auto& execState = *document().execState();
     275        auto scope = DECLARE_THROW_SCOPE(execState.vm());
     276        JSC::JSValue data;
     277        {
     278            auto lock = JSC::JSLockHolder { &execState };
     279            data = JSONParse(&execState, serializedModifierData[i]);
     280            if (scope.exception())
     281                return Exception { ExistingExceptionError };
     282        }
     283
     284        auto applePayModifier = convertDictionary<ApplePayModifier>(execState, WTFMove(data));
     285        if (scope.exception())
     286            return Exception { ExistingExceptionError };
     287
     288        if (applePayModifier.paymentMethodType != *m_selectedPaymentMethodType)
     289            continue;
     290
     291        if (modifiers[i].total) {
     292            auto totalOverride = convertAndValidate(*modifiers[i].total, currency);
     293            if (totalOverride.hasException())
     294                return totalOverride.releaseException();
     295            total = totalOverride.releaseReturnValue();
     296        }
     297
     298        auto additionalDisplayItems = convertAndValidate(modifiers[i].additionalDisplayItems, currency);
     299        if (additionalDisplayItems.hasException())
     300            return additionalDisplayItems.releaseException();
     301        lineItems.appendVector(additionalDisplayItems.releaseReturnValue());
     302        break;
     303    }
     304
     305    return ApplePaySessionPaymentRequest::TotalAndLineItems { WTFMove(total), WTFMove(lineItems) };
    270306}
    271307
     
    277313    if (eventType == eventNames().shippingoptionchangeEvent)
    278314        return shippingOptionUpdated();
    279 
    280     if (eventType == eventNames().applepaypaymentmethodchangedEvent)
    281         return paymentMethodUpdated();
    282315
    283316    ASSERT_NOT_REACHED();
     
    296329    }
    297330
    298     auto newTotalAndLineItems = convertAndValidate(m_paymentRequest->paymentDetails());
     331    auto newTotalAndLineItems = computeTotalAndLineItems();
    299332    if (newTotalAndLineItems.hasException())
    300333        return newTotalAndLineItems.releaseException();
     
    309342    ShippingMethodUpdate update;
    310343
    311     auto newTotalAndLineItems = convertAndValidate(m_paymentRequest->paymentDetails());
     344    auto newTotalAndLineItems = computeTotalAndLineItems();
    312345    if (newTotalAndLineItems.hasException())
    313346        return newTotalAndLineItems.releaseException();
     
    322355    PaymentMethodUpdate update;
    323356
    324     auto newTotalAndLineItems = convertAndValidate(m_paymentRequest->paymentDetails());
     357    auto newTotalAndLineItems = computeTotalAndLineItems();
    325358    if (newTotalAndLineItems.hasException())
    326359        return newTotalAndLineItems.releaseException();
     
    386419void ApplePayPaymentHandler::didSelectPaymentMethod(const PaymentMethod& paymentMethod)
    387420{
    388     auto event = ApplePayPaymentMethodUpdateEvent::create(eventNames().applepaypaymentmethodchangedEvent, paymentMethod.toApplePayPaymentMethod(), m_paymentRequest.get());
    389     m_paymentRequest->dispatchEvent(event.get());
     421    m_selectedPaymentMethodType = paymentMethod.toApplePayPaymentMethod().type;
     422    paymentMethodUpdated();
    390423}
    391424
  • trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.h

    r223962 r225849  
    2828#if ENABLE(APPLE_PAY) && ENABLE(PAYMENT_REQUEST)
    2929
     30#include "ApplePayPaymentMethodType.h"
    3031#include "ApplePayRequest.h"
    3132#include "ContextDestructionObserver.h"
     
    5253    PaymentCoordinator& paymentCoordinator();
    5354
     55    ExceptionOr<ApplePaySessionPaymentRequest::TotalAndLineItems> computeTotalAndLineItems();
     56
    5457    ExceptionOr<void> shippingAddressUpdated(const String& error);
    5558    ExceptionOr<void> shippingOptionUpdated();
     
    7578    Ref<PaymentRequest> m_paymentRequest;
    7679    std::optional<ApplePayRequest> m_applePayRequest;
     80    std::optional<ApplePayPaymentMethodType> m_selectedPaymentMethodType;
    7781};
    7882
  • trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.h

    r224606 r225849  
    7676    const PaymentOptions& paymentOptions() const { return m_options; }
    7777    const PaymentDetailsInit& paymentDetails() const { return m_details; }
     78    const Vector<String>& serializedModifierData() const { return m_serializedModifierData; }
    7879
    7980    void shippingAddressChanged(Ref<PaymentAddress>&&);
  • trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.idl

    r223945 r225849  
    4646
    4747    [Conditional=APPLE_PAY] attribute EventHandler onapplepayvalidatemerchant;
    48     [Conditional=APPLE_PAY] attribute EventHandler onapplepaypaymentmethodchanged;
    4948};
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r225836 r225849  
    27312731                A1C1507A1E3F2B3E0032C98C /* PreviewConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C150781E3F2B3E0032C98C /* PreviewConverter.h */; };
    27322732                A1C2C5761FA2851600BA46FA /* PaymentSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C2C5751FA2851600BA46FA /* PaymentSession.cpp */; };
    2733                 A1CBEF531F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CBEF501F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.h */; };
    2734                 A1CBEF541F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1CBEF511F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.cpp */; };
    2735                 A1CBEF611F9F09040028DE7C /* JSApplePayPaymentMethodUpdateEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1CBEF5F1F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.cpp */; };
    2736                 A1CBEF621F9F09040028DE7C /* JSApplePayPaymentMethodUpdateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CBEF601F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.h */; };
    27372733                A1CBEF641F9F11290028DE7C /* MockPaymentMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CBEF631F9F11290028DE7C /* MockPaymentMethod.h */; };
    27382734                A1CC56671F46147A00A4555B /* JSPaymentAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CC56651F46146800A4555B /* JSPaymentAddress.h */; };
     
    27672763                A1F600581F4765050077E83F /* JSPaymentRequestUpdateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F600521F4765010077E83F /* JSPaymentRequestUpdateEvent.h */; };
    27682764                A1F6005A1F4765050077E83F /* JSPaymentDetailsUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F600541F4765040077E83F /* JSPaymentDetailsUpdate.h */; };
     2765                A1F6CFFF1FE096210018078C /* ApplePayModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F6CFFC1FE096210018078C /* ApplePayModifier.h */; };
     2766                A1F6D0061FE096F60018078C /* ApplePayPaymentMethodType.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F6D0031FE096F60018078C /* ApplePayPaymentMethodType.h */; };
     2767                A1F6D00F1FE099940018078C /* JSApplePayPaymentMethodType.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F6D00E1FE099640018078C /* JSApplePayPaymentMethodType.h */; };
     2768                A1F6D0101FE099960018078C /* JSApplePayPaymentMethodType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F6D00D1FE099640018078C /* JSApplePayPaymentMethodType.cpp */; };
     2769                A1F6D0111FE099B20018078C /* JSApplePayModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F6D00A1FE099210018078C /* JSApplePayModifier.cpp */; };
     2770                A1F6D0121FE099B40018078C /* JSApplePayModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F6D00C1FE099220018078C /* JSApplePayModifier.h */; };
    27692771                A1F76B131F44C2450014C318 /* PaymentRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F76B101F44C2450014C318 /* PaymentRequest.h */; };
    27702772                A1F76B191F44C3900014C318 /* PaymentMethodData.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F76B161F44C3900014C318 /* PaymentMethodData.h */; };
     
    1055510557                A1C2C5751FA2851600BA46FA /* PaymentSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentSession.cpp; sourceTree = "<group>"; };
    1055610558                A1C7FAA1133A5D3500D6732D /* JSXPathResultCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXPathResultCustom.cpp; sourceTree = "<group>"; };
    10557                 A1CBEF501F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayPaymentMethodUpdateEvent.h; sourceTree = "<group>"; };
    10558                 A1CBEF511F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplePayPaymentMethodUpdateEvent.cpp; sourceTree = "<group>"; };
    10559                 A1CBEF521F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayPaymentMethodUpdateEvent.idl; sourceTree = "<group>"; };
    10560                 A1CBEF5F1F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayPaymentMethodUpdateEvent.cpp; sourceTree = "<group>"; };
    10561                 A1CBEF601F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayPaymentMethodUpdateEvent.h; sourceTree = "<group>"; };
    1056210559                A1CBEF631F9F11290028DE7C /* MockPaymentMethod.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockPaymentMethod.h; sourceTree = "<group>"; };
    1056310560                A1CC11621E493D0100EFA69C /* FileSystemMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileSystemMac.mm; sourceTree = "<group>"; };
     
    1063310630                A1F600531F4765020077E83F /* JSPaymentRequestUpdateEventInit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPaymentRequestUpdateEventInit.cpp; sourceTree = "<group>"; };
    1063410631                A1F600541F4765040077E83F /* JSPaymentDetailsUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPaymentDetailsUpdate.h; sourceTree = "<group>"; };
     10632                A1F6CFFC1FE096210018078C /* ApplePayModifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayModifier.h; sourceTree = "<group>"; };
     10633                A1F6CFFE1FE096210018078C /* ApplePayModifier.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayModifier.idl; sourceTree = "<group>"; };
     10634                A1F6D0031FE096F60018078C /* ApplePayPaymentMethodType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplePayPaymentMethodType.h; sourceTree = "<group>"; };
     10635                A1F6D0051FE096F60018078C /* ApplePayPaymentMethodType.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApplePayPaymentMethodType.idl; sourceTree = "<group>"; };
     10636                A1F6D00A1FE099210018078C /* JSApplePayModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayModifier.cpp; sourceTree = "<group>"; };
     10637                A1F6D00C1FE099220018078C /* JSApplePayModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayModifier.h; sourceTree = "<group>"; };
     10638                A1F6D00D1FE099640018078C /* JSApplePayPaymentMethodType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayPaymentMethodType.cpp; sourceTree = "<group>"; };
     10639                A1F6D00E1FE099640018078C /* JSApplePayPaymentMethodType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayPaymentMethodType.h; sourceTree = "<group>"; };
    1063510640                A1F76B101F44C2450014C318 /* PaymentRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PaymentRequest.h; sourceTree = "<group>"; };
    1063610641                A1F76B111F44C2450014C318 /* PaymentRequest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentRequest.cpp; sourceTree = "<group>"; };
     
    1535415359                                1A8A64421D19FCFB00D0E00F /* ApplePayPaymentMethodSelectedEvent.h */,
    1535515360                                1A8A64431D19FCFB00D0E00F /* ApplePayPaymentMethodSelectedEvent.idl */,
     15361                                A1F6D0031FE096F60018078C /* ApplePayPaymentMethodType.h */,
     15362                                A1F6D0051FE096F60018078C /* ApplePayPaymentMethodType.idl */,
    1535615363                                1ADFDFDA1E71D8DF008F5D34 /* ApplePayPaymentMethodUpdate.h */,
    1535715364                                1ADFDFDB1E71D8DF008F5D34 /* ApplePayPaymentMethodUpdate.idl */,
     
    1551015517                                A1F9296D1F8D9F5A00523AF3 /* JSApplePayMerchantValidationEvent.cpp */,
    1551115518                                A1F9296E1F8D9F5B00523AF3 /* JSApplePayMerchantValidationEvent.h */,
     15519                                A1F6D00A1FE099210018078C /* JSApplePayModifier.cpp */,
     15520                                A1F6D00C1FE099220018078C /* JSApplePayModifier.h */,
    1551215521                                7C65231D1E018B5A00677F22 /* JSApplePayPayment.cpp */,
    1551315522                                7C65230A1E00DBB400677F22 /* JSApplePayPayment.h */,
     
    1552215531                                1AE96A7C1D1A0A8000B86768 /* JSApplePayPaymentMethodSelectedEvent.cpp */,
    1552315532                                1AE96A7D1D1A0A8000B86768 /* JSApplePayPaymentMethodSelectedEvent.h */,
     15533                                A1F6D00D1FE099640018078C /* JSApplePayPaymentMethodType.cpp */,
     15534                                A1F6D00E1FE099640018078C /* JSApplePayPaymentMethodType.h */,
    1552415535                                1ADFDFE51E71DCA0008F5D34 /* JSApplePayPaymentMethodUpdate.cpp */,
    1552515536                                1ADFDFE61E71DCA0008F5D34 /* JSApplePayPaymentMethodUpdate.h */,
    15526                                 A1CBEF5F1F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.cpp */,
    15527                                 A1CBEF601F9F09020028DE7C /* JSApplePayPaymentMethodUpdateEvent.h */,
    1552815537                                7C65230F1E00DBB400677F22 /* JSApplePayPaymentPass.cpp */,
    1552915538                                7C6523101E00DBB400677F22 /* JSApplePayPaymentPass.h */,
     
    2046020469                                A1F929661F8D9CDB00523AF3 /* ApplePayMerchantValidationEvent.h */,
    2046120470                                A1F929681F8D9CDB00523AF3 /* ApplePayMerchantValidationEvent.idl */,
     20471                                A1F6CFFC1FE096210018078C /* ApplePayModifier.h */,
     20472                                A1F6CFFE1FE096210018078C /* ApplePayModifier.idl */,
    2046220473                                A1DF5AA11F7EE1130058A477 /* ApplePayPaymentHandler.cpp */,
    2046320474                                A1DF5AA01F7EE1130058A477 /* ApplePayPaymentHandler.h */,
    20464                                 A1CBEF511F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.cpp */,
    20465                                 A1CBEF501F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.h */,
    20466                                 A1CBEF521F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.idl */,
    2046720475                                A1DF5A7C1F7EBD0B0058A477 /* ApplePayRequest.h */,
    2046820476                                A1DF5A7E1F7EBD0B0058A477 /* ApplePayRequest.idl */,
     
    2607926087                                A1DF5A861F7EBDF20058A477 /* ApplePayMerchantCapability.h in Headers */,
    2608026088                                A1F929691F8D9CDB00523AF3 /* ApplePayMerchantValidationEvent.h in Headers */,
     26089                                A1F6CFFF1FE096210018078C /* ApplePayModifier.h in Headers */,
    2608126090                                7C6523011E00D03400677F22 /* ApplePayPayment.h in Headers */,
    2608226091                                1A8A64521D19FCFB00D0E00F /* ApplePayPaymentAuthorizedEvent.h in Headers */,
     
    2608526094                                7C6522EF1E00A4C700677F22 /* ApplePayPaymentMethod.h in Headers */,
    2608626095                                1A8A64561D19FCFC00D0E00F /* ApplePayPaymentMethodSelectedEvent.h in Headers */,
    26087                                 A1CBEF531F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.h in Headers */,
     26096                                A1F6D0061FE096F60018078C /* ApplePayPaymentMethodType.h in Headers */,
    2608826097                                7C6522F51E00A51700677F22 /* ApplePayPaymentPass.h in Headers */,
    2608926098                                7C6579E01E0079F900E3A27A /* ApplePayPaymentRequest.h in Headers */,
     
    2735827367                                A1DF5A8E1F7EC0020058A477 /* JSApplePayMerchantCapability.h in Headers */,
    2735927368                                A1F929701F8D9F5B00523AF3 /* JSApplePayMerchantValidationEvent.h in Headers */,
     27369                                A1F6D0121FE099B40018078C /* JSApplePayModifier.h in Headers */,
    2736027370                                7C6523141E00DBB400677F22 /* JSApplePayPayment.h in Headers */,
    2736127371                                1AE96A8B1D1A0DDD00B86768 /* JSApplePayPaymentAuthorizedEvent.h in Headers */,
     
    2736327373                                7C6523181E00DBB500677F22 /* JSApplePayPaymentMethod.h in Headers */,
    2736427374                                1AE96A8D1D1A0DDD00B86768 /* JSApplePayPaymentMethodSelectedEvent.h in Headers */,
    27365                                 A1CBEF621F9F09040028DE7C /* JSApplePayPaymentMethodUpdateEvent.h in Headers */,
     27375                                A1F6D00F1FE099940018078C /* JSApplePayPaymentMethodType.h in Headers */,
    2736627376                                7C65231A1E00DBB500677F22 /* JSApplePayPaymentPass.h in Headers */,
    2736727377                                7C6579F21E00856600E3A27A /* JSApplePayPaymentRequest.h in Headers */,
     
    3029030300                                A9787CB41F5F5C6600C551C6 /* AccessibilityMediaObject.cpp in Sources */,
    3029130301                                A1F9296A1F8D9CDB00523AF3 /* ApplePayMerchantValidationEvent.cpp in Sources */,
    30292                                 A1CBEF541F9EEE750028DE7C /* ApplePayPaymentMethodUpdateEvent.cpp in Sources */,
    3029330302                                CD0EEE0E14743F39003EAFA2 /* AudioDestinationIOS.cpp in Sources */,
    3029430303                                CD5596911475B678001D0BD0 /* AudioFileReaderIOS.cpp in Sources */,
     
    3035530364                                6A72798C1F16C29C003F39B8 /* InspectorShaderProgram.cpp in Sources */,
    3035630365                                A1F9296F1F8D9F5B00523AF3 /* JSApplePayMerchantValidationEvent.cpp in Sources */,
    30357                                 A1CBEF611F9F09040028DE7C /* JSApplePayPaymentMethodUpdateEvent.cpp in Sources */,
     30366                                A1F6D0111FE099B20018078C /* JSApplePayModifier.cpp in Sources */,
     30367                                A1F6D0101FE099960018078C /* JSApplePayPaymentMethodType.cpp in Sources */,
    3035830368                                538EC93E1F99BF5A004D22A8 /* JSQuickTimePluginReplacement.cpp in Sources */,
    3035930369                                935C477009AC4D7300A6AAB4 /* KeyEventMac.mm in Sources */,
  • trunk/Source/WebCore/dom/EventNames.h

    r223945 r225849  
    5454    macro(animationiteration) \
    5555    macro(animationstart) \
    56     macro(applepaypaymentmethodchanged) \
    5756    macro(applepayvalidatemerchant) \
    5857    macro(audioend) \
  • trunk/Source/WebCore/dom/EventNames.in

    r225745 r225849  
    4343ApplePayPaymentAuthorizedEvent conditional=APPLE_PAY
    4444ApplePayPaymentMethodSelectedEvent conditional=APPLE_PAY
    45 ApplePayPaymentMethodUpdateEvent conditional=APPLE_PAY
    4645ApplePayShippingContactSelectedEvent conditional=APPLE_PAY
    4746ApplePayShippingMethodSelectedEvent conditional=APPLE_PAY
  • trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp

    r223962 r225849  
    106106}
    107107
     108static ApplePayLineItem convert(const ApplePaySessionPaymentRequest::LineItem& lineItem)
     109{
     110    ApplePayLineItem result;
     111    result.type = lineItem.type;
     112    result.label = lineItem.label;
     113    result.amount = lineItem.amount;
     114    return result;
     115}
     116
     117void MockPaymentCoordinator::updateTotalAndLineItems(const ApplePaySessionPaymentRequest::TotalAndLineItems& totalAndLineItems)
     118{
     119    m_total = convert(totalAndLineItems.total);
     120    m_lineItems.clear();
     121    for (auto& lineItem : totalAndLineItems.lineItems)
     122        m_lineItems.append(convert(lineItem));
     123}
     124
     125void MockPaymentCoordinator::completeShippingMethodSelection(std::optional<ShippingMethodUpdate>&& shippingMethodUpdate)
     126{
     127    if (shippingMethodUpdate)
     128        updateTotalAndLineItems(shippingMethodUpdate->newTotalAndLineItems);
     129}
     130
     131void MockPaymentCoordinator::completeShippingContactSelection(std::optional<ShippingContactUpdate>&& shippingContactUpdate)
     132{
     133    if (shippingContactUpdate)
     134        updateTotalAndLineItems(shippingContactUpdate->newTotalAndLineItems);
     135}
     136   
     137void MockPaymentCoordinator::completePaymentMethodSelection(std::optional<PaymentMethodUpdate>&& paymentMethodUpdate)
     138{
     139    if (paymentMethodUpdate)
     140        updateTotalAndLineItems(paymentMethodUpdate->newTotalAndLineItems);
     141}
     142
    108143void MockPaymentCoordinator::changeShippingOption(String&& shippingOption)
    109144{
  • trunk/Source/WebCore/testing/MockPaymentCoordinator.h

    r223962 r225849  
    2828#if ENABLE(APPLE_PAY)
    2929
     30#include "ApplePayLineItem.h"
    3031#include "MockPaymentAddress.h"
    3132#include "PaymentCoordinatorClient.h"
     
    4647    void cancelPayment();
    4748
     49    const ApplePayLineItem& total() const { return m_total; }
     50    const Vector<ApplePayLineItem>& lineItems() const { return m_lineItems; }
     51
    4852    void ref() const { }
    4953    void deref() const { }
     
    5660    bool showPaymentUI(const URL&, const Vector<URL>&, const ApplePaySessionPaymentRequest&) final;
    5761    void completeMerchantValidation(const PaymentMerchantSession&) final;
    58     void completeShippingMethodSelection(std::optional<ShippingMethodUpdate>&&) final { }
    59     void completeShippingContactSelection(std::optional<ShippingContactUpdate>&&) final { }
    60     void completePaymentMethodSelection(std::optional<PaymentMethodUpdate>&&) final { }
     62    void completeShippingMethodSelection(std::optional<ShippingMethodUpdate>&&) final;
     63    void completeShippingContactSelection(std::optional<ShippingContactUpdate>&&) final;
     64    void completePaymentMethodSelection(std::optional<PaymentMethodUpdate>&&) final;
    6165    void completePaymentSession(std::optional<PaymentAuthorizationResult>&&) final;
    6266    void abortPaymentSession() final;
     
    6468    void paymentCoordinatorDestroyed() final;
    6569
     70    void updateTotalAndLineItems(const ApplePaySessionPaymentRequest::TotalAndLineItems&);
     71
    6672    MainFrame& m_mainFrame;
    6773    MockPaymentAddress m_shippingAddress;
     74    ApplePayLineItem m_total;
     75    Vector<ApplePayLineItem> m_lineItems;
    6876};
    6977
  • trunk/Source/WebCore/testing/MockPaymentCoordinator.idl

    r223962 r225849  
    3333    void acceptPayment();
    3434    void cancelPayment();
     35
     36    readonly attribute ApplePayLineItem total;
     37    readonly attribute sequence<ApplePayLineItem> lineItems;
    3538};
Note: See TracChangeset for help on using the changeset viewer.