Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
const { setEnterpriseGuards } = ChromeUtils.importESModule(
"resource://gre/modules/ExtensionPermissions.sys.mjs"
);
const server = createHttpServer({
hosts: ["guard.example.com", "other.example.com"],
});
server.registerPathHandler("/ok", (req, res) => {
res.setStatusLine(req.httpVersion, 200, "OK");
res.write("ok");
});
// Verify that a content process spawned after setEnterpriseGuards picks up the
// guards on initialization, and that a live update propagates to an existing
// content process.
add_task(async function test_content_script_propagation() {
setEnterpriseGuards({
"*": {
runtime_blocked_hosts: ["http://guard.example.com/*"],
runtime_allowed_hosts: [],
},
});
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: { gecko: { id: "cs-guard@test" } },
content_scripts: [
{
js: ["cs.js"],
},
],
host_permissions: [
],
},
files: {
"cs.js"() {
browser.test.onMessage.addListener(async (msg, url) => {
if (msg === "fetch-blocked") {
await browser.test.assertRejects(
fetch(url),
/NetworkError/,
`${url} blocked in content process`
);
browser.test.sendMessage("done");
} else if (msg === "fetch-allowed") {
let r = await fetch(url);
browser.test.assertTrue(r.ok, `${url} allowed in content process`);
browser.test.sendMessage("done");
}
});
browser.test.sendMessage("content-script-ready");
},
},
});
await extension.startup();
// Verifies that a newly-spawned content process picks up pre-set guards.
let page = await ExtensionTestUtils.loadContentPage(
);
await extension.awaitMessage("content-script-ready");
extension.sendMessage("fetch-blocked", "http://guard.example.com/ok");
await extension.awaitMessage("done");
// Verifies that an existing content process receives updated guards.
setEnterpriseGuards({
"*": {
runtime_blocked_hosts: ["http://other.example.com/*"],
runtime_allowed_hosts: [],
},
});
extension.sendMessage("fetch-allowed", "http://guard.example.com/ok");
await extension.awaitMessage("done");
await page.close();
await extension.unload();
setEnterpriseGuards({});
});