1
0
Fork 0
firefox/dom/ipc/tests/test_headless_content_process.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

54 lines
1.5 KiB
JavaScript

"use strict";
const TEST_REMOTE_TYPE = "test";
function allTestProcs() {
return ChromeUtils.getAllDOMProcesses().filter(
p => p.remoteType == TEST_REMOTE_TYPE
);
}
add_task(async function headlessContentProcessKeepAlive() {
let testProcesses = allTestProcs();
equal(testProcesses.length, 0);
// Start the process, it should appear in the list.
let keepAlive =
await ChromeUtils.ensureHeadlessContentProcess(TEST_REMOTE_TYPE);
let domProcess = keepAlive.domProcess;
testProcesses = allTestProcs();
equal(testProcesses.length, 1);
equal(testProcesses[0], domProcess);
ok(domProcess.canSend);
// The process should be properly kept alive, so `releaseCachedProcesses()`
// should not shut it down.
Services.ppmm.releaseCachedProcesses();
testProcesses = allTestProcs();
equal(testProcesses.length, 1);
equal(testProcesses[0], domProcess);
ok(domProcess.canSend);
// Invalidating the keep alive should lead to the process being shut down.
keepAlive.invalidateKeepAlive();
// Wait for the process to be shut down.
await new Promise(resolve => {
Services.obs.addObserver(function obs(subject, topic) {
equal(topic, "ipc:content-shutdown");
if (
subject.QueryInterface(Ci.nsIPropertyBag2).getProperty("childID") ==
domProcess.childID
) {
Services.obs.removeObserver(obs, "ipc:content-shutdown");
resolve();
}
}, "ipc:content-shutdown");
});
testProcesses = allTestProcs();
equal(testProcesses.length, 0);
ok(!domProcess.canSend);
});