Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
add_setup(async function () {
// Disable other tracking protection feature to avoid interfering with the
// current test. This also setup prefs for testing email tracking.
await SpecialPowers.pushPrefEnv({
set: [
["privacy.trackingprotection.enabled", false],
["privacy.trackingprotection.pbmode.enabled", false],
["privacy.trackingprotection.annotate_channels", false],
["privacy.trackingprotection.cryptomining.enabled", false],
["privacy.trackingprotection.emailtracking.enabled", true],
["privacy.trackingprotection.fingerprinting.enabled", false],
["privacy.trackingprotection.socialtracking.enabled", false],
[
"urlclassifier.features.emailtracking.blocklistTables",
"mochitest5-track-simple",
],
["urlclassifier.features.emailtracking.allowlistTables", ""],
[
"urlclassifier.features.emailtracking.datacollection.blocklistTables",
"mochitest5-track-simple",
],
[
"urlclassifier.features.emailtracking.datacollection.allowlistTables",
"",
],
],
});
await UrlClassifierTestUtils.addTestTrackers();
registerCleanupFunction(_ => {
UrlClassifierTestUtils.cleanupTestTrackers();
});
});
function runTest(obj) {
add_task(async _ => {
info("Test: " + obj.testName);
await SpecialPowers.pushPrefEnv({
set: [
[
"privacy.trackingprotection.emailtracking.enabled",
obj.protectionEnabled,
],
[
"privacy.trackingprotection.emailtracking.pbmode.enabled",
obj.protectionPrivateEnabled,
],
],
});
let win;
if (obj.testPrivate) {
win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
} else {
win = window;
}
info("Creating a non-tracker top-level context");
let tab = BrowserTestUtils.addTab(win.gBrowser, TEST_TOP_PAGE);
let browser = tab.linkedBrowser;
await BrowserTestUtils.browserLoaded(browser);
info("The non-tracker page opens an email tracker iframe");
await SpecialPowers.spawn(
browser,
[
{
image: TEST_EMAIL_TRACKER_DOMAIN + TEST_PATH + "raptor.jpg",
script: TEST_EMAIL_TRACKER_DOMAIN + TEST_PATH + "empty.js",
loading: obj.loading,
},
],
async obj => {
info("Image loading ...");
let loading = await new content.Promise(resolve => {
let image = new content.Image();
image.src = obj.image + "?" + Math.random();
image.onload = _ => resolve(true);
image.onerror = _ => resolve(false);
});
is(loading, obj.loading, "Image loading expected");
let script = content.document.createElement("script");
script.setAttribute("src", obj.script);
info("Script loading ...");
loading = await new content.Promise(resolve => {
script.onload = _ => resolve(true);
script.onerror = _ => resolve(false);
content.document.body.appendChild(script);
});
is(loading, obj.loading, "Script loading expected");
}
);
info("Checking content blocking log.");
let contentBlockingLog = JSON.parse(await browser.getContentBlockingLog());
let origins = Object.keys(contentBlockingLog);
is(origins.length, 1, "There should be one origin entry in the log.");
for (let origin of origins) {
is(
origin + "/",
TEST_EMAIL_TRACKER_DOMAIN,
"Correct tracker origin must be reported"
);
Assert.deepEqual(
contentBlockingLog[origin],
obj.expectedLogItems,
"Content blocking log should be as expected"
);
}
BrowserTestUtils.removeTab(tab);
if (obj.testPrivate) {
await BrowserTestUtils.closeWindow(win);
}
await SpecialPowers.popPrefEnv();
});
}
runTest({
testName:
"EmailTracking-dataCollection feature enabled but not considered for tracking detection.",
protectionEnabled: false,
protectionPrivateEnabled: false,
loading: true,
expectedLogItems: [
[
Ci.nsIWebProgressListener.STATE_LOADED_EMAILTRACKING_LEVEL_1_CONTENT,
true,
2,
],
],
});
runTest({
testName: "Emailtracking-protection feature enabled.",
protectionEnabled: true,
protectionPrivateEnabled: true,
loading: false,
expectedLogItems: [
[Ci.nsIWebProgressListener.STATE_BLOCKED_EMAILTRACKING_CONTENT, true, 2],
],
});
runTest({
testName:
"Emailtracking-protection feature enabled for private windows and doesn't block in normal windows",
protectionEnabled: false,
protectionPrivateEnabled: true,
loading: true,
expectedLogItems: [
[
Ci.nsIWebProgressListener.STATE_LOADED_EMAILTRACKING_LEVEL_1_CONTENT,
true,
2,
],
],
});
runTest({
testName:
"Emailtracking-protection feature enabled for private windows and block in private windows",
testPrivate: true,
protectionEnabled: true,
protectionPrivateEnabled: true,
loading: false,
expectedLogItems: [
[Ci.nsIWebProgressListener.STATE_BLOCKED_EMAILTRACKING_CONTENT, true, 1],
],
});