Files
tubestation/dom/clients/manager/ClientState.h
Andrew Sutherland 5fa466d4ef Bug 1113522 - Expose ServiceWorker in Workers. r=dom-worker-reviewers,webidl,edenchuang,emilio
We are able to remove ServiceWorkerVisible and instead use
ServiceWorkersEnabled in its place since we are no longer limiting
where ServiceWorker instances are exposed.

The correctness of ExtendableMessageEvent.source is addressed later in
the stack.

Although we enable skip-waiting-installed.https.html here, we also have
to make it expected it will sometimes fail due to an inherent IPC race;
bug 1926641 describes the situation.

Differential Revision: https://phabricator.services.mozilla.com/D180914
2024-10-24 03:02:37 +00:00

137 lines
4.1 KiB
C++

/* -*- 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/Maybe.h"
#include "mozilla/TimeStamp.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/Variant.h"
#include "nsContentUtils.h"
namespace mozilla {
// We forward-declare this because including StorageAccess.h causes cbindgen to
// have problems due to StorageAccess.h's include of BrowsingContext.h which
// includes SyncedContext.h.
enum class StorageAccess;
} // namespace mozilla
namespace mozilla::dom {
// We forward-declare this because otherwise we get an include cycle through
// DocumentBinding.h including ShadowRoot.h including DOMEventTargetHelper.h
// including GlobalTeardownObserver.h including nsIGlobalObject.h which needs
// to include this file.
enum class VisibilityState : uint8_t;
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