diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/clients/manager/ClientState.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/clients/manager/ClientState.h')
-rw-r--r-- | dom/clients/manager/ClientState.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/dom/clients/manager/ClientState.h b/dom/clients/manager/ClientState.h new file mode 100644 index 0000000000..2cd5a601ad --- /dev/null +++ b/dom/clients/manager/ClientState.h @@ -0,0 +1,125 @@ +/* -*- 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_ClientState_h +#define _mozilla_dom_ClientState_h + +#include "mozilla/dom/DocumentBinding.h" +#include "mozilla/Maybe.h" +#include "mozilla/StorageAccess.h" +#include "mozilla/TimeStamp.h" +#include "mozilla/UniquePtr.h" +#include "mozilla/Variant.h" +#include "nsContentUtils.h" + +namespace mozilla::dom { + +class IPCClientState; +class IPCClientWindowState; +class IPCClientWorkerState; + +// This class defines the mutable nsGlobalWindow state we support querying +// through the ClientManagerService. It is a snapshot of the state and +// is not live updated. +class ClientWindowState final { + UniquePtr<IPCClientWindowState> mData; + + public: + ClientWindowState(mozilla::dom::VisibilityState aVisibilityState, + const TimeStamp& aLastFocusTime, + StorageAccess aStorageAccess, bool aFocused); + + explicit ClientWindowState(const IPCClientWindowState& aData); + + ClientWindowState(const ClientWindowState& aRight); + ClientWindowState(ClientWindowState&& aRight); + + ClientWindowState& operator=(const ClientWindowState& aRight); + + ClientWindowState& operator=(ClientWindowState&& aRight); + + ~ClientWindowState(); + + mozilla::dom::VisibilityState VisibilityState() const; + + const TimeStamp& LastFocusTime() const; + + bool Focused() const; + + StorageAccess GetStorageAccess() const; + + const IPCClientWindowState& ToIPC() const; +}; + +// This class defines the mutable worker state we support querying +// through the ClientManagerService. It is a snapshot of the state and +// is not live updated. Right now, we don't actually providate any +// worker specific state values, but we may in the future. This +// class also services as a placeholder that the state is referring +// to a worker in ClientState. +class ClientWorkerState final { + UniquePtr<IPCClientWorkerState> mData; + + public: + explicit ClientWorkerState(StorageAccess aStorageAccess); + + explicit ClientWorkerState(const IPCClientWorkerState& aData); + + ClientWorkerState(const ClientWorkerState& aRight); + ClientWorkerState(ClientWorkerState&& aRight); + + ClientWorkerState& operator=(const ClientWorkerState& aRight); + + ClientWorkerState& operator=(ClientWorkerState&& aRight); + + ~ClientWorkerState(); + + StorageAccess GetStorageAccess() const; + + const IPCClientWorkerState& ToIPC() const; +}; + +// This is a union of the various types of mutable state we support +// querying in ClientManagerService. Right now it can contain either +// window or worker states. +class ClientState final { + Maybe<Variant<ClientWindowState, ClientWorkerState>> mData; + + public: + ClientState(); + + explicit ClientState(const ClientWindowState& aWindowState); + explicit ClientState(const ClientWorkerState& aWorkerState); + explicit ClientState(const IPCClientWindowState& aData); + explicit ClientState(const IPCClientWorkerState& aData); + + ClientState(const ClientState& aRight) = default; + ClientState(ClientState&& aRight); + + ClientState& operator=(const ClientState& aRight) = default; + + ClientState& operator=(ClientState&& aRight); + + ~ClientState(); + + static ClientState FromIPC(const IPCClientState& aData); + + bool IsWindowState() const; + + const ClientWindowState& AsWindowState() const; + + bool IsWorkerState() const; + + const ClientWorkerState& AsWorkerState() const; + + StorageAccess GetStorageAccess() const; + + const IPCClientState ToIPC() const; +}; + +} // namespace mozilla::dom + +#endif // _mozilla_dom_ClientState_h |