Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Errors
- This test failed 1 times in the preceding 30 days. quicksearch this test
- Manifest: dom/ipc/tests/xpcshell.toml
"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);
});