Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
-
CI results over the last 21 days
- Manifest: toolkit/components/content-classifier/test/browser/browser.toml
"use strict";
// (image and media loads). The content classifier fingerprinters engine must
// do the same in both the cancel and the annotate pass, while still
// classifying other loads, including imageset ones that url-classifier does
// not treat as passive.
const FINGERPRINTER = TEST_ANNOTATED_3RD_PARTY_DOMAIN;
const ANTITRACKING_PATH =
"browser/toolkit/components/antitracking/test/browser/";
async function loadThirdParty(browser, kind, domain) {
let url;
switch (kind) {
case "imageset":
url = domain + ANTITRACKING_PATH + "raptor.jpg?" + Math.random();
break;
case "media":
url = domain + ANTITRACKING_PATH + "short.mp4?" + Math.random();
break;
}
return SpecialPowers.spawn(browser, [kind, url], async (aKind, aUrl) => {
let element;
let loadEvent = "load";
if (aKind == "imageset") {
element = new content.Image();
element.srcset = `${aUrl} 1x`;
} else {
element = content.document.createElement("video");
element.preload = "auto";
element.src = aUrl;
loadEvent = "loadedmetadata";
}
return new content.Promise(resolve => {
element.addEventListener(loadEvent, () => resolve(true));
element.addEventListener("error", () => resolve(false));
});
});
}
async function setupFingerprinters(engines) {
let client = getRSClient();
let records = await populateMultipleRS(client.db, [
{
id: "fingerprinters",
name: "disconnect-fingerprinters-base",
rules: [`||${new URL(FINGERPRINTER).host}^`],
},
]);
await pushEnginePrefs(engines);
let tab = await openTestTab();
await syncAndWaitForLists(client, records);
return tab;
}
add_task(async function test_passive_content_not_blocked() {
let tab = await setupFingerprinters({ protection: "fingerprinters" });
let browser = tab.linkedBrowser;
await assertImageLoaded(
browser,
FINGERPRINTER,
"An image from a fingerprinter loads"
);
ok(
await loadThirdParty(browser, "media", FINGERPRINTER),
"A media load from a fingerprinter loads"
);
ok(
!(await loadThirdParty(browser, "imageset", FINGERPRINTER)),
"An imageset load from a fingerprinter is blocked"
);
await assertScriptBlocked(
browser,
FINGERPRINTER,
"A script from a fingerprinter is blocked"
);
BrowserTestUtils.removeTab(tab);
await SpecialPowers.popPrefEnv();
});
add_task(async function test_passive_content_not_annotated() {
let tab = await setupFingerprinters({ annotation: "fingerprinters" });
let browser = tab.linkedBrowser;
await assertImageLoaded(
browser,
FINGERPRINTER,
"An image from a fingerprinter loads"
);
await assertLacksBlockingState(
browser,
FINGERPRINTER,
Ci.nsIWebProgressListener.STATE_LOADED_FINGERPRINTING_CONTENT,
"An image from a fingerprinter is not annotated"
);
await assertScriptLoaded(
browser,
FINGERPRINTER,
"A script from a fingerprinter loads with annotation only"
);
await assertHasBlockingState(
browser,
FINGERPRINTER,
Ci.nsIWebProgressListener.STATE_LOADED_FINGERPRINTING_CONTENT,
"A script from a fingerprinter is annotated"
);
BrowserTestUtils.removeTab(tab);
await SpecialPowers.popPrefEnv();
});