forked from mirrors/gecko-dev
The challenges here are: * xpcshell tests still don't support the watcher actor and server side targets. So we have to ensure still using client side target fetched via Descriptor.getTarget RDP request. (We still also need that for WebExtension) * some tests weren't spawning the TargetCommand while querying TabDescriptor.getTarget. I tuned them to call TargetCommand.startListening so that we start instantiating server side targets, including the top level one retrieved via TabDescriptor.getTarget. Otherwise, thanks to this patch a few check can now be moved from `if (isLocalTab)` to `if (isTabDescriptor)`. Differential Revision: https://phabricator.services.mozilla.com/D130761
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();
|
|
});
|