tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_headless_content_process.js (1560B)


      1 "use strict";
      2 
      3 const TEST_REMOTE_TYPE = "test";
      4 
      5 function allTestProcs() {
      6  return ChromeUtils.getAllDOMProcesses().filter(
      7    p => p.remoteType == TEST_REMOTE_TYPE
      8  );
      9 }
     10 
     11 add_task(async function headlessContentProcessKeepAlive() {
     12  let testProcesses = allTestProcs();
     13  equal(testProcesses.length, 0);
     14 
     15  // Start the process, it should appear in the list.
     16  let keepAlive =
     17    await ChromeUtils.ensureHeadlessContentProcess(TEST_REMOTE_TYPE);
     18  let domProcess = keepAlive.domProcess;
     19 
     20  testProcesses = allTestProcs();
     21  equal(testProcesses.length, 1);
     22  equal(testProcesses[0], domProcess);
     23  ok(domProcess.canSend);
     24 
     25  // The process should be properly kept alive, so `releaseCachedProcesses()`
     26  // should not shut it down.
     27  Services.ppmm.releaseCachedProcesses();
     28 
     29  testProcesses = allTestProcs();
     30  equal(testProcesses.length, 1);
     31  equal(testProcesses[0], domProcess);
     32  ok(domProcess.canSend);
     33 
     34  // Invalidating the keep alive should lead to the process being shut down.
     35  keepAlive.invalidateKeepAlive();
     36 
     37  // Wait for the process to be shut down.
     38  await new Promise(resolve => {
     39    Services.obs.addObserver(function obs(subject, topic) {
     40      equal(topic, "ipc:content-shutdown");
     41      if (
     42        subject.QueryInterface(Ci.nsIPropertyBag2).getProperty("childID") ==
     43        domProcess.childID
     44      ) {
     45        Services.obs.removeObserver(obs, "ipc:content-shutdown");
     46        resolve();
     47      }
     48    }, "ipc:content-shutdown");
     49  });
     50 
     51  testProcesses = allTestProcs();
     52  equal(testProcesses.length, 0);
     53  ok(!domProcess.canSend);
     54 });