summaryrefslogtreecommitdiffstats
path: root/dom/clients/manager/ClientManagerService.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/clients/manager/ClientManagerService.h')
-rw-r--r--dom/clients/manager/ClientManagerService.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/dom/clients/manager/ClientManagerService.h b/dom/clients/manager/ClientManagerService.h
new file mode 100644
index 0000000000..695f926aae
--- /dev/null
+++ b/dom/clients/manager/ClientManagerService.h
@@ -0,0 +1,104 @@
+/* -*- 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_ClientManagerService_h
+#define _mozilla_dom_ClientManagerService_h
+
+#include "mozilla/dom/ClientIPCTypes.h"
+#include "mozilla/dom/ipc/IdType.h"
+#include "ClientOpPromise.h"
+#include "mozilla/AlreadyAddRefed.h"
+#include "mozilla/Assertions.h"
+#include "mozilla/Maybe.h"
+#include "mozilla/RefPtr.h"
+#include "mozilla/dom/ClientIPCTypes.h"
+#include "mozilla/dom/ipc/IdType.h"
+#include "nsDataHashtable.h"
+#include "nsHashKeys.h"
+#include "nsISupports.h"
+#include "nsTArray.h"
+
+struct nsID;
+
+namespace mozilla {
+
+namespace ipc {
+
+class PrincipalInfo;
+
+} // namespace ipc
+
+namespace dom {
+
+class ClientManagerParent;
+class ClientSourceParent;
+class ClientHandleParent;
+
+// Define a singleton service to manage client activity throughout the
+// browser. This service runs on the PBackground thread. To interact
+// it with it please use the ClientManager and ClientHandle classes.
+class ClientManagerService final {
+ // Store the ClientSourceParent objects in a hash table. We want to
+ // optimize for insertion, removal, and lookup by UUID.
+ nsDataHashtable<nsIDHashKey, ClientSourceParent*> mSourceTable;
+
+ // The set of handles waiting for their corresponding ClientSourceParent
+ // to be created.
+ nsDataHashtable<nsIDHashKey, nsTArray<ClientHandleParent*>> mPendingHandles;
+
+ nsTArray<ClientManagerParent*> mManagerList;
+
+ bool mShutdown;
+
+ ClientManagerService();
+ ~ClientManagerService();
+
+ void Shutdown();
+
+ public:
+ static already_AddRefed<ClientManagerService> GetOrCreateInstance();
+
+ // Returns nullptr if the service is not already created.
+ static already_AddRefed<ClientManagerService> GetInstance();
+
+ bool AddSource(ClientSourceParent* aSource);
+
+ bool RemoveSource(ClientSourceParent* aSource);
+
+ ClientSourceParent* FindSource(
+ const nsID& aID, const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
+
+ // Called when a ClientHandle is created before the corresponding
+ // ClientSource. Will call FoundSource on the ClientHandleParent when it
+ // becomes available.
+ void WaitForSource(ClientHandleParent* aHandle, const nsID& aID);
+ void StopWaitingForSource(ClientHandleParent* aHandle, const nsID& aID);
+
+ void AddManager(ClientManagerParent* aManager);
+
+ void RemoveManager(ClientManagerParent* aManager);
+
+ RefPtr<ClientOpPromise> Navigate(const ClientNavigateArgs& aArgs);
+
+ RefPtr<ClientOpPromise> MatchAll(const ClientMatchAllArgs& aArgs);
+
+ RefPtr<ClientOpPromise> Claim(const ClientClaimArgs& aArgs);
+
+ RefPtr<ClientOpPromise> GetInfoAndState(
+ const ClientGetInfoAndStateArgs& aArgs);
+
+ RefPtr<ClientOpPromise> OpenWindow(const ClientOpenWindowArgs& aArgs);
+
+ bool HasWindow(const Maybe<ContentParentId>& aContentParentId,
+ const mozilla::ipc::PrincipalInfo& aPrincipalInfo,
+ const nsID& aClientId);
+
+ NS_INLINE_DECL_REFCOUNTING(mozilla::dom::ClientManagerService)
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // _mozilla_dom_ClientManagerService_h