/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* 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();
});