Diff
Modified: trunk/Source/WebCore/ChangeLog (273158 => 273159)
--- trunk/Source/WebCore/ChangeLog 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/ChangeLog 2021-02-19 20:47:53 UTC (rev 273159)
@@ -1,3 +1,74 @@
+2021-02-19 Devin Rousso <drou...@apple.com>
+
+ [Payment Request] add support for Apple Pay payment method mode
+ https://bugs.webkit.org/show_bug.cgi?id=222128
+ <rdar://problem/72320278>
+
+ Reviewed by Wenson Hsieh.
+
+ * Modules/applepay/ApplePayPaymentMethodModeUpdate.idl: Added.
+ * Modules/applepay/ApplePayPaymentMethodModeUpdate.h: Added.
+ (WebCore::ApplePayPaymentMethodModeUpdate::encode const):
+ (WebCore::ApplePayPaymentMethodModeUpdate::decode):
+ Allow all aspects of the current payment request to be updated.
+
+ * Modules/applepay/ApplePaySession.h:
+ * Modules/applepay/ApplePaySession.cpp:
+ (WebCore::convertAndValidate):
+ (WebCore::ApplePaySession::didChangePaymentMethodMode): Added.
+ (WebCore::ApplePaySession::canSuspendWithoutCanceling const):
+ (WebCore::ApplePaySession::canBegin const):
+ (WebCore::ApplePaySession::canAbort const):
+ (WebCore::ApplePaySession::canCancel const):
+ (WebCore::ApplePaySession::canCompleteShippingMethodSelection const):
+ (WebCore::ApplePaySession::canCompleteShippingContactSelection const):
+ (WebCore::ApplePaySession::canCompletePaymentMethodSelection const):
+ (WebCore::ApplePaySession::canCompletePaymentMethodModeChange const): Added.
+ (WebCore::ApplePaySession::canCompletePayment const):
+ (WebCore::ApplePaySession::isFinalState const):
+ Dispatch a new event for when the payment method mode changes and add a new method to be
+ called inside that event handler.
+
+ * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
+ * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
+ (WebCore::ApplePayPaymentHandler::computeErrors const): Added.
+ (WebCore::ApplePayPaymentHandler::detailsUpdated):
+ (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
+ (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
+ (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
+ (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
+ (WebCore::ApplePayPaymentHandler::didSelectShippingMethod):
+ (WebCore::ApplePayPaymentHandler::didSelectShippingContact):
+ (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
+ (WebCore::ApplePayPaymentHandler::didChangePaymentMethodMode): Added.
+ Use the existing `PaymentMethodChangeEvent` by providing the new mode in `methodDetails`.
+
+ * Modules/applepay/PaymentCoordinator.h:
+ * Modules/applepay/PaymentCoordinator.cpp:
+ (WebCore::PaymentCoordinator::completePaymentMethodModeChange): Added.
+ (WebCore::PaymentCoordinator::didChangePaymentMethodMode): Added.
+ * Modules/applepay/PaymentCoordinatorClient.h:
+ * Modules/applepay/PaymentSession.h:
+ Piping from/to the WebProcess for payment method mode changes.
+
+ * dom/EventNames.h:
+ * Modules/applepay/ApplePayErrorCode.h:
+ * Modules/applepay/ApplePayErrorCode.idl:
+ New enum values for payment method mode errors.
+
+ * Modules/applepay/PaymentHeaders.h:
+ * loader/EmptyClients.cpp:
+ * testing/MockPaymentCoordinator.h:
+ * testing/MockPaymentCoordinator.cpp:
+ (WebCore::MockPaymentCoordinator::completePaymentMethodModeChange): Added.
+
+ * PlatformMac.cmake:
+ * SourcesCocoa.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * DerivedSources-input.xcfilelist:
+ * DerivedSources-output.xcfilelist:
+ * DerivedSources.make:
+
2021-02-19 Youenn Fablet <you...@apple.com>
Allow to use BigInt as key identifier
Modified: trunk/Source/WebCore/DerivedSources-input.xcfilelist (273158 => 273159)
--- trunk/Source/WebCore/DerivedSources-input.xcfilelist 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/DerivedSources-input.xcfilelist 2021-02-19 20:47:53 UTC (rev 273159)
@@ -41,6 +41,7 @@
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentAuthorizedEvent.idl
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentContact.idl
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentMethod.idl
+$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentMethodSelectedEvent.idl
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentMethodType.idl
$(PROJECT_DIR)/Modules/applepay/ApplePayPaymentMethodUpdate.idl
Modified: trunk/Source/WebCore/DerivedSources-output.xcfilelist (273158 => 273159)
--- trunk/Source/WebCore/DerivedSources-output.xcfilelist 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/DerivedSources-output.xcfilelist 2021-02-19 20:47:53 UTC (rev 273159)
@@ -122,6 +122,8 @@
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentContact.h
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethod.cpp
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethod.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethodModeUpdate.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethodModeUpdate.h
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethodSelectedEvent.cpp
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethodSelectedEvent.h
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSApplePayPaymentMethodType.cpp
Modified: trunk/Source/WebCore/DerivedSources.make (273158 => 273159)
--- trunk/Source/WebCore/DerivedSources.make 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/DerivedSources.make 2021-02-19 20:47:53 UTC (rev 273159)
@@ -70,6 +70,7 @@
$(WebCore)/Modules/applepay/ApplePayPaymentAuthorizedEvent.idl \
$(WebCore)/Modules/applepay/ApplePayPaymentContact.idl \
$(WebCore)/Modules/applepay/ApplePayPaymentMethod.idl \
+ $(WebCore)/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl \
$(WebCore)/Modules/applepay/ApplePayPaymentMethodSelectedEvent.idl \
$(WebCore)/Modules/applepay/ApplePayPaymentMethodType.idl \
$(WebCore)/Modules/applepay/ApplePayPaymentMethodUpdate.idl \
Modified: trunk/Source/WebCore/Modules/applepay/ApplePayErrorCode.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/ApplePayErrorCode.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayErrorCode.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -29,6 +29,10 @@
#include <wtf/Forward.h>
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/ApplePayErrorCodeAdditions.h>
+#endif
+
namespace WebCore {
enum class ApplePayErrorCode {
@@ -36,6 +40,9 @@
ShippingContactInvalid,
BillingContactInvalid,
AddressUnserviceable,
+#if defined(ApplePayErrorCodeAdditions_values)
+ ApplePayErrorCodeAdditions_values
+#endif
};
} // namespace WebCore
@@ -49,6 +56,9 @@
WebCore::ApplePayErrorCode::ShippingContactInvalid,
WebCore::ApplePayErrorCode::BillingContactInvalid,
WebCore::ApplePayErrorCode::AddressUnserviceable
+#if defined(ApplePayErrorCodeAdditions_EnumTraits)
+ ApplePayErrorCodeAdditions_EnumTraits
+#endif
>;
};
Added: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.h (0 => 273159)
--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.h (rev 0)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2021 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_PAYMENT_METHOD_MODE)
+
+#include "ApplePayDetailsUpdateBase.h"
+#include "ApplePayError.h"
+#include "ApplePayShippingMethod.h"
+#include <wtf/Optional.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+struct ApplePayPaymentMethodModeUpdate final : public ApplePayDetailsUpdateBase {
+ Vector<RefPtr<ApplePayError>> errors;
+
+ Vector<ApplePayShippingMethod> newShippingMethods;
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static Optional<ApplePayPaymentMethodModeUpdate> decode(Decoder&);
+};
+
+template<class Encoder>
+void ApplePayPaymentMethodModeUpdate::encode(Encoder& encoder) const
+{
+ ApplePayDetailsUpdateBase::encode(encoder);
+ encoder << errors;
+ encoder << newShippingMethods;
+}
+
+template<class Decoder>
+Optional<ApplePayPaymentMethodModeUpdate> ApplePayPaymentMethodModeUpdate::decode(Decoder& decoder)
+{
+ ApplePayPaymentMethodModeUpdate result;
+
+ if (!result.decodeBase(decoder))
+ return WTF::nullopt;
+
+ Optional<Vector<RefPtr<ApplePayError>>> errors;
+ decoder >> errors;
+ if (!errors)
+ return WTF::nullopt;
+ result.errors = WTFMove(*errors);
+
+ Optional<Vector<ApplePayShippingMethod>> newShippingMethods;
+ decoder >> newShippingMethods;
+ if (!newShippingMethods)
+ return WTF::nullopt;
+ result.newShippingMethods = WTFMove(*newShippingMethods);
+
+ return result;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
Copied: trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl (from rev 273158, trunk/Source/WebCore/Modules/applepay/PaymentHeaders.h) (0 => 273159)
--- trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl (rev 0)
+++ trunk/Source/WebCore/Modules/applepay/ApplePayPaymentMethodModeUpdate.idl 2021-02-19 20:47:53 UTC (rev 273159)
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2021 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_PAYMENT_METHOD_MODE,
+] dictionary ApplePayPaymentMethodModeUpdate : ApplePayDetailsUpdateBase {
+ sequence<ApplePayError> errors;
+
+ sequence<ApplePayShippingMethod> newShippingMethods;
+};
Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -34,6 +34,7 @@
#include "ApplePayLineItem.h"
#include "ApplePayPaymentAuthorizationResult.h"
#include "ApplePayPaymentAuthorizedEvent.h"
+#include "ApplePayPaymentMethodModeUpdate.h"
#include "ApplePayPaymentMethodSelectedEvent.h"
#include "ApplePayPaymentMethodUpdate.h"
#include "ApplePayPaymentRequest.h"
@@ -350,6 +351,30 @@
return WTFMove(update);
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+static ExceptionOr<ApplePayPaymentMethodModeUpdate> convertAndValidate(ApplePayPaymentMethodModeUpdate&& update)
+{
+ auto convertedNewShippingMethods = convertAndValidate(WTFMove(update.newShippingMethods));
+ if (convertedNewShippingMethods.hasException())
+ return convertedNewShippingMethods.releaseException();
+ update.newShippingMethods = convertedNewShippingMethods.releaseReturnValue();
+
+ auto convertedNewTotal = convertAndValidateTotal(WTFMove(update.newTotal));
+ if (convertedNewTotal.hasException())
+ return convertedNewTotal.releaseException();
+ update.newTotal = convertedNewTotal.releaseReturnValue();
+
+ auto convertedNewLineItems = convertAndValidate(WTFMove(update.newLineItems));
+ if (convertedNewLineItems.hasException())
+ return convertedNewLineItems.releaseException();
+ update.newLineItems = convertedNewLineItems.releaseReturnValue();
+
+ return WTFMove(update);
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
ExceptionOr<Ref<ApplePaySession>> ApplePaySession::create(Document& document, unsigned version, ApplePayPaymentRequest&& paymentRequest)
{
auto canCall = canCreateSession(document);
@@ -771,6 +796,19 @@
dispatchEvent(event.get());
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void ApplePaySession::didChangePaymentMethodMode(String&& paymentMethodMode)
+{
+ ASSERT(m_state == State::Active);
+
+#if defined(ApplePaySessionAdditions_didChangePaymentMethodMode)
+ ApplePaySessionAdditions_didChangePaymentMethodMode
+#endif
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void ApplePaySession::didCancelPaymentSession(PaymentSessionError&& error)
{
ASSERT(canCancel());
@@ -802,6 +840,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
}
@@ -852,6 +893,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
}
@@ -871,6 +915,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return true;
}
@@ -890,6 +937,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return true;
}
@@ -917,6 +967,9 @@
case State::Authorized:
case State::PaymentMethodSelected:
case State::ShippingContactSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
@@ -936,6 +989,9 @@
case State::Authorized:
case State::PaymentMethodSelected:
case State::ShippingMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
@@ -955,6 +1011,9 @@
case State::Authorized:
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
@@ -963,6 +1022,30 @@
}
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+bool ApplePaySession::canCompletePaymentMethodModeChange() const
+{
+ switch (m_state) {
+ case State::Idle:
+ case State::Aborted:
+ case State::Active:
+ case State::Completed:
+ case State::Canceled:
+ case State::Authorized:
+ case State::ShippingMethodSelected:
+ case State::ShippingContactSelected:
+ case State::CancelRequested:
+ case State::PaymentMethodSelected:
+ return false;
+
+ case State::PaymentMethodModeChanged:
+ return true;
+ }
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
bool ApplePaySession::canCompletePayment() const
{
switch (m_state) {
@@ -974,6 +1057,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::CancelRequested:
return false;
@@ -990,6 +1076,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
case State::Authorized:
case State::CancelRequested:
return false;
@@ -1007,6 +1096,10 @@
unsetPendingActivity(*this);
}
+#if defined(ApplePaySessionAdditions_definitions)
+ApplePaySessionAdditions_definitions
+#endif
+
}
#endif
Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySession.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/ApplePaySession.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySession.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -35,6 +35,10 @@
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/ApplePaySessionAdditions.h>
+#endif
+
namespace JSC {
class CallFrame;
class JSGlobalObject;
@@ -54,6 +58,9 @@
struct ApplePayPaymentRequest;
struct ApplePayShippingMethod;
struct ApplePayPaymentAuthorizationResult;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+struct ApplePayPaymentMethodModeUpdate;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
struct ApplePayPaymentMethodUpdate;
struct ApplePayShippingContactUpdate;
struct ApplePayShippingMethodUpdate;
@@ -118,6 +125,9 @@
void didSelectShippingMethod(const ApplePayShippingMethod&) override;
void didSelectShippingContact(const PaymentContact&) override;
void didSelectPaymentMethod(const PaymentMethod&) override;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void didChangePaymentMethodMode(String&& paymentMethodMode) override;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void didCancelPaymentSession(PaymentSessionError&&) override;
PaymentCoordinator& paymentCoordinator() const;
@@ -129,6 +139,9 @@
bool canCompleteShippingMethodSelection() const;
bool canCompleteShippingContactSelection() const;
bool canCompletePaymentMethodSelection() const;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ bool canCompletePaymentMethodModeChange() const;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
bool canCompletePayment() const;
bool canSuspendWithoutCanceling() const;
@@ -142,6 +155,9 @@
ShippingMethodSelected,
ShippingContactSelected,
PaymentMethodSelected,
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ PaymentMethodModeChanged,
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
CancelRequested,
Authorized,
Completed,
@@ -158,6 +174,10 @@
const ApplePaySessionPaymentRequest m_paymentRequest;
unsigned m_version;
+
+#if defined(ApplePaySessionAdditions_declarations)
+ ApplePaySessionAdditions_declarations
+#endif
};
}
Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -28,6 +28,7 @@
#if ENABLE(APPLE_PAY)
+#include "ApplePayPaymentMethodModeUpdate.h"
#include "ApplePayPaymentMethodUpdate.h"
#include "ApplePayShippingContactUpdate.h"
#include "ApplePayShippingMethod.h"
@@ -153,6 +154,17 @@
m_client.completePaymentMethodSelection(WTFMove(update));
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void PaymentCoordinator::completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&& update)
+{
+ ASSERT(m_activeSession);
+ RELEASE_LOG_IF_ALLOWED("completePaymentMethodModeChange()");
+ m_client.completePaymentMethodModeChange(WTFMove(update));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void PaymentCoordinator::completePaymentSession(Optional<PaymentAuthorizationResult>&& result)
{
ASSERT(m_activeSession);
@@ -237,6 +249,21 @@
m_activeSession->didSelectShippingContact(shippingContact);
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void PaymentCoordinator::didChangePaymentMethodMode(String&& paymentMethodMode)
+{
+ if (!m_activeSession) {
+ // It's possible that the payment has been aborted already.
+ return;
+ }
+
+ RELEASE_LOG_IF_ALLOWED("didChangePaymentMethodMode()");
+ m_activeSession->didChangePaymentMethodMode(WTFMove(paymentMethodMode));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void PaymentCoordinator::didCancelPaymentSession(PaymentSessionError&& error)
{
if (!m_activeSession) {
Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinator.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -45,6 +45,9 @@
class PaymentSession;
class PaymentSessionError;
enum class PaymentAuthorizationStatus;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+struct ApplePayPaymentMethodModeUpdate;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
struct ApplePayPaymentMethodUpdate;
struct ApplePaySetupConfiguration;
struct ApplePayShippingContactUpdate;
@@ -73,6 +76,9 @@
void completeShippingMethodSelection(Optional<ApplePayShippingMethodUpdate>&&);
void completeShippingContactSelection(Optional<ApplePayShippingContactUpdate>&&);
void completePaymentMethodSelection(Optional<ApplePayPaymentMethodUpdate>&&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&&);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(Optional<PaymentAuthorizationResult>&&);
void abortPaymentSession();
void cancelPaymentSession();
@@ -82,6 +88,9 @@
WEBCORE_EXPORT void didSelectPaymentMethod(const PaymentMethod&);
WEBCORE_EXPORT void didSelectShippingMethod(const ApplePayShippingMethod&);
WEBCORE_EXPORT void didSelectShippingContact(const PaymentContact&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ WEBCORE_EXPORT void didChangePaymentMethodMode(String&& paymentMethodMode);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
WEBCORE_EXPORT void didCancelPaymentSession(PaymentSessionError&&);
Optional<String> validatedPaymentNetwork(Document&, unsigned version, const String&) const;
Modified: trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/PaymentCoordinatorClient.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -38,6 +38,9 @@
class Document;
class PaymentMerchantSession;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+struct ApplePayPaymentMethodModeUpdate;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
struct ApplePayPaymentMethodUpdate;
struct ApplePaySetupConfiguration;
struct ApplePayShippingContactUpdate;
@@ -58,6 +61,9 @@
virtual void completeShippingMethodSelection(Optional<ApplePayShippingMethodUpdate>&&) = 0;
virtual void completeShippingContactSelection(Optional<ApplePayShippingContactUpdate>&&) = 0;
virtual void completePaymentMethodSelection(Optional<ApplePayPaymentMethodUpdate>&&) = 0;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ virtual void completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&&) = 0;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
virtual void completePaymentSession(Optional<PaymentAuthorizationResult>&&) = 0;
virtual void abortPaymentSession() = 0;
virtual void cancelPaymentSession() = 0;
Modified: trunk/Source/WebCore/Modules/applepay/PaymentHeaders.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/PaymentHeaders.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/PaymentHeaders.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -25,6 +25,7 @@
#pragma once
+#include "ApplePayPaymentMethodModeUpdate.h"
#include "ApplePayPaymentMethodUpdate.h"
#include "ApplePaySessionPaymentRequest.h"
#include "ApplePayShippingContactUpdate.h"
Modified: trunk/Source/WebCore/Modules/applepay/PaymentSession.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/PaymentSession.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/PaymentSession.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -51,6 +51,9 @@
virtual void didSelectShippingMethod(const ApplePayShippingMethod&) = 0;
virtual void didSelectShippingContact(const PaymentContact&) = 0;
virtual void didSelectPaymentMethod(const PaymentMethod&) = 0;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ virtual void didChangePaymentMethodMode(String&& paymentMethodMode) = 0;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
virtual void didCancelPaymentSession(PaymentSessionError&&) = 0;
};
Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -38,6 +38,7 @@
#include "ApplePayMerchantCapability.h"
#include "ApplePayModifier.h"
#include "ApplePayPayment.h"
+#include "ApplePayPaymentMethodModeUpdate.h"
#include "ApplePayPaymentMethodUpdate.h"
#include "ApplePaySessionPaymentRequest.h"
#include "ApplePayShippingContactUpdate.h"
@@ -452,6 +453,20 @@
return errors;
}
+Vector<RefPtr<ApplePayError>> ApplePayPaymentHandler::computeErrors(JSC::JSObject* paymentMethodErrors) const
+{
+ Vector<RefPtr<ApplePayError>> errors;
+
+ auto scope = DECLARE_CATCH_SCOPE(scriptExecutionContext()->vm());
+ auto exception = computePaymentMethodErrors(paymentMethodErrors, errors);
+ if (exception.hasException()) {
+ ASSERT(scope.exception());
+ scope.clearException();
+ }
+
+ return errors;
+}
+
void ApplePayPaymentHandler::computeAddressErrors(String&& error, AddressErrors&& addressErrors, Vector<RefPtr<ApplePayError>>& errors) const
{
if (!m_paymentRequest->paymentOptions().requestShipping)
@@ -512,7 +527,7 @@
case Reason::ShippingOptionChanged:
return shippingOptionUpdated();
case Reason::PaymentMethodChanged:
- return paymentMethodUpdated();
+ return paymentMethodUpdated(computeErrors(paymentMethodErrors));
}
ASSERT_NOT_REACHED();
@@ -542,8 +557,8 @@
ExceptionOr<void> ApplePayPaymentHandler::shippingAddressUpdated(Vector<RefPtr<ApplePayError>>&& errors)
{
- ASSERT(m_isUpdating);
- m_isUpdating = false;
+ ASSERT(m_updateState == UpdateState::ShippingAddress);
+ m_updateState = UpdateState::None;
ApplePayShippingContactUpdate update;
update.errors = WTFMove(errors);
@@ -569,8 +584,8 @@
ExceptionOr<void> ApplePayPaymentHandler::shippingOptionUpdated()
{
- ASSERT(m_isUpdating);
- m_isUpdating = false;
+ ASSERT(m_updateState == UpdateState::ShippingOption);
+ m_updateState = UpdateState::None;
ApplePayShippingMethodUpdate update;
@@ -588,11 +603,40 @@
return { };
}
-ExceptionOr<void> ApplePayPaymentHandler::paymentMethodUpdated()
+ExceptionOr<void> ApplePayPaymentHandler::paymentMethodUpdated(Vector<RefPtr<ApplePayError>>&& errors)
{
- ASSERT(m_isUpdating);
- m_isUpdating = false;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ if (m_updateState == UpdateState::PaymentMethodMode) {
+ m_updateState = UpdateState::None;
+ ApplePayPaymentMethodModeUpdate update;
+ update.errors = WTFMove(errors);
+
+ auto newShippingMethods = computeShippingMethods();
+ if (newShippingMethods.hasException())
+ return newShippingMethods.releaseException();
+ update.newShippingMethods = newShippingMethods.releaseReturnValue();
+
+ auto newTotalAndLineItems = computeTotalAndLineItems();
+ if (newTotalAndLineItems.hasException())
+ return newTotalAndLineItems.releaseException();
+ std::tie(update.newTotal, update.newLineItems) = newTotalAndLineItems.releaseReturnValue();
+
+ auto applePayDetailsUpdateData = convertAndValidate(*scriptExecutionContext(), m_paymentRequest->paymentDetails());
+ if (applePayDetailsUpdateData.hasException())
+ return applePayDetailsUpdateData.releaseException();
+ merge(update, applePayDetailsUpdateData.releaseReturnValue());
+
+ paymentCoordinator().completePaymentMethodModeChange(WTFMove(update));
+ return { };
+ }
+#else
+ UNUSED_PARAM(errors);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+ ASSERT(m_updateState == UpdateState::PaymentMethod);
+ m_updateState = UpdateState::None;
+
ApplePayPaymentMethodUpdate update;
auto newTotalAndLineItems = computeTotalAndLineItems();
@@ -678,7 +722,7 @@
void ApplePayPaymentHandler::didAuthorizePayment(const Payment& payment)
{
- ASSERT(!m_isUpdating);
+ ASSERT(m_updateState == UpdateState::None);
auto applePayPayment = payment.toApplePayPayment(version());
auto shippingContact = applePayPayment.shippingContact.valueOr(ApplePayPaymentContact());
@@ -691,8 +735,8 @@
void ApplePayPaymentHandler::didSelectShippingMethod(const ApplePayShippingMethod& shippingMethod)
{
- ASSERT(!m_isUpdating);
- m_isUpdating = true;
+ ASSERT(m_updateState == UpdateState::None);
+ m_updateState = UpdateState::ShippingOption;
m_paymentRequest->shippingOptionChanged(shippingMethod.identifier);
}
@@ -699,8 +743,8 @@
void ApplePayPaymentHandler::didSelectShippingContact(const PaymentContact& shippingContact)
{
- ASSERT(!m_isUpdating);
- m_isUpdating = true;
+ ASSERT(m_updateState == UpdateState::None);
+ m_updateState = UpdateState::ShippingAddress;
m_paymentRequest->shippingAddressChanged(convert(shippingContact.toApplePayPaymentContact(version())));
}
@@ -707,8 +751,8 @@
void ApplePayPaymentHandler::didSelectPaymentMethod(const PaymentMethod& paymentMethod)
{
- ASSERT(!m_isUpdating);
- m_isUpdating = true;
+ ASSERT(m_updateState == UpdateState::None);
+ m_updateState = UpdateState::PaymentMethod;
auto applePayPaymentMethod = paymentMethod.toApplePayPaymentMethod();
m_selectedPaymentMethodType = applePayPaymentMethod.type;
@@ -717,6 +761,28 @@
});
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void ApplePayPaymentHandler::didChangePaymentMethodMode(String&& paymentMethodMode)
+{
+ ASSERT(m_updateState == UpdateState::None);
+ m_updateState = UpdateState::PaymentMethodMode;
+
+ m_paymentRequest->paymentMethodChanged(WTF::get<URL>(m_identifier).string(), [paymentMethodMode = WTFMove(paymentMethodMode)] (JSC::JSGlobalObject& lexicalGlobalObject) -> JSC::Strong<JSC::JSObject> {
+ auto& vm = lexicalGlobalObject.vm();
+
+ JSC::JSLockHolder lock(vm);
+
+ auto* object = JSC::constructEmptyObject(&lexicalGlobalObject);
+#if defined(ApplePayPaymentHandlerAdditions_didChangePaymentMethodMode)
+ ApplePayPaymentHandlerAdditions_didChangePaymentMethodMode
+#endif
+ return { vm, object };
+ });
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void ApplePayPaymentHandler::didCancelPaymentSession(PaymentSessionError&&)
{
m_paymentRequest->cancel();
Modified: trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.h (273158 => 273159)
--- trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -57,6 +57,7 @@
ExceptionOr<Vector<ApplePayShippingMethod>> computeShippingMethods();
ExceptionOr<std::tuple<ApplePayLineItem, Vector<ApplePayLineItem>>> computeTotalAndLineItems() const;
Vector<RefPtr<ApplePayError>> computeErrors(String&& error, AddressErrors&&, PayerErrorFields&&, JSC::JSObject* paymentMethodErrors) const;
+ Vector<RefPtr<ApplePayError>> computeErrors(JSC::JSObject* paymentMethodErrors) const;
void computeAddressErrors(String&& error, AddressErrors&&, Vector<RefPtr<ApplePayError>>&) const;
void computePayerErrors(PayerErrorFields&&, Vector<RefPtr<ApplePayError>>&) const;
ExceptionOr<void> computePaymentMethodErrors(JSC::JSObject* paymentMethodErrors, Vector<RefPtr<ApplePayError>>&) const;
@@ -63,7 +64,7 @@
ExceptionOr<void> shippingAddressUpdated(Vector<RefPtr<ApplePayError>>&& errors);
ExceptionOr<void> shippingOptionUpdated();
- ExceptionOr<void> paymentMethodUpdated();
+ ExceptionOr<void> paymentMethodUpdated(Vector<RefPtr<ApplePayError>>&& errors);
// PaymentHandler
ExceptionOr<void> convertData(JSC::JSValue) final;
@@ -82,6 +83,9 @@
void didSelectShippingMethod(const ApplePayShippingMethod&) final;
void didSelectShippingContact(const PaymentContact&) final;
void didSelectPaymentMethod(const PaymentMethod&) final;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void didChangePaymentMethodMode(String&& paymentMethodMode) final;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void didCancelPaymentSession(PaymentSessionError&&) final;
PaymentRequest::MethodIdentifier m_identifier;
@@ -88,7 +92,16 @@
Ref<PaymentRequest> m_paymentRequest;
Optional<ApplePayRequest> m_applePayRequest;
Optional<ApplePayPaymentMethodType> m_selectedPaymentMethodType;
- bool m_isUpdating { false };
+
+ enum class UpdateState : uint8_t {
+ None,
+ ShippingAddress,
+ ShippingOption,
+ PaymentMethod,
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ PaymentMethodMode,
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ } m_updateState { UpdateState::None };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/PlatformMac.cmake (273158 => 273159)
--- trunk/Source/WebCore/PlatformMac.cmake 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/PlatformMac.cmake 2021-02-19 20:47:53 UTC (rev 273159)
@@ -632,6 +632,7 @@
Modules/applepay/ApplePayPaymentAuthorizedEvent.idl
Modules/applepay/ApplePayPaymentContact.idl
Modules/applepay/ApplePayPaymentMethod.idl
+ Modules/applepay/ApplePayPaymentMethodModeUpdate.idl
Modules/applepay/ApplePayPaymentMethodSelectedEvent.idl
Modules/applepay/ApplePayPaymentMethodType.idl
Modules/applepay/ApplePayPaymentMethodUpdate.idl
Modified: trunk/Source/WebCore/SourcesCocoa.txt (273158 => 273159)
--- trunk/Source/WebCore/SourcesCocoa.txt 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/SourcesCocoa.txt 2021-02-19 20:47:53 UTC (rev 273159)
@@ -41,6 +41,7 @@
JSApplePayPaymentAuthorizedEvent.cpp
JSApplePayPaymentContact.cpp
JSApplePayPaymentMethod.cpp
+JSApplePayPaymentMethodModeUpdate.cpp
JSApplePayPaymentMethodSelectedEvent.cpp
JSApplePayPaymentMethodType.cpp
JSApplePayPaymentMethodUpdate.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (273158 => 273159)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-02-19 20:47:53 UTC (rev 273159)
@@ -2945,6 +2945,8 @@
953BCEB225D6283D00A4A2A1 /* JSApplePayDetailsUpdateBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 953BCEAF25D6283C00A4A2A1 /* JSApplePayDetailsUpdateBase.h */; };
956FC4BB25D49C7B00F7B3A2 /* ApplePayLineItemData.h in Headers */ = {isa = PBXBuildFile; fileRef = 956FC4B825D49C7A00F7B3A2 /* ApplePayLineItemData.h */; settings = {ATTRIBUTES = (Private, ); }; };
956FC4BB25D49C7B00F7B3A3 /* JSApplePayLineItemData.h in Headers */ = {isa = PBXBuildFile; fileRef = 956FC4BA25D49C7D00F7B3A2 /* JSApplePayLineItemData.h */; };
+ 9596B93325DEEEA000ED2CFA /* ApplePayPaymentMethodModeUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9596B93025DEEE9F00ED2CFA /* ApplePayPaymentMethodModeUpdate.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 9596B93825DEEF0300ED2CFA /* JSApplePayPaymentMethodModeUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9596B93625DEEF0200ED2CFA /* JSApplePayPaymentMethodModeUpdate.h */; };
95A1E2E925CC75A900268C8E /* MediaControlsContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 95A1E2E725CC75A800268C8E /* MediaControlsContextMenuItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
95DF9D25252BEDB2000D7F46 /* PointerCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 95DF9D23252BED99000D7F46 /* PointerCharacteristics.h */; settings = {ATTRIBUTES = (Private, ); }; };
9705997A107D975200A50A7C /* PolicyChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 97059976107D975200A50A7C /* PolicyChecker.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -11791,6 +11793,10 @@
956FC4B825D49C7C00F7B3A2 /* JSApplePayLineItemData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayLineItemData.cpp; sourceTree = "<group>"; };
956FC4BA25D49C7B00F7B3A2 /* ApplePayLineItemData.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ApplePayLineItemData.idl; sourceTree = "<group>"; };
956FC4BA25D49C7D00F7B3A2 /* JSApplePayLineItemData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayLineItemData.h; sourceTree = "<group>"; };
+ 9596B93025DEEE9F00ED2CFA /* ApplePayPaymentMethodModeUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplePayPaymentMethodModeUpdate.h; sourceTree = "<group>"; };
+ 9596B93225DEEE9F00ED2CFA /* ApplePayPaymentMethodModeUpdate.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ApplePayPaymentMethodModeUpdate.idl; sourceTree = "<group>"; };
+ 9596B93525DEEF0000ED2CFA /* JSApplePayPaymentMethodModeUpdate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSApplePayPaymentMethodModeUpdate.cpp; sourceTree = "<group>"; };
+ 9596B93625DEEF0200ED2CFA /* JSApplePayPaymentMethodModeUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSApplePayPaymentMethodModeUpdate.h; sourceTree = "<group>"; };
95A1E2E725CC75A800268C8E /* MediaControlsContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaControlsContextMenuItem.h; sourceTree = "<group>"; };
95DF9D23252BED99000D7F46 /* PointerCharacteristics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PointerCharacteristics.h; sourceTree = "<group>"; };
97059975107D975200A50A7C /* PolicyChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolicyChecker.cpp; sourceTree = "<group>"; };
@@ -18382,6 +18388,8 @@
7C6522F91E00C90900677F22 /* ApplePayPaymentContact.idl */,
7C6522EC1E00A4C700677F22 /* ApplePayPaymentMethod.h */,
7C6522ED1E00A4C700677F22 /* ApplePayPaymentMethod.idl */,
+ 9596B93025DEEE9F00ED2CFA /* ApplePayPaymentMethodModeUpdate.h */,
+ 9596B93225DEEE9F00ED2CFA /* ApplePayPaymentMethodModeUpdate.idl */,
1A8A64401D19FCFB00D0E00F /* ApplePayPaymentMethodSelectedEvent.cpp */,
1A8A64421D19FCFB00D0E00F /* ApplePayPaymentMethodSelectedEvent.h */,
1A8A64431D19FCFB00D0E00F /* ApplePayPaymentMethodSelectedEvent.idl */,
@@ -18596,6 +18604,8 @@
7C65230C1E00DBB400677F22 /* JSApplePayPaymentContact.h */,
7C65230D1E00DBB400677F22 /* JSApplePayPaymentMethod.cpp */,
7C65230E1E00DBB400677F22 /* JSApplePayPaymentMethod.h */,
+ 9596B93525DEEF0000ED2CFA /* JSApplePayPaymentMethodModeUpdate.cpp */,
+ 9596B93625DEEF0200ED2CFA /* JSApplePayPaymentMethodModeUpdate.h */,
1AE96A7C1D1A0A8000B86768 /* JSApplePayPaymentMethodSelectedEvent.cpp */,
1AE96A7D1D1A0A8000B86768 /* JSApplePayPaymentMethodSelectedEvent.h */,
A1F6D00D1FE099640018078C /* JSApplePayPaymentMethodType.cpp */,
@@ -31216,6 +31226,7 @@
7C6522FB1E00C90900677F22 /* ApplePayPaymentContact.h in Headers */,
A1DF5AA21F7EE1130058A477 /* ApplePayPaymentHandler.h in Headers */,
7C6522EF1E00A4C700677F22 /* ApplePayPaymentMethod.h in Headers */,
+ 9596B93325DEEEA000ED2CFA /* ApplePayPaymentMethodModeUpdate.h in Headers */,
1A8A64561D19FCFC00D0E00F /* ApplePayPaymentMethodSelectedEvent.h in Headers */,
A1F6D0061FE096F60018078C /* ApplePayPaymentMethodType.h in Headers */,
A12C59F12035FCBF0012236B /* ApplePayPaymentMethodUpdate.h in Headers */,
@@ -32784,6 +32795,7 @@
1AE96A8B1D1A0DDD00B86768 /* JSApplePayPaymentAuthorizedEvent.h in Headers */,
7C6523161E00DBB500677F22 /* JSApplePayPaymentContact.h in Headers */,
7C6523181E00DBB500677F22 /* JSApplePayPaymentMethod.h in Headers */,
+ 9596B93825DEEF0300ED2CFA /* JSApplePayPaymentMethodModeUpdate.h in Headers */,
1AE96A8D1D1A0DDD00B86768 /* JSApplePayPaymentMethodSelectedEvent.h in Headers */,
A1F6D00F1FE099940018078C /* JSApplePayPaymentMethodType.h in Headers */,
A12C59FC20360B270012236B /* JSApplePayPaymentMethodUpdate.h in Headers */,
Modified: trunk/Source/WebCore/dom/EventNames.h (273158 => 273159)
--- trunk/Source/WebCore/dom/EventNames.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/dom/EventNames.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -32,6 +32,10 @@
#include "RuntimeEnabledFeatures.h"
#endif
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/EventNamesAdditions.h>
+#endif
+
namespace WebCore {
#if !defined(ADDITIONAL_DOM_EVENT_NAMES_FOR_EACH)
Modified: trunk/Source/WebCore/loader/EmptyClients.cpp (273158 => 273159)
--- trunk/Source/WebCore/loader/EmptyClients.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/loader/EmptyClients.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -367,6 +367,9 @@
void completeShippingMethodSelection(Optional<ApplePayShippingMethodUpdate>&&) final { }
void completeShippingContactSelection(Optional<ApplePayShippingContactUpdate>&&) final { }
void completePaymentMethodSelection(Optional<ApplePayPaymentMethodUpdate>&&) final { }
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&&) final { }
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(Optional<PaymentAuthorizationResult>&&) final { }
void cancelPaymentSession() final { }
void abortPaymentSession() final { }
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp (273158 => 273159)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -28,6 +28,7 @@
#if ENABLE(APPLE_PAY)
+#include "ApplePayPaymentMethodModeUpdate.h"
#include "ApplePayPaymentMethodUpdate.h"
#include "ApplePaySessionPaymentRequest.h"
#include "ApplePayShippingContactUpdate.h"
@@ -163,6 +164,21 @@
m_lineItems = WTFMove(paymentMethodUpdate->newLineItems);
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void MockPaymentCoordinator::completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&& paymentMethodModeUpdate)
+{
+ if (!paymentMethodModeUpdate)
+ return;
+
+ m_total = WTFMove(paymentMethodModeUpdate->newTotal);
+ m_lineItems = WTFMove(paymentMethodModeUpdate->newLineItems);
+ m_errors = convert(WTFMove(paymentMethodModeUpdate->errors));
+ m_shippingMethods = WTFMove(paymentMethodModeUpdate->newShippingMethods);
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void MockPaymentCoordinator::changeShippingOption(String&& shippingOption)
{
dispatchIfShowing([page = &m_page, shippingOption = WTFMove(shippingOption)]() mutable {
Modified: trunk/Source/WebCore/testing/MockPaymentCoordinator.h (273158 => 273159)
--- trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebCore/testing/MockPaymentCoordinator.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -85,6 +85,9 @@
void completeShippingMethodSelection(Optional<ApplePayShippingMethodUpdate>&&) final;
void completeShippingContactSelection(Optional<ApplePayShippingContactUpdate>&&) final;
void completePaymentMethodSelection(Optional<ApplePayPaymentMethodUpdate>&&) final;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<ApplePayPaymentMethodModeUpdate>&&) final;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(Optional<PaymentAuthorizationResult>&&) final;
void abortPaymentSession() final;
void cancelPaymentSession() final;
Modified: trunk/Source/WebKit/ChangeLog (273158 => 273159)
--- trunk/Source/WebKit/ChangeLog 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/ChangeLog 2021-02-19 20:47:53 UTC (rev 273159)
@@ -1,3 +1,43 @@
+2021-02-19 Devin Rousso <drou...@apple.com>
+
+ [Payment Request] add support for Apple Pay payment method mode
+ https://bugs.webkit.org/show_bug.cgi?id=222128
+ <rdar://problem/72320278>
+
+ Reviewed by Wenson Hsieh.
+
+ Handle the delegate call from `PaymentAuthorization(View)Controller` by passing it along to
+ the WebProcess to be handled by WebCore. Handle the response sent by the WebProcess by
+ invoking the callback that was provided by the delegate call (which is saved to an ivar).
+
+ * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:
+ * WebProcess/ApplePay/WebPaymentCoordinator.h:
+ * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
+ (WebKit::WebPaymentCoordinator::completePaymentMethodModeChange): Added.
+ (WebKit::WebPaymentCoordinator::didChangePaymentMethodMode): Added.
+
+ * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
+ * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
+ * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
+ (WebKit::WebPaymentCoordinatorProxy::completePaymentMethodModeChange): Added.
+ (WebKit::WebPaymentCoordinatorProxy::presenterDidChangePaymentMethodMode): Added.
+ (WebKit::WebPaymentCoordinatorProxy::canBegin const):
+ (WebKit::WebPaymentCoordinatorProxy::canCancel const):
+ (WebKit::WebPaymentCoordinatorProxy::canCompletePayment const):
+ (WebKit::WebPaymentCoordinatorProxy::canAbort const):
+
+ * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
+ (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodModeChange): Added.
+ * Platform/cocoa/PaymentAuthorizationPresenter.h:
+ * Platform/cocoa/PaymentAuthorizationPresenter.mm:
+ (WebKit::toPKPaymentErrorCode):
+ (WebKit::PaymentAuthorizationPresenter::completePaymentMethodModeChange): Added.
+
+ * Platform/cocoa/PaymentAuthorizationViewController.mm:
+ * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
+ * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
+ * Platform/ios/PaymentAuthorizationController.mm:
+
2021-02-19 Per Arne Vollan <pvol...@apple.com>
[macOS] Add IOKit filtering also when the GPU process is enabled
Modified: trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.h (273158 => 273159)
--- trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -42,6 +42,9 @@
class PaymentMerchantSession;
class PaymentMethod;
class PaymentSessionError;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+struct ApplePayPaymentMethodModeUpdate;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
struct ApplePayPaymentMethodUpdate;
struct ApplePayShippingContactUpdate;
struct ApplePayShippingMethod;
@@ -62,6 +65,9 @@
virtual void presenterDidSelectPaymentMethod(PaymentAuthorizationPresenter&, const WebCore::PaymentMethod&) = 0;
virtual void presenterDidSelectShippingContact(PaymentAuthorizationPresenter&, const WebCore::PaymentContact&) = 0;
virtual void presenterDidSelectShippingMethod(PaymentAuthorizationPresenter&, const WebCore::ApplePayShippingMethod&) = 0;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ virtual void presenterDidChangePaymentMethodMode(PaymentAuthorizationPresenter&, const String& paymentMethodMode) = 0;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
virtual void presenterWillValidateMerchant(PaymentAuthorizationPresenter&, const URL&) = 0;
};
@@ -74,6 +80,9 @@
void completePaymentSession(const Optional<WebCore::PaymentAuthorizationResult>&);
void completeShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate>&&);
void completeShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate>&&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
virtual void dismiss() = 0;
#if PLATFORM(IOS_FAMILY)
Modified: trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.mm (273158 => 273159)
--- trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationPresenter.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -34,6 +34,7 @@
#import <WebCore/ApplePayError.h>
#import <WebCore/ApplePayErrorCode.h>
#import <WebCore/ApplePayErrorContactField.h>
+#import <WebCore/ApplePayPaymentMethodModeUpdate.h>
#import <WebCore/ApplePayPaymentMethodUpdate.h>
#import <WebCore/ApplePayShippingContactUpdate.h>
#import <WebCore/ApplePayShippingMethodUpdate.h>
@@ -92,6 +93,9 @@
return PKPaymentBillingContactInvalidError;
case WebCore::ApplePayErrorCode::AddressUnserviceable:
return PKPaymentShippingAddressUnserviceableError;
+#if defined(PaymentAuthorizationPresenterAdditions_toPKPaymentErrorCode)
+ PaymentAuthorizationPresenterAdditions_toPKPaymentErrorCode
+#endif
}
}
@@ -255,6 +259,24 @@
[platformDelegate() completeShippingMethodSelection:shippingMethodUpdate.get()];
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void PaymentAuthorizationPresenter::completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&& update)
+{
+ ASSERT(platformDelegate());
+ if (!update) {
+ [platformDelegate() completePaymentMethodModeChange:nil];
+ return;
+ }
+
+#if defined(PaymentAuthorizationPresenterAdditions_completePaymentMethodModeChange)
+ PaymentAuthorizationPresenterAdditions_completePaymentMethodModeChange
+#endif
+ [platformDelegate() completePaymentMethodModeChange:paymentMethodModeUpdate.get()];
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
} // namespace WebKit
#endif // USE(PASSKIT) && ENABLE(APPLE_PAY)
Modified: trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationViewController.mm (273158 => 273159)
--- trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationViewController.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/cocoa/PaymentAuthorizationViewController.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -31,6 +31,10 @@
#import "WKPaymentAuthorizationDelegate.h"
#import <pal/cocoa/PassKitSoftLink.h>
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/PaymentAuthorizationViewControllerAdditions.mm>
+#endif
+
@interface WKPaymentAuthorizationViewControllerDelegate : WKPaymentAuthorizationDelegate <PKPaymentAuthorizationViewControllerDelegate, PKPaymentAuthorizationViewControllerPrivateDelegate>
- (instancetype)initWithRequest:(PKPaymentRequest *)request presenter:(WebKit::PaymentAuthorizationPresenter&)presenter;
@@ -79,6 +83,10 @@
[self _didSelectPaymentMethod:paymentMethod completion:completion];
}
+#if defined(PaymentAuthorizationViewControllerAdditions_PKPaymentAuthorizationViewControllerDelegate)
+PaymentAuthorizationViewControllerAdditions_PKPaymentAuthorizationViewControllerDelegate
+#endif
+
#pragma mark PKPaymentAuthorizationViewControllerDelegatePrivate
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller willFinishWithError:(NSError *)error
Modified: trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.h (273158 => 273159)
--- trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -33,6 +33,10 @@
OBJC_CLASS NSError;
OBJC_CLASS UIViewController;
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/WKPaymentAuthorizationDelegateAdditions.h>
+#endif
+
namespace WebKit {
class PaymentAuthorizationPresenter;
@@ -57,6 +61,9 @@
- (void)completePaymentSession:(PKPaymentAuthorizationStatus)status errors:(NSArray<NSError *> *)errors;
- (void)completeShippingContactSelection:(PKPaymentRequestShippingContactUpdate *)shippingContactUpdate;
- (void)completeShippingMethodSelection:(PKPaymentRequestShippingMethodUpdate *)shippingMethodUpdate;
+#if defined(WKPaymentAuthorizationDelegateAdditions_interface_public)
+WKPaymentAuthorizationDelegateAdditions_interface_public
+#endif
- (void)invalidate;
@end
@@ -72,6 +79,9 @@
- (void)_didSelectPaymentMethod:(PKPaymentMethod *)paymentMethod completion:(WebKit::DidSelectPaymentMethodCompletion::BlockType)completion;
- (void)_didSelectShippingContact:(PKContact *)contact completion:(WebKit::DidSelectShippingContactCompletion::BlockType)completion;
- (void)_didSelectShippingMethod:(PKShippingMethod *)shippingMethod completion:(WebKit::DidSelectShippingMethodCompletion::BlockType)completion;
+#if defined(WKPaymentAuthorizationDelegateAdditions_interface_protected)
+WKPaymentAuthorizationDelegateAdditions_interface_protected
+#endif
- (void)_getPaymentServicesMerchantURL:(void(^)(NSURL *, NSError *))completion;
- (void)_willFinishWithError:(NSError *)error;
Modified: trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.mm (273158 => 273159)
--- trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/cocoa/WKPaymentAuthorizationDelegate.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -32,6 +32,10 @@
#import <WebCore/PaymentMethod.h>
#import <WebCore/PaymentSessionError.h>
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/WKPaymentAuthorizationDelegateAdditions.mm>
+#endif
+
@implementation WKPaymentAuthorizationDelegate {
RetainPtr<NSArray<PKPaymentSummaryItem *>> _summaryItems;
RetainPtr<NSArray<PKShippingMethod *>> _shippingMethods;
@@ -42,6 +46,9 @@
WebKit::DidSelectPaymentMethodCompletion _didSelectPaymentMethodCompletion;
WebKit::DidSelectShippingContactCompletion _didSelectShippingContactCompletion;
WebKit::DidSelectShippingMethodCompletion _didSelectShippingMethodCompletion;
+#if defined(WKPaymentAuthorizationDelegateAdditions_implementation_members)
+ WKPaymentAuthorizationDelegateAdditions_implementation_members
+#endif
}
- (NSArray<PKPaymentSummaryItem *> *)summaryItems
@@ -86,6 +93,10 @@
std::exchange(_didSelectShippingMethodCompletion, nil)(update);
}
+#if defined(WKPaymentAuthorizationDelegateAdditions_implementation_public)
+ WKPaymentAuthorizationDelegateAdditions_implementation_public
+#endif
+
- (void)invalidate
{
if (_didAuthorizePaymentCompletion)
@@ -197,6 +208,10 @@
presenter->client().presenterDidSelectShippingMethod(*presenter, toShippingMethod(shippingMethod));
}
+#if defined(WKPaymentAuthorizationDelegateAdditions_implementation_protected)
+ WKPaymentAuthorizationDelegateAdditions_implementation_protected
+#endif
+
- (void) NO_RETURN_DUE_TO_ASSERT _getPaymentServicesMerchantURL:(void(^)(NSURL *, NSError *))completion
{
ASSERT_NOT_REACHED();
Modified: trunk/Source/WebKit/Platform/ios/PaymentAuthorizationController.mm (273158 => 273159)
--- trunk/Source/WebKit/Platform/ios/PaymentAuthorizationController.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Platform/ios/PaymentAuthorizationController.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -32,6 +32,10 @@
#import <pal/cocoa/PassKitSoftLink.h>
#import <wtf/CompletionHandler.h>
+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/PaymentAuthorizationControllerAdditions.mm>
+#endif
+
@interface WKPaymentAuthorizationControllerDelegate : WKPaymentAuthorizationDelegate <PKPaymentAuthorizationControllerDelegate, PKPaymentAuthorizationControllerPrivateDelegate>
- (instancetype)initWithRequest:(PKPaymentRequest *)request presenter:(WebKit::PaymentAuthorizationPresenter&)presenter;
@@ -84,6 +88,10 @@
[self _didSelectPaymentMethod:paymentMethod completion:completion];
}
+#if defined(PaymentAuthorizationControllerAdditions_PKPaymentAuthorizationControllerDelegate)
+PaymentAuthorizationControllerAdditions_PKPaymentAuthorizationControllerDelegate
+#endif
+
#pragma mark PKPaymentAuthorizationControllerPrivateDelegate
- (void)paymentAuthorizationController:(PKPaymentAuthorizationController *)controller willFinishWithError:(NSError *)error
Modified: trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp (273158 => 273159)
--- trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -33,6 +33,7 @@
#include "WebPaymentCoordinatorMessages.h"
#include "WebPaymentCoordinatorProxyMessages.h"
#include "WebProcessProxy.h"
+#include <WebCore/ApplePayPaymentMethodModeUpdate.h>
#include <WebCore/ApplePayPaymentMethodUpdate.h>
#include <WebCore/ApplePayShippingContactUpdate.h>
#include <WebCore/ApplePayShippingMethodUpdate.h>
@@ -167,6 +168,22 @@
m_state = State::Active;
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinatorProxy::completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&& update)
+{
+ // It's possible that the payment has been canceled already.
+ if (m_state == State::Idle)
+ return;
+
+ MESSAGE_CHECK(m_state == State::PaymentMethodModeChanged);
+
+ platformCompletePaymentMethodModeChange(WTFMove(update));
+ m_state = State::Active;
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinatorProxy::completePaymentSession(const Optional<WebCore::PaymentAuthorizationResult>& result)
{
// It's possible that the payment has been canceled already.
@@ -229,6 +246,18 @@
send(Messages::WebPaymentCoordinator::DidSelectShippingMethod(shippingMethod));
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinatorProxy::presenterDidChangePaymentMethodMode(PaymentAuthorizationPresenter&, const String& paymentMethodMode)
+{
+ ASSERT(m_state == State::Active);
+
+ m_state = State::PaymentMethodModeChanged;
+ send(Messages::WebPaymentCoordinator::DidChangePaymentMethodMode(paymentMethodMode));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinatorProxy::presenterDidSelectShippingContact(PaymentAuthorizationPresenter&, const WebCore::PaymentContact& shippingContact)
{
ASSERT(m_state == State::Active);
@@ -258,6 +287,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
return false;
}
}
@@ -271,6 +303,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
return true;
case State::Completing:
@@ -292,6 +327,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
return false;
}
}
@@ -305,6 +343,9 @@
case State::ShippingMethodSelected:
case State::ShippingContactSelected:
case State::PaymentMethodSelected:
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ case State::PaymentMethodModeChanged:
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
return true;
case State::Completing:
Modified: trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.h (273158 => 273159)
--- trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -51,6 +51,9 @@
class PaymentContact;
class PaymentMerchantSession;
class PaymentMethod;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+struct ApplePayPaymentMethodModeUpdate;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
struct ApplePayPaymentMethodUpdate;
struct ApplePayShippingContactUpdate;
struct ApplePayShippingMethod;
@@ -118,6 +121,9 @@
void presenterDidSelectPaymentMethod(PaymentAuthorizationPresenter&, const WebCore::PaymentMethod&) final;
void presenterDidSelectShippingContact(PaymentAuthorizationPresenter&, const WebCore::PaymentContact&) final;
void presenterDidSelectShippingMethod(PaymentAuthorizationPresenter&, const WebCore::ApplePayShippingMethod&) final;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void presenterDidChangePaymentMethodMode(PaymentAuthorizationPresenter&, const String& paymentMethodMode) final;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void presenterWillValidateMerchant(PaymentAuthorizationPresenter&, const URL&) final;
// Message handlers
@@ -129,6 +135,9 @@
void completeShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate>&&);
void completeShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate>&&);
void completePaymentMethodSelection(Optional<WebCore::ApplePayPaymentMethodUpdate>&&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(const Optional<WebCore::PaymentAuthorizationResult>&);
void abortPaymentSession();
void cancelPaymentSession();
@@ -154,6 +163,9 @@
void platformCompleteShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate>&&);
void platformCompleteShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate>&&);
void platformCompletePaymentMethodSelection(Optional<WebCore::ApplePayPaymentMethodUpdate>&&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void platformCompletePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void platformCompletePaymentSession(const Optional<WebCore::PaymentAuthorizationResult>&);
void platformHidePaymentUI();
#if PLATFORM(COCOA)
@@ -185,6 +197,11 @@
// PaymentMethodSelected - Dispatching the paymentmethodselected event and waiting for a reply.
PaymentMethodSelected,
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ // PaymentMethodSelected - Dispatching the paymentmethodmodechanged event and waiting for a reply.
+ PaymentMethodModeChanged,
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
// Completing - Completing the payment and waiting for presenterDidFinish to be called.
Completing,
} m_state { State::Idle };
Modified: trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in (273158 => 273159)
--- trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in 2021-02-19 20:47:53 UTC (rev 273159)
@@ -35,6 +35,9 @@
CompleteShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate> update)
CompleteShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate> update)
CompletePaymentMethodSelection(Optional<WebCore::ApplePayPaymentMethodUpdate> update)
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ CompletePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate> update)
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
CompletePaymentSession(Optional<WebCore::PaymentAuthorizationResult> result)
AbortPaymentSession()
CancelPaymentSession()
Modified: trunk/Source/WebKit/Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm (273158 => 273159)
--- trunk/Source/WebKit/Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -36,6 +36,7 @@
#import "WebPaymentCoordinatorProxy.h"
#import "WebPaymentCoordinatorProxyMessages.h"
#import "WebProcessProxy.h"
+#import <WebCore/ApplePayPaymentMethodModeUpdate.h>
#import <WebCore/ApplePayPaymentMethodUpdate.h>
#import <WebCore/ApplePayShippingContactUpdate.h>
#import <WebCore/ApplePayShippingMethod.h>
@@ -293,6 +294,15 @@
m_authorizationPresenter->completePaymentMethodSelection(WTFMove(update));
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinatorProxy::platformCompletePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&& update)
+{
+ m_authorizationPresenter->completePaymentMethodModeChange(WTFMove(update));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinatorProxy::getSetupFeatures(const PaymentSetupConfiguration& configuration, Messages::WebPaymentCoordinatorProxy::GetSetupFeatures::AsyncReply&& reply)
{
#if PLATFORM(MAC)
Modified: trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp (273158 => 273159)
--- trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.cpp 2021-02-19 20:47:53 UTC (rev 273159)
@@ -36,6 +36,7 @@
#include "WebPaymentCoordinatorMessages.h"
#include "WebPaymentCoordinatorProxyMessages.h"
#include "WebProcess.h"
+#include <WebCore/ApplePayPaymentMethodModeUpdate.h>
#include <WebCore/ApplePayPaymentMethodUpdate.h>
#include <WebCore/ApplePayShippingContactUpdate.h>
#include <WebCore/ApplePayShippingMethodUpdate.h>
@@ -127,6 +128,15 @@
send(Messages::WebPaymentCoordinatorProxy::CompletePaymentMethodSelection(WTFMove(update)));
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinator::completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&& update)
+{
+ send(Messages::WebPaymentCoordinatorProxy::CompletePaymentMethodModeChange(WTFMove(update)));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinator::completePaymentSession(Optional<WebCore::PaymentAuthorizationResult>&& result)
{
send(Messages::WebPaymentCoordinatorProxy::CompletePaymentSession(result));
@@ -206,6 +216,15 @@
paymentCoordinator().didSelectPaymentMethod(paymentMethod);
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinator::didChangePaymentMethodMode(String&& paymentMethodMode)
+{
+ paymentCoordinator().didChangePaymentMethodMode(WTFMove(paymentMethodMode));
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinator::didCancelPaymentSession(WebCore::PaymentSessionError&& sessionError)
{
paymentCoordinator().didCancelPaymentSession(WTFMove(sessionError));
Modified: trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h (273158 => 273159)
--- trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -68,6 +68,9 @@
void completeShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate>&&) override;
void completeShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate>&&) override;
void completePaymentMethodSelection(Optional<WebCore::ApplePayPaymentMethodUpdate>&&) override;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&) override;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(Optional<WebCore::PaymentAuthorizationResult>&&) override;
void abortPaymentSession() override;
@@ -99,6 +102,9 @@
void didSelectShippingMethod(const WebCore::ApplePayShippingMethod&);
void didSelectShippingContact(const WebCore::PaymentContact&);
void didSelectPaymentMethod(const WebCore::PaymentMethod&);
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void didChangePaymentMethodMode(String&& paymentMethodMode);
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void didCancelPaymentSession(WebCore::PaymentSessionError&&);
WebCore::PaymentCoordinator& paymentCoordinator();
Modified: trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.messages.in (273158 => 273159)
--- trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.messages.in 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKit/WebProcess/ApplePay/WebPaymentCoordinator.messages.in 2021-02-19 20:47:53 UTC (rev 273159)
@@ -31,6 +31,9 @@
DidSelectShippingMethod(struct WebCore::ApplePayShippingMethod shippingMethod)
DidSelectShippingContact(WebCore::PaymentContact shippingContact)
DidSelectPaymentMethod(WebCore::PaymentMethod paymentMethod)
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ DidChangePaymentMethodMode(String paymentMethodMode)
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
DidCancelPaymentSession(WebCore::PaymentSessionError sessionError)
}
Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (273158 => 273159)
--- trunk/Source/WebKitLegacy/mac/ChangeLog 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog 2021-02-19 20:47:53 UTC (rev 273159)
@@ -1,5 +1,17 @@
2021-02-19 Devin Rousso <drou...@apple.com>
+ [Payment Request] add support for Apple Pay payment method mode
+ https://bugs.webkit.org/show_bug.cgi?id=222128
+ <rdar://problem/72320278>
+
+ Reviewed by Wenson Hsieh.
+
+ * WebCoreSupport/WebPaymentCoordinatorClient.h:
+ * WebCoreSupport/WebPaymentCoordinatorClient.mm:
+ (WebPaymentCoordinatorClient::completePaymentMethodModeChange):
+
+2021-02-19 Devin Rousso <drou...@apple.com>
+
[Payment Request] add an `object data` to `PaymentDetailsBase` so that data specific to Apple Pay can be provided
https://bugs.webkit.org/show_bug.cgi?id=222002
<rdar://problem/72319946>
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h (273158 => 273159)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.h 2021-02-19 20:47:53 UTC (rev 273159)
@@ -45,6 +45,9 @@
void completeShippingMethodSelection(Optional<WebCore::ApplePayShippingMethodUpdate>&&) override;
void completeShippingContactSelection(Optional<WebCore::ApplePayShippingContactUpdate>&&) override;
void completePaymentMethodSelection(Optional<WebCore::ApplePayPaymentMethodUpdate>&&) override;
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+ void completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&) override;
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
void completePaymentSession(Optional<WebCore::PaymentAuthorizationResult>&&) override;
void abortPaymentSession() override;
void cancelPaymentSession() override;
Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm (273158 => 273159)
--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm 2021-02-19 20:39:40 UTC (rev 273158)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPaymentCoordinatorClient.mm 2021-02-19 20:47:53 UTC (rev 273159)
@@ -84,6 +84,14 @@
{
}
+#if ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
+void WebPaymentCoordinatorClient::completePaymentMethodModeChange(Optional<WebCore::ApplePayPaymentMethodModeUpdate>&&)
+{
+}
+
+#endif // ENABLE(APPLE_PAY_PAYMENT_METHOD_MODE)
+
void WebPaymentCoordinatorClient::completePaymentSession(Optional<WebCore::PaymentAuthorizationResult>&&)
{
}