274 lines
7.2 KiB
JavaScript
274 lines
7.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const PAGE_TEST =
|
|
"https://example.com/browser/remote/cdp/test/browser/target/doc_test.html";
|
|
|
|
add_task(
|
|
async function getTargetsDetails({ client }) {
|
|
const { Target, target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
const { targetInfos } = await Target.getTargets();
|
|
|
|
Assert.equal(targetInfos.length, 1, "Got expected amount of targets");
|
|
|
|
const targetInfo = targetInfos[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");
|
|
ok(targetInfo.attached, "Got expected target attached status");
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargetsCount({ client }) {
|
|
const { Target, target } = client;
|
|
const { targetInfo: newTabTargetInfo } = await openTab(Target);
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
const { targetInfos } = await Target.getTargets();
|
|
|
|
Assert.equal(targetInfos.length, 2, "Got expected amount of targets");
|
|
const targetIds = targetInfos.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 getTargetsAttached({ client }) {
|
|
const { Target } = client;
|
|
await openTab(Target);
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
const { targetInfos } = await Target.getTargets();
|
|
|
|
ok(targetInfos[0].attached, "Current target is attached");
|
|
ok(!targetInfos[1].attached, "New tab target is detached");
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterAllBlank({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Blank/all filter so all targets are returned, including main process
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{}],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
2,
|
|
"Got expected amount of targets with all (blank) filter"
|
|
);
|
|
|
|
const pageTarget = targetInfos.find(info => info.type === "page");
|
|
ok(!!pageTarget, "Found page target in targets with all (blank) filter");
|
|
|
|
const mainProcessTarget = targetInfos.find(info => info.type === "browser");
|
|
ok(
|
|
!!mainProcessTarget,
|
|
"Found main process target in targets with all (blank) filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterAllExplicit({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Blank/all filter so all targets are returned, including main process
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{ type: "browser" }, { type: "page" }],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
2,
|
|
"Got expected amount of targets with all (explicit) filter"
|
|
);
|
|
|
|
const pageTarget = targetInfos.find(info => info.type === "page");
|
|
ok(!!pageTarget, "Found page target in targets with all (explicit) filter");
|
|
|
|
const mainProcessTarget = targetInfos.find(info => info.type === "browser");
|
|
ok(
|
|
!!mainProcessTarget,
|
|
"Found main process target in targets with all (explicit) filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterPage({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Filter so only page targets are returned
|
|
// This returns same as default but pass our own custom filter to ensure
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{ type: "page" }],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
1,
|
|
"Got expected amount of targets with page filter"
|
|
);
|
|
is(
|
|
targetInfos[0].type,
|
|
"page",
|
|
"Got expected type 'page' of target from page filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterBrowser({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Filter so only main process target is returned
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{ type: "browser" }],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
1,
|
|
"Got expected amount of targets with browser filter"
|
|
);
|
|
is(
|
|
targetInfos[0].type,
|
|
"browser",
|
|
"Got expected type 'browser' of target from browser filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterExcludePage({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Filter so page targets are excluded (so only main process target is returned)
|
|
// A blank object ({}) means include everything else
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{ type: "page", exclude: true }, {}],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
1,
|
|
"Got expected amount of targets with exclude page filter"
|
|
);
|
|
is(
|
|
targetInfos[0].type,
|
|
"browser",
|
|
"Got expected type 'browser' of target from exclude page filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterExcludeBrowserIncludePage({ client }) {
|
|
const { Target } = client;
|
|
|
|
await loadURL(PAGE_TEST);
|
|
|
|
// Filter so main process is excluded and only page types are returned explicitly
|
|
const { targetInfos } = await Target.getTargets({
|
|
filter: [{ type: "browser", exclude: true }, { type: "page" }],
|
|
});
|
|
|
|
is(
|
|
targetInfos.length,
|
|
1,
|
|
"Got expected amount of targets with exclude browser include page filter"
|
|
);
|
|
is(
|
|
targetInfos[0].type,
|
|
"page",
|
|
"Got expected type 'page' of target from exclude browser include page filter"
|
|
);
|
|
},
|
|
{ createTab: false }
|
|
);
|
|
|
|
add_task(
|
|
async function getTargets_filterInvalid({ client }) {
|
|
const { Target } = client;
|
|
|
|
for (const filter of [null, true, 1, "foo", {}]) {
|
|
info(`Checking filter with invalid value: ${filter}`);
|
|
|
|
await Assert.rejects(
|
|
Target.getTargets({
|
|
filter,
|
|
}),
|
|
/filter: array value expected/,
|
|
`Filter fails for invalid type: ${filter}`
|
|
);
|
|
}
|
|
|
|
for (const filterEntry of [null, true, 1, "foo", []]) {
|
|
info(`Checking filter entry with invalid value: ${filterEntry}`);
|
|
|
|
await Assert.rejects(
|
|
Target.getTargets({
|
|
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.getTargets({
|
|
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.getTargets({
|
|
filter: [{ exclude }],
|
|
}),
|
|
/filter: exclude: boolean value expected/,
|
|
`Filter entry exclude for invalid type: ${exclude}`
|
|
);
|
|
}
|
|
},
|
|
{ createTab: false }
|
|
);
|