Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
// The harmful-addon feature carries an mRequestFilter that restricts
// classification to requests whose ContentClassifierRequest has
// mIsNonRecommendedAddon set — i.e. channels triggered or loaded by a
// non-recommended addon principal. This test verifies:
//
// 1. A plain page subresource fetch (non-addon triggering principal) is
// NOT blocked even when the URL is in the harmful-addon list.
//
// 2. A fetch issued from an extension background script (addon triggering
// principal, non-recommended) IS blocked.
add_task(async function test_harmful_addon_request_filter() {
let client = getRSClient();
let db = client.db;
let record = await populateRS(db, "harmful-addon", "mozilla-harmful-addon", [
"||example.org^",
]);
await pushEnginePrefs({ protection: "harmful-addon" });
let tab = await openTestTab();
let browser = tab.linkedBrowser;
await syncAndWaitForLists(client, [record]);
// Non-addon channels to the listed URL must pass through.
await assertImageLoaded(
browser,
TEST_BLOCKED_3RD_PARTY_DOMAIN,
"Non-addon channel to example.org should not be blocked by harmful-addon"
);
// Addon-triggered channels to the listed URL must be blocked.
let extension = ExtensionTestUtils.loadExtension({
manifest: {
host_permissions: ["*://example.org/*"],
},
background() {
const { browser } = this;
browser.test.onMessage.addListener(async (msg, url) => {
if (msg === "fetch") {
try {
await fetch(url);
browser.test.sendMessage("fetch-result", true);
} catch (_e) {
browser.test.sendMessage("fetch-result", false);
}
}
});
},
});
await extension.startup();
// The extension fetches from example.org. Its triggering principal is the
// extension principal, so mIsNonRecommendedAddon is true and the
// harmful-addon engine runs.
let imageURL =
TEST_BLOCKED_3RD_PARTY_DOMAIN +
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
Math.random();
extension.sendMessage("fetch", imageURL);
let fetchSucceeded = await extension.awaitMessage("fetch-result");
ok(
!fetchSucceeded,
"Addon fetch to example.org should be blocked by harmful-addon feature"
);
await extension.unload();
});