107 lines
3.1 KiB
JavaScript
107 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Get the object, from the server side, for a given actor ID
|
|
function getActorInstance(connID, actorID) {
|
|
return DevToolsServer._connections[connID].getActor(actorID);
|
|
}
|
|
|
|
/**
|
|
* The purpose of these tests is to verify that it's possible to add actors
|
|
* both before and after the DevToolsServer has been initialized, so addons
|
|
* that add actors don't have to poll the object for its initialization state
|
|
* in order to add actors after initialization but rather can add actors anytime
|
|
* regardless of the object's state.
|
|
*/
|
|
add_task(async function () {
|
|
ActorRegistry.registerModule("resource://test/pre_init_global_actors.js", {
|
|
prefix: "preInitGlobal",
|
|
constructor: "PreInitGlobalActor",
|
|
type: { global: true },
|
|
});
|
|
ActorRegistry.registerModule(
|
|
"resource://test/pre_init_target_scoped_actors.js",
|
|
{
|
|
prefix: "preInitTargetScoped",
|
|
constructor: "PreInitTargetScopedActor",
|
|
type: { target: true },
|
|
}
|
|
);
|
|
|
|
const client = await startTestDevToolsServer("example tab");
|
|
|
|
ActorRegistry.registerModule("resource://test/post_init_global_actors.js", {
|
|
prefix: "postInitGlobal",
|
|
constructor: "PostInitGlobalActor",
|
|
type: { global: true },
|
|
});
|
|
ActorRegistry.registerModule(
|
|
"resource://test/post_init_target_scoped_actors.js",
|
|
{
|
|
prefix: "postInitTargetScoped",
|
|
constructor: "PostInitTargetScopedActor",
|
|
type: { target: true },
|
|
}
|
|
);
|
|
|
|
let actors = await client.mainRoot.rootForm;
|
|
const tabs = await client.mainRoot.listTabs();
|
|
const tabDescriptor = tabs[0];
|
|
|
|
// These xpcshell tests use mocked actors (xpcshell-test/testactors)
|
|
// which still don't support watcher actor.
|
|
// Because of that we still can't enable server side targets and target swiching.
|
|
tabDescriptor.disableTargetSwitching();
|
|
|
|
const tabTarget = await tabDescriptor.getTarget();
|
|
|
|
Assert.equal(tabs.length, 1);
|
|
|
|
let reply = await client.request({
|
|
to: actors.preInitGlobalActor,
|
|
type: "ping",
|
|
});
|
|
Assert.equal(reply.message, "pong");
|
|
|
|
reply = await client.request({
|
|
to: tabTarget.targetForm.preInitTargetScopedActor,
|
|
type: "ping",
|
|
});
|
|
Assert.equal(reply.message, "pong");
|
|
|
|
reply = await client.request({
|
|
to: actors.postInitGlobalActor,
|
|
type: "ping",
|
|
});
|
|
Assert.equal(reply.message, "pong");
|
|
|
|
reply = await client.request({
|
|
to: tabTarget.targetForm.postInitTargetScopedActor,
|
|
type: "ping",
|
|
});
|
|
Assert.equal(reply.message, "pong");
|
|
|
|
// Consider that there is only one connection, and the first one is ours
|
|
const connID = Object.keys(DevToolsServer._connections)[0];
|
|
const postInitGlobalActor = getActorInstance(
|
|
connID,
|
|
actors.postInitGlobalActor
|
|
);
|
|
const preInitGlobalActor = getActorInstance(
|
|
connID,
|
|
actors.preInitGlobalActor
|
|
);
|
|
actors = await client.mainRoot.getRoot();
|
|
Assert.equal(
|
|
postInitGlobalActor,
|
|
getActorInstance(connID, actors.postInitGlobalActor)
|
|
);
|
|
Assert.equal(
|
|
preInitGlobalActor,
|
|
getActorInstance(connID, actors.preInitGlobalActor)
|
|
);
|
|
|
|
await client.close();
|
|
});
|