Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
"use strict";
const { RemoteAgent: RemoteAgentModule } = ChromeUtils.importESModule(
"chrome://remote/content/components/RemoteAgent.sys.mjs"
);
const { WebDriverBiDi } = ChromeUtils.importESModule(
"chrome://remote/content/webdriver-bidi/WebDriverBiDi.sys.mjs"
);
async function runBiDiTest(test, options = {}) {
const { capabilities = {}, connection, isBidi = false } = options;
const flags = new Set();
if (isBidi) {
flags.add("bidi");
} else {
flags.add("http");
}
const wdBiDi = new WebDriverBiDi(RemoteAgentModule);
await wdBiDi.createSession(capabilities, flags, connection);
await test(wdBiDi);
wdBiDi.deleteSession();
}
add_task(async function test_createSession() {
// Missing WebDriver session flags
const bidi = new WebDriverBiDi(RemoteAgent);
await Assert.rejects(bidi.createSession({}), /TypeError/);
// Session needs to be either HTTP or BiDi
for (const flags of [[], ["bidi", "http"]]) {
await Assert.rejects(
bidi.createSession({}, new Set(flags)),
/SessionNotCreatedError:/
);
}
// Session id and path
await runBiDiTest(wdBiDi => {
is(typeof wdBiDi.session.id, "string");
is(wdBiDi.session.path, `/session/${wdBiDi.session.id}`);
});
// Sets HTTP and BiDi flags correctly.
await runBiDiTest(
wdBiDi => {
is(wdBiDi.session.bidi, false);
is(wdBiDi.session.http, true);
},
{ isBidi: false }
);
await runBiDiTest(
wdBiDi => {
is(wdBiDi.session.bidi, true);
is(wdBiDi.session.http, false);
},
{ isBidi: true }
);
// Sets capabilities based on session configuration flag.
const capabilities = {
acceptInsecureCerts: true,
unhandledPromptBehavior: "ignore",
// HTTP only
pageLoadStrategy: "eager",
strictFileInteractability: true,
timeouts: { script: 1000 },
// webSocketUrl: false,
};
// HTTP session (no webSocketUrl)
await runBiDiTest(
wdBiDi => {
is(wdBiDi.session.bidi, false);
is(wdBiDi.session.acceptInsecureCerts, true);
is(wdBiDi.session.pageLoadStrategy, "eager");
is(wdBiDi.session.strictFileInteractability, true);
is(wdBiDi.session.timeouts.script, 1000);
is(wdBiDi.session.userPromptHandler.toJSON(), "ignore");
is(wdBiDi.session.webSocketUrl, undefined);
},
{ capabilities, isBidi: false }
);
// HTTP session (with webSocketUrl)
capabilities.webSocketUrl = true;
await runBiDiTest(
wdBiDi => {
is(wdBiDi.session.bidi, true);
is(wdBiDi.session.acceptInsecureCerts, true);
is(wdBiDi.session.pageLoadStrategy, "eager");
is(wdBiDi.session.strictFileInteractability, true);
is(wdBiDi.session.timeouts.script, 1000);
is(wdBiDi.session.userPromptHandler.toJSON(), "ignore");
is(
wdBiDi.session.webSocketUrl,
);
},
{ capabilities, isBidi: false }
);
// BiDi session
await runBiDiTest(
wdBiDi => {
is(wdBiDi.session.bidi, true);
is(wdBiDi.session.acceptInsecureCerts, true);
is(wdBiDi.session.userPromptHandler.toJSON(), "ignore");
is(wdBiDi.session.pageLoadStrategy, undefined);
is(wdBiDi.session.strictFileInteractability, undefined);
is(wdBiDi.session.timeouts, undefined);
is(wdBiDi.session.webSocketUrl, undefined);
},
{ capabilities, isBidi: true }
);
});