summaryrefslogtreecommitdiffstats
path: root/dom/payments/PaymentRequestData.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/payments/PaymentRequestData.h')
-rw-r--r--dom/payments/PaymentRequestData.h257
1 files changed, 257 insertions, 0 deletions
diff --git a/dom/payments/PaymentRequestData.h b/dom/payments/PaymentRequestData.h
new file mode 100644
index 0000000000..e4b9cadcd1
--- /dev/null
+++ b/dom/payments/PaymentRequestData.h
@@ -0,0 +1,257 @@
+/* -*- 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/. */
+
+#ifndef mozilla_dom_PaymentRequestData_h
+#define mozilla_dom_PaymentRequestData_h
+
+#include "nsIPaymentAddress.h"
+#include "nsIPaymentRequest.h"
+#include "nsCOMPtr.h"
+#include "mozilla/dom/PaymentRequestParent.h"
+
+namespace mozilla::dom::payments {
+
+class PaymentMethodData final : public nsIPaymentMethodData {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTMETHODDATA
+
+ static nsresult Create(const IPCPaymentMethodData& aIPCMethodData,
+ nsIPaymentMethodData** aMethodData);
+
+ private:
+ PaymentMethodData(const nsAString& aSupportedMethods, const nsAString& aData);
+
+ ~PaymentMethodData() = default;
+
+ nsString mSupportedMethods;
+ nsString mData;
+};
+
+class PaymentCurrencyAmount final : public nsIPaymentCurrencyAmount {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTCURRENCYAMOUNT
+
+ static nsresult Create(const IPCPaymentCurrencyAmount& aIPCAmount,
+ nsIPaymentCurrencyAmount** aAmount);
+
+ private:
+ PaymentCurrencyAmount(const nsAString& aCurrency, const nsAString& aValue);
+
+ ~PaymentCurrencyAmount() = default;
+
+ nsString mCurrency;
+ nsString mValue;
+};
+
+class PaymentItem final : public nsIPaymentItem {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTITEM
+
+ static nsresult Create(const IPCPaymentItem& aIPCItem,
+ nsIPaymentItem** aItem);
+
+ private:
+ PaymentItem(const nsAString& aLabel, nsIPaymentCurrencyAmount* aAmount,
+ const bool aPending);
+
+ ~PaymentItem() = default;
+
+ nsString mLabel;
+ nsCOMPtr<nsIPaymentCurrencyAmount> mAmount;
+ bool mPending;
+};
+
+class PaymentDetailsModifier final : public nsIPaymentDetailsModifier {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTDETAILSMODIFIER
+
+ static nsresult Create(const IPCPaymentDetailsModifier& aIPCModifier,
+ nsIPaymentDetailsModifier** aModifier);
+
+ private:
+ PaymentDetailsModifier(const nsAString& aSupportedMethods,
+ nsIPaymentItem* aTotal,
+ nsIArray* aAdditionalDisplayItems,
+ const nsAString& aData);
+
+ ~PaymentDetailsModifier() = default;
+
+ nsString mSupportedMethods;
+ nsCOMPtr<nsIPaymentItem> mTotal;
+ nsCOMPtr<nsIArray> mAdditionalDisplayItems;
+ nsString mData;
+};
+
+class PaymentShippingOption final : public nsIPaymentShippingOption {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTSHIPPINGOPTION
+
+ static nsresult Create(const IPCPaymentShippingOption& aIPCOption,
+ nsIPaymentShippingOption** aOption);
+
+ private:
+ PaymentShippingOption(const nsAString& aId, const nsAString& aLabel,
+ nsIPaymentCurrencyAmount* aAmount,
+ const bool aSelected = false);
+
+ ~PaymentShippingOption() = default;
+
+ nsString mId;
+ nsString mLabel;
+ nsCOMPtr<nsIPaymentCurrencyAmount> mAmount;
+ bool mSelected;
+};
+
+class PaymentDetails final : public nsIPaymentDetails {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTDETAILS
+
+ static nsresult Create(const IPCPaymentDetails& aIPCDetails,
+ nsIPaymentDetails** aDetails);
+ nsresult Update(nsIPaymentDetails* aDetails, const bool aRequestShipping);
+ const nsString& GetShippingAddressErrors() const;
+ const nsString& GetPayerErrors() const;
+ const nsString& GetPaymentMethodErrors() const;
+ nsresult UpdateErrors(const nsAString& aError, const nsAString& aPayerErrors,
+ const nsAString& aPaymentMethodErrors,
+ const nsAString& aShippingAddressErrors);
+
+ private:
+ PaymentDetails(const nsAString& aId, nsIPaymentItem* aTotalItem,
+ nsIArray* aDisplayItems, nsIArray* aShippingOptions,
+ nsIArray* aModifiers, const nsAString& aError,
+ const nsAString& aShippingAddressError,
+ const nsAString& aPayerError,
+ const nsAString& aPaymentMethodError);
+
+ ~PaymentDetails() = default;
+
+ nsString mId;
+ nsCOMPtr<nsIPaymentItem> mTotalItem;
+ nsCOMPtr<nsIArray> mDisplayItems;
+ nsCOMPtr<nsIArray> mShippingOptions;
+ nsCOMPtr<nsIArray> mModifiers;
+ nsString mError;
+ nsString mShippingAddressErrors;
+ nsString mPayerErrors;
+ nsString mPaymentMethodErrors;
+};
+
+class PaymentOptions final : public nsIPaymentOptions {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTOPTIONS
+
+ static nsresult Create(const IPCPaymentOptions& aIPCOptions,
+ nsIPaymentOptions** aOptions);
+
+ private:
+ PaymentOptions(const bool aRequestPayerName, const bool aRequestPayerEmail,
+ const bool aRequestPayerPhone, const bool aRequestShipping,
+ const bool aRequestBillingAddress,
+ const nsAString& aShippintType);
+ ~PaymentOptions() = default;
+
+ bool mRequestPayerName;
+ bool mRequestPayerEmail;
+ bool mRequestPayerPhone;
+ bool mRequestShipping;
+ bool mRequestBillingAddress;
+ nsString mShippingType;
+};
+
+class PaymentRequest final : public nsIPaymentRequest {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTREQUEST
+
+ PaymentRequest(const uint64_t aTopOuterWindowId, const nsAString& aRequestId,
+ nsIPrincipal* aPrincipal, nsIArray* aPaymentMethods,
+ nsIPaymentDetails* aPaymentDetails,
+ nsIPaymentOptions* aPaymentOptions,
+ const nsAString& aShippingOption);
+
+ void SetIPC(PaymentRequestParent* aIPC) { mIPC = aIPC; }
+
+ PaymentRequestParent* GetIPC() const { return mIPC; }
+
+ nsresult UpdatePaymentDetails(nsIPaymentDetails* aPaymentDetails,
+ const nsAString& aShippingOption);
+
+ void SetCompleteStatus(const nsAString& aCompleteStatus);
+
+ nsresult UpdateErrors(const nsAString& aError, const nsAString& aPayerErrors,
+ const nsAString& aPaymentMethodErrors,
+ const nsAString& aShippingAddressErrors);
+
+ // The state represents the PaymentRequest's state in the spec. The state is
+ // not synchronized between content and parent processes.
+ // eCreated - the state means a PaymentRequest is created when new
+ // PaymentRequest() is called. This is the initial state.
+ // eInteractive - When PaymentRequest is requested to show to users, the state
+ // becomes eInteractive. Under eInteractive state, Payment UI
+ // pop up and gather the user's information until the user
+ // accepts or rejects the PaymentRequest.
+ // eClosed - When the user accepts or rejects the PaymentRequest, the
+ // state becomes eClosed. Under eClosed state, response from
+ // Payment UI would not be accepted by PaymentRequestService
+ // anymore, except the Complete response.
+ enum eState { eCreated, eInteractive, eClosed };
+
+ void SetState(const eState aState) { mState = aState; }
+
+ const eState& GetState() const { return mState; }
+
+ private:
+ ~PaymentRequest() = default;
+
+ uint64_t mTopOuterWindowId;
+ nsString mRequestId;
+ nsString mCompleteStatus;
+ nsCOMPtr<nsIPrincipal> mTopLevelPrincipal;
+ nsCOMPtr<nsIArray> mPaymentMethods;
+ nsCOMPtr<nsIPaymentDetails> mPaymentDetails;
+ nsCOMPtr<nsIPaymentOptions> mPaymentOptions;
+ nsString mShippingOption;
+
+ // IPC's life cycle should be controlled by IPC mechanism.
+ // PaymentRequest should not own the reference of it.
+ PaymentRequestParent* mIPC;
+ eState mState;
+};
+
+class PaymentAddress final : public nsIPaymentAddress {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPAYMENTADDRESS
+
+ PaymentAddress() = default;
+
+ private:
+ ~PaymentAddress() = default;
+
+ nsString mCountry;
+ nsCOMPtr<nsIArray> mAddressLine;
+ nsString mRegion;
+ nsString mRegionCode;
+ nsString mCity;
+ nsString mDependentLocality;
+ nsString mPostalCode;
+ nsString mSortingCode;
+ nsString mOrganization;
+ nsString mRecipient;
+ nsString mPhone;
+};
+
+} // namespace mozilla::dom::payments
+
+#endif