Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: display == 'wayland'
- Manifest: remote/cdp/test/browser/target/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
// These tests are a near copy of the tests for Target.getTargets, but using
// the `setDiscoverTargets` method and `targetCreated` events instead.
// Calling `setDiscoverTargets` with `discover: true` will dispatch a
// `targetCreated` event for all already opened tabs and NOT the browser target
// with the default filter.
const PAGE_TEST =
add_task(
async function discoverInvalidTypes({ client }) {
const { Target } = client;
for (const discover of [null, undefined, 1, "foo", [], {}]) {
info(`Checking discover with invalid value: ${discover}`);
await Assert.rejects(
Target.setDiscoverTargets({ discover }),
/discover: boolean value expected/,
`Discover fails for invalid type: ${discover}`
);
}
},
{ createTab: false }
);
add_task(
async function filterInvalid({ client }) {
const { Target } = client;
for (const filter of [null, true, 1, "foo", {}]) {
info(`Checking filter with invalid value: ${filter}`);
await Assert.rejects(
Target.setDiscoverTargets({ discover: true, filter }),
/filter: array value expected/,
`Filter fails for invalid type: ${filter}`
);
}
for (const filterEntry of [null, undefined, true, 1, "foo", []]) {
info(`Checking filter entry with invalid value: ${filterEntry}`);
await Assert.rejects(
Target.setDiscoverTargets({
discover: true,
filter: [filterEntry],
}),
/filter: object values expected in array/,
`Filter entry fails for invalid type: ${filterEntry}`
);
}
for (const type of [null, true, 1, [], {}]) {
info(`Checking filter entry with type as invalid value: ${type}`);
await Assert.rejects(
Target.setDiscoverTargets({
discover: true,
filter: [{ type }],
}),
/filter: type: string value expected/,
`Filter entry type fails for invalid type: ${type}`
);
}
for (const exclude of [null, 1, "foo", [], {}]) {
info(`Checking filter entry with exclude as invalid value: ${exclude}`);
await Assert.rejects(
Target.setDiscoverTargets({
discover: true,
filter: [{ exclude }],
}),
/filter: exclude: boolean value expected/,
`Filter entry exclude for invalid type: ${exclude}`
);
}
},
{ createTab: false }
);
add_task(
async function noFilterWithDiscoverFalse({ client }) {
const { Target } = client;
// Check filter cannot be given with discover: false
await Assert.rejects(
Target.setDiscoverTargets({
discover: false,
filter: [{}],
}),
/filter: should not be present when discover is false/,
`Error throw when given filter with discover false`
);
},
{ createTab: false }
);
add_task(
async function noTargetsWithDiscoverFalse({ client }) {
const { Target } = client;
await loadURL(PAGE_TEST);
const targets = await getDiscoveredTargets(Target, { discover: false });
is(targets.length, 0, "Got 0 targets with discover false");
},
{ createTab: false }
);
add_task(
async function noEventsWithDiscoverFalse({ client }) {
const { Target } = client;
await loadURL(PAGE_TEST);
const targets = [];
const unsubscribe = Target.targetCreated(target => {
targets.push(target.targetInfo);
});
await Target.setDiscoverTargets({
discover: false,
});
// Cannot use openTab() helper as it relies on the event
await BrowserTestUtils.openNewForegroundTab(gBrowser);
// Wait 1s for the event to possibly dispatch
await timeoutPromise(1000);
unsubscribe();
is(targets.length, 0, "Got 0 target created events with discover false");
},
{ createTab: false }
);
add_task(
async function targetInfoValues({ client }) {
const { Target, target } = client;
await loadURL(PAGE_TEST);
const targets = await getDiscoveredTargets(Target);
Assert.equal(targets.length, 1, "Got expected amount of targets");
const targetInfo = targets[0];
is(targetInfo.id, target.id, "Got expected target id");
is(targetInfo.type, "page", "Got expected target type");
is(targetInfo.title, "Test Page", "Got expected target title");
is(targetInfo.url, PAGE_TEST, "Got expected target URL");
},
{ createTab: false }
);
add_task(
async function discoverEnabledAndMultipleTabs({ client }) {
const { Target, target } = client;
const { targetInfo: newTabTargetInfo } = await openTab(Target);
await loadURL(PAGE_TEST);
const targets = await getDiscoveredTargets(Target);
Assert.equal(targets.length, 2, "Got expected amount of targets");
const targetIds = targets.map(info => info.id);
ok(targetIds.includes(target.id), "Got expected original target id");
ok(targetIds.includes(newTabTargetInfo.id), "Got expected new target id");
},
{ createTab: false }
);
add_task(
async function allFilters({ client }) {
const { Target } = client;
await loadURL(PAGE_TEST);
for (const filter of [[{}], [{ type: "browser" }, { type: "page" }]]) {
// Blank/all filter so all targets are returned, including main process
const targets = await getDiscoveredTargets(Target, { filter });
is(targets.length, 2, "Got expected amount of targets with all filter");
const pageTarget = targets.find(info => info.type === "page");
ok(!!pageTarget, "Found page target in targets with all filter");
const mainProcessTarget = targets.find(info => info.type === "browser");
ok(
!!mainProcessTarget,
"Found main process target in targets with all filter"
);
}
},
{ createTab: false }
);
add_task(
async function pageOnlyFilters({ client }) {
const { Target } = client;
await loadURL(PAGE_TEST);
for (const filter of [
[{ type: "page" }],
[{ type: "browser", exclude: true }, { type: "page" }],
]) {
// Filter so only page targets are returned
// This returns same as default but pass our own custom filter to ensure
// these filters still return what they should
const targets = await getDiscoveredTargets(Target, { filter });
is(targets.length, 1, "Got expected amount of targets with page filter");
is(
targets[0].type,
"page",
"Got expected type 'page' of target from page filter"
);
}
},
{ createTab: false }
);
add_task(
async function browserOnlyFilters({ client }) {
const { Target } = client;
await loadURL(PAGE_TEST);
for (const filter of [
[{ type: "browser" }],
[{ type: "page", exclude: true }, {}],
]) {
// Filter so only main process target is returned
const targets = await getDiscoveredTargets(Target, { filter });
is(
targets.length,
1,
"Got expected amount of targets with browser only filter"
);
is(
targets[0].type,
"browser",
"Got expected type 'browser' of target from browser only filter"
);
}
},
{ createTab: false }
);