Source code
Revision control
Copy as Markdown
Other Tools
/* Any copyright is dedicated to the Public Domain.
/**
* Check extension-added global actor API.
*/
"use strict";
var {
DevToolsServer,
} = require("resource://devtools/server/devtools-server.js");
var {
ActorRegistry,
} = require("resource://devtools/server/actors/utils/actor-registry.js");
var {
DevToolsClient,
} = require("resource://devtools/client/devtools-client.js");
const ACTORS_URL = EXAMPLE_URL + "testactors.js";
add_task(async function () {
DevToolsServer.init();
DevToolsServer.registerAllActors();
ActorRegistry.registerModule(ACTORS_URL, {
prefix: "testOne",
constructor: "TestActor1",
type: { global: true },
});
const transport = DevToolsServer.connectPipe();
const client = new DevToolsClient(transport);
const [type] = await client.connect();
is(type, "browser", "Root actor should identify itself as a browser.");
let response = await client.mainRoot.rootForm;
const globalActor = response.testOneActor;
ok(globalActor, "Found the test global actor.");
ok(
globalActor.includes("testOne"),
"testGlobalActor1's typeName should be used."
);
response = await client.request({ to: globalActor, type: "ping" });
is(response.pong, "pong", "Actor should respond to requests.");
// Send another ping to see if the same actor is used.
response = await client.request({ to: globalActor, type: "ping" });
is(response.pong, "pong", "Actor should respond to requests.");
// Make sure that lazily-created actors are created only once.
let count = 0;
for (const connID of Object.getOwnPropertyNames(
DevToolsServer._connections
)) {
const conn = DevToolsServer._connections[connID];
const computedPrefix = conn._prefix + "testOne";
for (const pool of conn._extraPools) {
for (const actor of pool.poolChildren()) {
if (actor.actorID.startsWith(computedPrefix)) {
count++;
}
}
}
}
is(count, 1, "Only one actor exists in all pools. One global actor.");
await client.close();
});