tor-browser

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

browser_dbg_globalactor.js (2090B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 /**
      5 * Check extension-added global actor API.
      6 */
      7 
      8 "use strict";
      9 
     10 var {
     11  DevToolsServer,
     12 } = require("resource://devtools/server/devtools-server.js");
     13 var {
     14  ActorRegistry,
     15 } = require("resource://devtools/server/actors/utils/actor-registry.js");
     16 var {
     17  DevToolsClient,
     18 } = require("resource://devtools/client/devtools-client.js");
     19 
     20 const ACTORS_URL = EXAMPLE_URL + "testactors.js";
     21 
     22 add_task(async function () {
     23  DevToolsServer.init();
     24  DevToolsServer.registerAllActors();
     25 
     26  ActorRegistry.registerModule(ACTORS_URL, {
     27    prefix: "testOne",
     28    constructor: "TestActor1",
     29    type: { global: true },
     30  });
     31 
     32  const transport = DevToolsServer.connectPipe();
     33  const client = new DevToolsClient(transport);
     34  const [type] = await client.connect();
     35  is(type, "browser", "Root actor should identify itself as a browser.");
     36 
     37  let response = await client.mainRoot.rootForm;
     38  const globalActor = response.testOneActor;
     39  ok(globalActor, "Found the test global actor.");
     40  ok(
     41    globalActor.includes("testOne"),
     42    "testGlobalActor1's typeName should be used."
     43  );
     44 
     45  response = await client.request({ to: globalActor, type: "ping" });
     46  is(response.pong, "pong", "Actor should respond to requests.");
     47 
     48  // Send another ping to see if the same actor is used.
     49  response = await client.request({ to: globalActor, type: "ping" });
     50  is(response.pong, "pong", "Actor should respond to requests.");
     51 
     52  // Make sure that lazily-created actors are created only once.
     53  let count = 0;
     54  for (const connID of Object.getOwnPropertyNames(
     55    DevToolsServer._connections
     56  )) {
     57    const conn = DevToolsServer._connections[connID];
     58    const computedPrefix = conn._prefix + "testOne";
     59    for (const pool of conn._extraPools) {
     60      for (const actor of pool.poolChildren()) {
     61        if (actor.actorID.startsWith(computedPrefix)) {
     62          count++;
     63        }
     64      }
     65    }
     66  }
     67 
     68  is(count, 1, "Only one actor exists in all pools. One global actor.");
     69 
     70  await client.close();
     71 });