71 lines
2 KiB
JavaScript
71 lines
2 KiB
JavaScript
/* 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();
|
|
});
|