Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test that watcher front/actor APIs do not lead to create duplicate actors.
const TEST_URL = "data:text/html;charset=utf-8,Actor caching test";
add_task(async function () {
info("Setup the test page with workers of all types");
const tab = await addTab(TEST_URL);
info("Create a target list for a tab target");
const commands = await CommandsFactory.forTab(tab);
const targetCommand = commands.targetCommand;
await targetCommand.startListening();
const { watcherFront } = targetCommand;
ok(watcherFront, "A watcherFront is available on targetCommand");
info("Check that getNetworkParentActor does not create duplicate actors");
testActorGetter(
watcherFront,
() => watcherFront.getNetworkParentActor(),
"networkParent"
);
info("Check that getBreakpointListActor does not create duplicate actors");
testActorGetter(
watcherFront,
() => watcherFront.getBreakpointListActor(),
"breakpoint-list"
);
info(
"Check that getTargetConfigurationActor does not create duplicate actors"
);
testActorGetter(
watcherFront,
() => watcherFront.getTargetConfigurationActor(),
"target-configuration"
);
info(
"Check that getThreadConfigurationActor does not create duplicate actors"
);
testActorGetter(
watcherFront,
() => watcherFront.getThreadConfigurationActor(),
"thread-configuration"
);
targetCommand.destroy();
await commands.waitForRequestsToSettle();
await commands.destroy();
});
/**
* Check that calling an actor getter method on the watcher front leads to the
* creation of at most 1 actor.
*/
async function testActorGetter(watcherFront, actorGetterFn, typeName) {
checkPoolChildrenSize(watcherFront, typeName, 0);
const actor = await actorGetterFn();
checkPoolChildrenSize(watcherFront, typeName, 1);
const otherActor = await actorGetterFn();
is(actor, otherActor, "Returned the same actor for " + typeName);
checkPoolChildrenSize(watcherFront, typeName, 1);
}
/**
* Assert that a given parent pool has the expected number of children for
* a given typeName.
*/
function checkPoolChildrenSize(parentPool, typeName, expected) {
const children = [...parentPool.poolChildren()];
const childrenByType = children.filter(pool => pool.typeName === typeName);
is(
childrenByType.length,
expected,
`${parentPool.actorID} should have ${expected} children of type ${typeName}`
);
}