Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: debug
- Manifest: toolkit/components/antitracking/test/browser/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* This test verifies that the partitionKey of an ABA iframe is fixed and won't
* be changed by loading a cross-site iframe along side it.
*/
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [["network.cookie.cookieBehavior.optInPartitioning", false]],
});
registerCleanupFunction(async () => {
await new Promise(resolve => {
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
resolve()
);
});
});
});
add_task(async function test_fixed_ABA_partitionKey() {
info("Open a new tab to load an ABA iframe.");
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
TEST_TOP_PAGE_HTTPS
);
info("Open a cross-site iframe.");
let crossOriginBC = await SpecialPowers.spawn(
tab.linkedBrowser,
[TEST_3RD_PARTY_PAGE],
async src => {
// Open an cross-site iframe
let iframe = content.document.createElement("iframe");
iframe.src = src;
await new content.Promise(resolve => {
iframe.onload = resolve;
content.document.body.appendChild(iframe);
});
return iframe.browsingContext;
}
);
info("Open an ABA iframe and a cross-site iframe in parallel.");
let abaBC = await SpecialPowers.spawn(
crossOriginBC,
[TEST_TOP_PAGE_HTTPS, TEST_3RD_PARTY_PAGE],
async (sameSiteSrc, crossSiteSrc) => {
let ABAiframe = content.document.createElement("iframe");
ABAiframe.src = sameSiteSrc;
// We don't wait for the ABA iframe to load, because we want to test that
// loading a cross-site iframe doesn't change the partitionKey of the ABA
// iframe.
let abaPromise = new content.Promise(resolve => {
ABAiframe.onload = resolve;
content.document.body.appendChild(ABAiframe);
});
// Loading a cross-site iframe.
let crossSiteIframe = content.document.createElement("iframe");
crossSiteIframe.src = crossSiteSrc;
let crossSitePromise = new content.Promise(resolve => {
crossSiteIframe.onload = resolve;
content.document.body.appendChild(crossSiteIframe);
});
// Wait for both iframes to load
await Promise.all([abaPromise, crossSitePromise]);
return ABAiframe.browsingContext;
}
);
info("Verify the partitionKey and cookie access of the ABA iframe.");
await SpecialPowers.spawn(abaBC, [], async _ => {
is(
content.document.cookieJarSettings.partitionKey,
"(https,example.net,f)",
"ABA iframe has the correct partitionKey"
);
content.document.cookie = "test=test";
is(content.document.cookie, "test=test", "Cookie set");
});
BrowserTestUtils.removeTab(tab);
});