tor-browser

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

test_debugger_client.js (1731B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // DevToolsClient tests
      7 
      8 const {
      9  DevToolsServer,
     10 } = require("resource://devtools/server/devtools-server.js");
     11 const {
     12  DevToolsClient,
     13 } = require("resource://devtools/client/devtools-client.js");
     14 
     15 add_task(async function () {
     16  await testCloseLoops();
     17  await fakeTransportShutdown();
     18 });
     19 
     20 function createClient() {
     21  DevToolsServer.init();
     22  DevToolsServer.registerAllActors();
     23  const client = new DevToolsClient(DevToolsServer.connectPipe());
     24  return client;
     25 }
     26 
     27 // Ensure that closing the client while it is closing doesn't loop
     28 async function testCloseLoops() {
     29  const client = createClient();
     30  await client.connect();
     31 
     32  await new Promise(resolve => {
     33    let called = false;
     34    client.on("closed", async () => {
     35      dump(">> CLOSED\n");
     36      if (called) {
     37        ok(
     38          false,
     39          "Calling client.close from closed event listener introduce loops"
     40        );
     41        return;
     42      }
     43      called = true;
     44      await client.close();
     45      resolve();
     46    });
     47    client.close();
     48  });
     49 }
     50 
     51 // Check that, if we fake a transport shutdown (like if a device is unplugged)
     52 // the client is automatically closed, and we can still call client.close.
     53 async function fakeTransportShutdown() {
     54  const client = createClient();
     55  await client.connect();
     56 
     57  await new Promise(resolve => {
     58    const onClosed = async function () {
     59      client.off("closed", onClosed);
     60      ok(true, "Client emitted 'closed' event");
     61      resolve();
     62    };
     63    client.on("closed", onClosed);
     64    client.transport.close();
     65  });
     66 
     67  await client.close();
     68  ok(true, "client.close() successfully resolves");
     69 }