From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- dom/payments/PaymentActionResponse.cpp | 421 +++++++++++++++++++++++++++++++++ 1 file changed, 421 insertions(+) create mode 100644 dom/payments/PaymentActionResponse.cpp (limited to 'dom/payments/PaymentActionResponse.cpp') diff --git a/dom/payments/PaymentActionResponse.cpp b/dom/payments/PaymentActionResponse.cpp new file mode 100644 index 0000000000..bca8d7bd76 --- /dev/null +++ b/dom/payments/PaymentActionResponse.cpp @@ -0,0 +1,421 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "PaymentActionResponse.h" +#include "BasicCardPayment.h" +#include "PaymentRequestUtils.h" + +namespace mozilla::dom { + +/* PaymentResponseData */ + +NS_IMPL_ISUPPORTS(PaymentResponseData, nsIPaymentResponseData) + +NS_IMETHODIMP +PaymentResponseData::GetType(uint32_t* aType) { + NS_ENSURE_ARG_POINTER(aType); + *aType = mType; + return NS_OK; +} + +NS_IMETHODIMP +PaymentResponseData::Init(const uint32_t aType) { + if (aType != nsIPaymentResponseData::GENERAL_RESPONSE && + aType != nsIPaymentResponseData::BASICCARD_RESPONSE) { + return NS_ERROR_FAILURE; + } + mType = aType; + return NS_OK; +} + +/* GeneralResponseData */ + +NS_IMPL_ISUPPORTS_INHERITED(GeneralResponseData, PaymentResponseData, + nsIGeneralResponseData) + +GeneralResponseData::GeneralResponseData() : mData(u"{}"_ns) { + Init(nsIPaymentResponseData::GENERAL_RESPONSE); +} + +NS_IMETHODIMP +GeneralResponseData::GetData(nsAString& aData) { + aData = mData; + return NS_OK; +} + +NS_IMETHODIMP +GeneralResponseData::InitData(JS::Handle aValue, JSContext* aCx) { + if (aValue.isNullOrUndefined()) { + return NS_ERROR_FAILURE; + } + nsresult rv = SerializeFromJSVal(aCx, aValue, mData); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + return NS_OK; +} + +/* BasicCardResponseData */ + +NS_IMPL_ISUPPORTS_INHERITED(BasicCardResponseData, PaymentResponseData, + nsIBasicCardResponseData) + +BasicCardResponseData::BasicCardResponseData() { + Init(nsIPaymentResponseData::BASICCARD_RESPONSE); +} + +NS_IMETHODIMP +BasicCardResponseData::GetCardholderName(nsAString& aCardholderName) { + aCardholderName = mCardholderName; + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::GetCardNumber(nsAString& aCardNumber) { + aCardNumber = mCardNumber; + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::GetExpiryMonth(nsAString& aExpiryMonth) { + aExpiryMonth = mExpiryMonth; + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::GetExpiryYear(nsAString& aExpiryYear) { + aExpiryYear = mExpiryYear; + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::GetCardSecurityCode(nsAString& aCardSecurityCode) { + aCardSecurityCode = mCardSecurityCode; + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::GetBillingAddress(nsIPaymentAddress** aBillingAddress) { + NS_ENSURE_ARG_POINTER(aBillingAddress); + nsCOMPtr address; + address = mBillingAddress; + address.forget(aBillingAddress); + return NS_OK; +} + +NS_IMETHODIMP +BasicCardResponseData::InitData(const nsAString& aCardholderName, + const nsAString& aCardNumber, + const nsAString& aExpiryMonth, + const nsAString& aExpiryYear, + const nsAString& aCardSecurityCode, + nsIPaymentAddress* aBillingAddress) { + // cardNumber is a required attribute, cannot be empty; + if (aCardNumber.IsEmpty()) { + return NS_ERROR_FAILURE; + } + + RefPtr service = BasicCardService::GetService(); + MOZ_ASSERT(service); + + if (!service->IsValidExpiryMonth(aExpiryMonth)) { + return NS_ERROR_FAILURE; + } + + if (!service->IsValidExpiryYear(aExpiryYear)) { + return NS_ERROR_FAILURE; + } + + mCardholderName = aCardholderName; + mCardNumber = aCardNumber; + mExpiryMonth = aExpiryMonth; + mExpiryYear = aExpiryYear; + mCardSecurityCode = aCardSecurityCode; + mBillingAddress = aBillingAddress; + + return NS_OK; +} + +/* PaymentActionResponse */ + +NS_IMPL_ISUPPORTS(PaymentActionResponse, nsIPaymentActionResponse) + +PaymentActionResponse::PaymentActionResponse() + : mRequestId(u""_ns), mType(nsIPaymentActionResponse::NO_TYPE) {} + +NS_IMETHODIMP +PaymentActionResponse::GetRequestId(nsAString& aRequestId) { + aRequestId = mRequestId; + return NS_OK; +} + +NS_IMETHODIMP +PaymentActionResponse::GetType(uint32_t* aType) { + NS_ENSURE_ARG_POINTER(aType); + *aType = mType; + return NS_OK; +} + +/* PaymentCanMakeActionResponse */ + +NS_IMPL_ISUPPORTS_INHERITED(PaymentCanMakeActionResponse, PaymentActionResponse, + nsIPaymentCanMakeActionResponse) + +PaymentCanMakeActionResponse::PaymentCanMakeActionResponse() : mResult(false) { + mType = nsIPaymentActionResponse::CANMAKE_ACTION; +} + +NS_IMETHODIMP +PaymentCanMakeActionResponse::GetResult(bool* aResult) { + NS_ENSURE_ARG_POINTER(aResult); + *aResult = mResult; + return NS_OK; +} + +NS_IMETHODIMP +PaymentCanMakeActionResponse::Init(const nsAString& aRequestId, + const bool aResult) { + mRequestId = aRequestId; + mResult = aResult; + return NS_OK; +} + +/* PaymentShowActionResponse */ + +NS_IMPL_ISUPPORTS_INHERITED(PaymentShowActionResponse, PaymentActionResponse, + nsIPaymentShowActionResponse) + +PaymentShowActionResponse::PaymentShowActionResponse() + : mAcceptStatus(nsIPaymentActionResponse::PAYMENT_REJECTED) { + mType = nsIPaymentActionResponse::SHOW_ACTION; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetAcceptStatus(uint32_t* aAcceptStatus) { + NS_ENSURE_ARG_POINTER(aAcceptStatus); + *aAcceptStatus = mAcceptStatus; + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetMethodName(nsAString& aMethodName) { + aMethodName = mMethodName; + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetData(nsIPaymentResponseData** aData) { + NS_ENSURE_ARG_POINTER(aData); + nsCOMPtr data = mData; + data.forget(aData); + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetPayerName(nsAString& aPayerName) { + aPayerName = mPayerName; + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetPayerEmail(nsAString& aPayerEmail) { + aPayerEmail = mPayerEmail; + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::GetPayerPhone(nsAString& aPayerPhone) { + aPayerPhone = mPayerPhone; + return NS_OK; +} + +NS_IMETHODIMP +PaymentShowActionResponse::Init(const nsAString& aRequestId, + const uint32_t aAcceptStatus, + const nsAString& aMethodName, + nsIPaymentResponseData* aData, + const nsAString& aPayerName, + const nsAString& aPayerEmail, + const nsAString& aPayerPhone) { + if (aAcceptStatus == nsIPaymentActionResponse::PAYMENT_ACCEPTED) { + NS_ENSURE_ARG_POINTER(aData); + } + + mRequestId = aRequestId; + mAcceptStatus = aAcceptStatus; + mMethodName = aMethodName; + + RefPtr service = BasicCardService::GetService(); + MOZ_ASSERT(service); + bool isBasicCardPayment = service->IsBasicCardPayment(mMethodName); + + if (aAcceptStatus == nsIPaymentActionResponse::PAYMENT_ACCEPTED) { + uint32_t responseType; + NS_ENSURE_SUCCESS(aData->GetType(&responseType), NS_ERROR_FAILURE); + switch (responseType) { + case nsIPaymentResponseData::GENERAL_RESPONSE: { + if (isBasicCardPayment) { + return NS_ERROR_FAILURE; + } + break; + } + case nsIPaymentResponseData::BASICCARD_RESPONSE: { + if (!isBasicCardPayment) { + return NS_ERROR_FAILURE; + } + break; + } + default: { + return NS_ERROR_FAILURE; + } + } + } + mData = aData; + mPayerName = aPayerName; + mPayerEmail = aPayerEmail; + mPayerPhone = aPayerPhone; + return NS_OK; +} + +/* PaymentAbortActionResponse */ + +NS_IMPL_ISUPPORTS_INHERITED(PaymentAbortActionResponse, PaymentActionResponse, + nsIPaymentAbortActionResponse) + +PaymentAbortActionResponse::PaymentAbortActionResponse() + : mAbortStatus(nsIPaymentActionResponse::ABORT_FAILED) { + mType = nsIPaymentActionResponse::ABORT_ACTION; +} + +NS_IMETHODIMP +PaymentAbortActionResponse::GetAbortStatus(uint32_t* aAbortStatus) { + NS_ENSURE_ARG_POINTER(aAbortStatus); + *aAbortStatus = mAbortStatus; + return NS_OK; +} + +NS_IMETHODIMP +PaymentAbortActionResponse::Init(const nsAString& aRequestId, + const uint32_t aAbortStatus) { + mRequestId = aRequestId; + mAbortStatus = aAbortStatus; + return NS_OK; +} + +NS_IMETHODIMP +PaymentAbortActionResponse::IsSucceeded(bool* aIsSucceeded) { + NS_ENSURE_ARG_POINTER(aIsSucceeded); + *aIsSucceeded = (mAbortStatus == nsIPaymentActionResponse::ABORT_SUCCEEDED); + return NS_OK; +} + +/* PaymentCompleteActionResponse */ + +NS_IMPL_ISUPPORTS_INHERITED(PaymentCompleteActionResponse, + PaymentActionResponse, + nsIPaymentCompleteActionResponse) + +PaymentCompleteActionResponse::PaymentCompleteActionResponse() + : mCompleteStatus(nsIPaymentActionResponse::COMPLETE_FAILED) { + mType = nsIPaymentActionResponse::COMPLETE_ACTION; +} + +nsresult PaymentCompleteActionResponse::Init(const nsAString& aRequestId, + const uint32_t aCompleteStatus) { + mRequestId = aRequestId; + mCompleteStatus = aCompleteStatus; + return NS_OK; +} + +nsresult PaymentCompleteActionResponse::GetCompleteStatus( + uint32_t* aCompleteStatus) { + NS_ENSURE_ARG_POINTER(aCompleteStatus); + *aCompleteStatus = mCompleteStatus; + return NS_OK; +} + +nsresult PaymentCompleteActionResponse::IsCompleted(bool* aIsCompleted) { + NS_ENSURE_ARG_POINTER(aIsCompleted); + *aIsCompleted = + (mCompleteStatus == nsIPaymentActionResponse::COMPLETE_SUCCEEDED); + return NS_OK; +} + +/* PaymentChangeDetails */ + +NS_IMPL_ISUPPORTS(MethodChangeDetails, nsIMethodChangeDetails) + +NS_IMETHODIMP +MethodChangeDetails::GetType(uint32_t* aType) { + NS_ENSURE_ARG_POINTER(aType); + *aType = mType; + return NS_OK; +} + +NS_IMETHODIMP +MethodChangeDetails::Init(const uint32_t aType) { + if (aType != nsIMethodChangeDetails::GENERAL_DETAILS && + aType != nsIMethodChangeDetails::BASICCARD_DETAILS) { + return NS_ERROR_FAILURE; + } + mType = aType; + return NS_OK; +} + +/* GeneralMethodChangeDetails */ + +NS_IMPL_ISUPPORTS_INHERITED(GeneralMethodChangeDetails, MethodChangeDetails, + nsIGeneralChangeDetails) + +GeneralMethodChangeDetails::GeneralMethodChangeDetails() : mDetails(u"{}"_ns) { + Init(nsIMethodChangeDetails::GENERAL_DETAILS); +} + +NS_IMETHODIMP +GeneralMethodChangeDetails::GetDetails(nsAString& aDetails) { + aDetails = mDetails; + return NS_OK; +} + +NS_IMETHODIMP +GeneralMethodChangeDetails::InitData(JS::Handle aDetails, + JSContext* aCx) { + if (aDetails.isNullOrUndefined()) { + return NS_ERROR_FAILURE; + } + nsresult rv = SerializeFromJSVal(aCx, aDetails, mDetails); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + return NS_OK; +} + +/* BasicCardMethodChangeDetails */ + +NS_IMPL_ISUPPORTS_INHERITED(BasicCardMethodChangeDetails, MethodChangeDetails, + nsIBasicCardChangeDetails) + +BasicCardMethodChangeDetails::BasicCardMethodChangeDetails() { + Init(nsIMethodChangeDetails::BASICCARD_DETAILS); +} + +NS_IMETHODIMP +BasicCardMethodChangeDetails::GetBillingAddress( + nsIPaymentAddress** aBillingAddress) { + NS_ENSURE_ARG_POINTER(aBillingAddress); + nsCOMPtr address; + address = mBillingAddress; + address.forget(aBillingAddress); + return NS_OK; +} + +NS_IMETHODIMP +BasicCardMethodChangeDetails::InitData(nsIPaymentAddress* aBillingAddress) { + mBillingAddress = aBillingAddress; + return NS_OK; +} + +} // namespace mozilla::dom -- cgit v1.2.3