Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
const { AddonTestUtils } = ChromeUtils.importESModule(
);
AddonTestUtils.initMochitest(this);
const server = AddonTestUtils.createHttpServer({
hosts: ["expected.example.org", "extra.example.org"],
});
server.registerPathHandler("/", (req, res) => {
info(`Test HTTP server for domain "${req.host}" got ${req.method} request\n`);
res.setStatusLine(req.httpVersion, 200, "OK");
res.write("OK");
});
add_task(async function test_extension_tab_create() {
Services.fog.testResetFOG();
await SpecialPowers.pushPrefEnv({
set: [
[
"urlclassifier.features.harmfuladdon.blocklistHosts",
"expected.example.org",
],
],
});
const id = "ext-create-tab@mochitest";
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: {
gecko: { id },
},
host_permissions: [
"*://expected.example.org/*",
"*://extra.example.org/*",
],
},
background() {
const { browser } = this;
let tab;
browser.test.onMessage.addListener(async (msg, ...args) => {
if (msg === "create-tab") {
tab = await browser.tabs.create({
url: "about:blank",
active: true,
});
} else if (msg === "load-tab") {
await browser.tabs.update(tab.id, { url: args[0] });
} else {
browser.test.fail(`Got unexpected test message ${msg}`);
}
browser.test.sendMessage(`${msg}:done`);
});
},
});
await extension.startup();
extension.sendMessage("create-tab");
await extension.awaitMessage("create-tab:done");
const aboutBlockedLoaded = BrowserTestUtils.waitForContentEvent(
gBrowser.selectedTab.linkedBrowser,
"AboutBlockedLoaded",
true,
undefined,
true
);
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
extension.sendMessage("load-tab", "http://expected.example.org");
await extension.awaitMessage("load-tab:done");
info("Wait for custom Glean ping submit");
const gleanEvents = Glean.network.urlclassifierAddonBlock
.testGetValue()
?.map(evt => evt.extra);
Assert.deepEqual(
gleanEvents,
[
{
addon_id: id,
table: "harmfuladdon-blocklist-pref",
etld: "example.org",
},
],
"Got the expected Glean events"
);
await aboutBlockedLoaded;
Services.fog.testResetFOG();
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
extension.sendMessage("load-tab", "http://extra.example.org");
await extension.awaitMessage("load-tab:done");
const newGleanEvents = Glean.network.urlclassifierAddonBlock.testGetValue();
Assert.deepEqual(newGleanEvents, null, "No glean event received");
await extension.unload();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});