182 lines
5.2 KiB
JavaScript
182 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
"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],
|
|
],
|
|
});
|