Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

function runTest(obj) {
add_task(async _ => {
info("Test: " + obj.testName);
await SpecialPowers.pushPrefEnv({
set: [
["dom.ipc.processCount", 1],
[
"network.cookie.cookieBehavior",
Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER,
],
[
"network.cookie.cookieBehavior.pbmode",
Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER,
],
["privacy.trackingprotection.enabled", false],
["privacy.trackingprotection.pbmode.enabled", false],
["privacy.trackingprotection.annotate_channels", true],
[
"privacy.trackingprotection.socialtracking.enabled",
obj.protectionEnabled,
],
["privacy.socialtracking.block_cookies.enabled", obj.cookieBlocking],
],
});
await UrlClassifierTestUtils.addTestTrackers();
info("Creating a non-tracker top-level context");
let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
let browser = gBrowser.getBrowserForTab(tab);
await BrowserTestUtils.browserLoaded(browser);
info("The non-tracker page opens a tracker iframe");
await SpecialPowers.spawn(
browser,
[
{
page: TEST_3RD_PARTY_DOMAIN_STP + TEST_PATH + "localStorage.html",
image: TEST_3RD_PARTY_DOMAIN_STP + TEST_PATH + "raptor.jpg",
loading: obj.loading,
result: obj.result,
},
],
async obj => {
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, "Loading expected");
if (obj.loading) {
let ifr = content.document.createElement("iframe");
ifr.setAttribute("id", "ifr");
ifr.setAttribute("src", obj.page);
info("Iframe loading...");
await new content.Promise(resolve => {
ifr.onload = resolve;
content.document.body.appendChild(ifr);
});
let p = new Promise(resolve => {
content.addEventListener(
"message",
e => {
resolve(e.data);
},
{ once: true }
);
});
info("Setting localStorage value...");
ifr.contentWindow.postMessage("test", "*");
info("Getting the value...");
let value = await p;
is(value.status, obj.result, "We expect to succeed");
}
}
);
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_3RD_PARTY_DOMAIN_STP,
"Correct tracker origin must be reported"
);
Assert.deepEqual(
contentBlockingLog[origin],
obj.expectedLogItems,
"Content blocking log should be as expected"
);
}
BrowserTestUtils.removeTab(tab);
UrlClassifierTestUtils.cleanupTestTrackers();
});
}
runTest({
testName:
"Socialtracking-annotation feature enabled but not considered for tracking detection.",
protectionEnabled: false,
loading: true,
cookieBlocking: false,
result: true,
expectedLogItems: [
[Ci.nsIWebProgressListener.STATE_COOKIES_LOADED, true, 1],
[Ci.nsIWebProgressListener.STATE_COOKIES_LOADED_SOCIALTRACKER, true, 1],
],
});
runTest({
testName:
"Socialtracking-annotation feature enabled and considered for tracking detection.",
protectionEnabled: false,
loading: true,
cookieBlocking: true,
result: false,
expectedLogItems: [
[Ci.nsIWebProgressListener.STATE_COOKIES_LOADED, true, 1],
[Ci.nsIWebProgressListener.STATE_COOKIES_LOADED_SOCIALTRACKER, true, 1],
[Ci.nsIWebProgressListener.STATE_LOADED_SOCIALTRACKING_CONTENT, true, 2],
// We cache the storage allowed decision, so we will only get one block
// event per window and origin.
[Ci.nsIWebProgressListener.STATE_COOKIES_BLOCKED_SOCIALTRACKER, true, 1],
],
});
runTest({
testName: "Socialtracking-protection feature enabled.",
protectionEnabled: true,
loading: false,
cookieBlocking: true,
result: false,
expectedLogItems: [
[Ci.nsIWebProgressListener.STATE_BLOCKED_SOCIALTRACKING_CONTENT, true, 1],
],
});