summaryrefslogtreecommitdiffstats
path: root/dom/payments/PaymentRequestManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/payments/PaymentRequestManager.h')
-rw-r--r--dom/payments/PaymentRequestManager.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/dom/payments/PaymentRequestManager.h b/dom/payments/PaymentRequestManager.h
new file mode 100644
index 0000000000..28ed2ac702
--- /dev/null
+++ b/dom/payments/PaymentRequestManager.h
@@ -0,0 +1,101 @@
+/* -*- 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_PaymentRequestManager_h
+#define mozilla_dom_PaymentRequestManager_h
+
+#include "nsISupports.h"
+#include "PaymentRequest.h"
+#include "mozilla/dom/PaymentRequestBinding.h"
+#include "mozilla/dom/PaymentRequestUpdateEventBinding.h"
+#include "mozilla/dom/PaymentResponseBinding.h"
+#include "nsCOMPtr.h"
+#include "nsTArray.h"
+
+namespace mozilla::dom {
+
+class PaymentRequestChild;
+class IPCMethodChangeDetails;
+class IPCPaymentAddress;
+class IPCPaymentActionResponse;
+class IPCPaymentActionRequest;
+
+/*
+ * PaymentRequestManager is a singleton used to manage the created
+ * PaymentRequests. It is also the communication agent to chrome process.
+ */
+class PaymentRequestManager final {
+ public:
+ NS_INLINE_DECL_REFCOUNTING(PaymentRequestManager)
+
+ static already_AddRefed<PaymentRequestManager> GetSingleton();
+
+ /*
+ * This method is used to create PaymentRequest object and send corresponding
+ * data to chrome process for internal payment creation, such that content
+ * process can ask specific task by sending requestId only.
+ */
+ void CreatePayment(JSContext* aCx, nsPIDOMWindowInner* aWindow,
+ nsIPrincipal* aTopLevelPrincipal,
+ const Sequence<PaymentMethodData>& aMethodData,
+ const PaymentDetailsInit& aDetails,
+ const PaymentOptions& aOptions, PaymentRequest** aRequest,
+ ErrorResult& aRv);
+
+ void CanMakePayment(PaymentRequest* aRequest, ErrorResult& aRv);
+ void ShowPayment(PaymentRequest* aRequest, ErrorResult& aRv);
+ void AbortPayment(PaymentRequest* aRequest, ErrorResult& aRv);
+ void CompletePayment(PaymentRequest* aRequest,
+ const PaymentComplete& aComplete, ErrorResult& aRv,
+ bool aTimedOut = false);
+ void UpdatePayment(JSContext* aCx, PaymentRequest* aRequest,
+ const PaymentDetailsUpdate& aDetails,
+ bool aRequestShipping, ErrorResult& aRv);
+ nsresult ClosePayment(PaymentRequest* aRequest);
+ void RetryPayment(JSContext* aCx, PaymentRequest* aRequest,
+ const PaymentValidationErrors& aErrors, ErrorResult& aRv);
+
+ nsresult RespondPayment(PaymentRequest* aRequest,
+ const IPCPaymentActionResponse& aResponse);
+ nsresult ChangeShippingAddress(PaymentRequest* aRequest,
+ const IPCPaymentAddress& aAddress);
+ nsresult ChangeShippingOption(PaymentRequest* aRequest,
+ const nsAString& aOption);
+ nsresult ChangePayerDetail(PaymentRequest* aRequest,
+ const nsAString& aPayerName,
+ const nsAString& aPayerEmail,
+ const nsAString& aPayerPhone);
+ nsresult ChangePaymentMethod(PaymentRequest* aRequest,
+ const nsAString& aMethodName,
+ const IPCMethodChangeDetails& aMethodDetails);
+
+ bool IsRegionSupported(const nsAString& region) const;
+
+ // Called to ensure that we don't "leak" aRequest if we shut down while it had
+ // an active request to the parent.
+ void RequestIPCOver(PaymentRequest* aRequest);
+
+ private:
+ PaymentRequestManager();
+ ~PaymentRequestManager();
+
+ PaymentRequestChild* GetPaymentChild(PaymentRequest* aRequest);
+
+ nsresult SendRequestPayment(PaymentRequest* aRequest,
+ const IPCPaymentActionRequest& action,
+ bool aResponseExpected = true);
+
+ void NotifyRequestDone(PaymentRequest* aRequest);
+
+ // Strong pointer to requests with ongoing IPC messages to the parent.
+ nsTHashMap<nsRefPtrHashKey<PaymentRequest>, uint32_t> mActivePayments;
+
+ nsTArray<nsString> mSupportedRegions;
+};
+
+} // namespace mozilla::dom
+
+#endif