Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
-
CI results over the last 22 days
- Manifest: toolkit/components/content-classifier/test/browser/browser.toml
"use strict";
// tracker cookie. The ContentClassifier annotates with the generic
// CLASSIFIED_TRACKING bit, which used to turn such reads into
// STATE_COOKIES_LOADED_TRACKER events.
const TRACKER_DOMAIN = TEST_ANNOTATED_3RD_PARTY_DOMAIN;
const COOKIES_SJS =
TRACKER_DOMAIN +
"browser/toolkit/components/antitracking/test/browser/cookies.sjs";
const {
STATE_LOADED_LEVEL_1_TRACKING_CONTENT,
STATE_COOKIES_LOADED,
STATE_COOKIES_LOADED_TRACKER,
STATE_COOKIES_PARTITIONED_TRACKER,
} = Ci.nsIWebProgressListener;
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
[
"network.cookie.cookieBehavior",
Ci.nsICookieService.BEHAVIOR_PARTITION_FOREIGN,
],
],
});
registerCleanupFunction(async () => {
await SpecialPowers.flushPrefEnv();
await new Promise(resolve =>
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve)
);
});
});
async function loadTrackerFrame(browser, url) {
return SpecialPowers.spawn(browser, [url], async src => {
let frame = content.document.createElement("iframe");
let loaded = new Promise(resolve => {
frame.onload = resolve;
});
frame.src = src;
content.document.body.appendChild(frame);
await loaded;
return content.document.querySelectorAll("iframe").length - 1;
});
}
function frameBody(browser, index) {
return SpecialPowers.spawn(
browser.browsingContext.children[index],
[],
() => content.document.body.textContent
);
}
add_task(async function partitioned_tracker_cookies_are_not_allowed() {
let client = getRSClient();
let records = await populateMultipleRS(client.db, [
{
id: "trackers",
name: "disconnect-tracker-base",
rules: ["||example.com^"],
},
]);
await pushEnginePrefs({ annotation: "trackers" });
let tab = await openTestTab();
let browser = tab.linkedBrowser;
await syncAndWaitForLists(client, records);
let writeFrame = await loadTrackerFrame(
browser,
`${COOKIES_SJS}?partitioned`
);
is(
await frameBody(browser, writeFrame),
"cookie:",
"The first tracker load carries no cookie"
);
let readFrame = await loadTrackerFrame(browser, COOKIES_SJS);
is(
await frameBody(browser, readFrame),
"cookie:foopy=partitioned",
"The second tracker load sends the partitioned cookie back"
);
await TestUtils.waitForCondition(async () => {
let log = JSON.parse(await browser.getContentBlockingLog());
return log[TRACKER_DOMAIN.replace(/\/$/, "")]?.some(
([state]) => state === STATE_COOKIES_LOADED
);
}, "Waiting for the cookie events of the tracker");
await assertHasBlockingState(
browser,
TRACKER_DOMAIN,
STATE_LOADED_LEVEL_1_TRACKING_CONTENT,
"The tracker is annotated"
);
await assertHasBlockingState(
browser,
TRACKER_DOMAIN,
STATE_COOKIES_PARTITIONED_TRACKER,
"Partitioned tracker cookies are reported as partitioned"
);
await assertLacksBlockingState(
browser,
TRACKER_DOMAIN,
STATE_COOKIES_LOADED_TRACKER,
"Partitioned tracker cookies are not reported as allowed tracker cookies"
);
BrowserTestUtils.removeTab(tab);
});