Files
tubestation/dom/ipc/nsIDOMProcessParent.idl
Nika Layzell d749c1f081 Bug 1942128 - Part 1: Add a mechanism to allow Chrome JS to manage headless content processes, r=smaug
This adds a new XPCOM type which will hold the
`UniqueContentParentKeepAlive` internally, and can be returned into
Chrome JS using a new method on ChromeUtils.sys.mjs.

The KeepAlive will be cleaned up when the cycle-collected JS object is
destroyed, or when the `invalidateKeepAlive()` method is called on the
object (for times when JS wants to take more direct control over the
lifecycle of the KeepAlive).

In the future it would be possible to add methods to e.g. get a
KeepAlive for a specific existing process, or clone a KeepAlive object,
however that is not required for the initial use-case.

This will be used in part 2 to replace the use of hidden iframes with
dummy pages to create the "inference" content process.

Differential Revision: https://phabricator.services.mozilla.com/D234906
2025-02-07 20:32:03 +00:00

77 lines
2.3 KiB
Plaintext

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et cindent: */
/* 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/. */
#include "nsISupports.idl"
%{C++
namespace mozilla {
namespace dom {
class ContentParent;
class JSActorManager;
} // namespace dom
} // namespace mozilla
%}
[ptr] native ContentParentPtr(mozilla::dom::ContentParent);
[ptr] native JSActorManagerPtr(mozilla::dom::JSActorManager);
webidl JSProcessActorParent;
/**
* Parent actor interface for a process which can host DOM content.
*
* Implemented by either `InProcessParent` for the parent process, or
* `ContentParent` for a content process.
*/
[scriptable, builtinclass, uuid(81fc08b9-c901-471f-ab0d-876362eba770)]
interface nsIDOMProcessParent: nsISupports {
/**
* Internal child process ID. `0` is reserved for the parent process.
*/
[infallible] readonly attribute unsigned long long childID;
/**
* OS ID of the process.
*/
[infallible] readonly attribute long osPid;
/**
* Lookup a JSProcessActorParent managed by this interface by name.
*/
[implicit_jscontext] JSProcessActorParent getActor(in ACString name);
JSProcessActorParent getExistingActor(in ACString name);
/** Can the actor still send messages? */
[infallible] readonly attribute boolean canSend;
[notxpcom, nostdcall] ContentParentPtr AsContentParent();
/** Cast this nsIDOMProcessParent to a JSActorManager */
[notxpcom, nostdcall] JSActorManagerPtr AsJSActorManager();
/**
* Remote type of the process.
*/
readonly attribute ACString remoteType;
};
/**
* Reference counted and cycle collected interface to expose a
* UniqueContentParentKeepAlive to chrome JS.
*/
[scriptable, builtinclass, uuid(b43907bd-e40d-4bf5-a85e-866998beb7a9)]
interface nsIContentParentKeepAlive: nsISupports {
/**
* Underlying nsIDOMProcessParent which is being kept alive.
*/
readonly attribute nsIDOMProcessParent domProcess;
/**
* Invalidate this nsIContentParentKeepAlive, dropping the keep alive
* and ContentParent reference without waiting for the object to be gc/cc-ed.
*/
void invalidateKeepAlive();
};