Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

  • This test gets skipped with pattern: os == 'linux' && os_version == '18.04' && !debug OR apple_silicon OR apple_catalina && !debug OR win10_2009 && bits == 64 && !debug OR win11_2009 && bits == 64 && !debug OR socketprocess_networking
  • Manifest: toolkit/components/antitracking/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
*/
const { CookieXPCShellUtils } = ChromeUtils.importESModule(
);
CookieXPCShellUtils.init(this);
let gHits = 0;
add_task(async function () {
do_get_profile();
info("Disable predictor and accept all");
Services.prefs.setBoolPref("network.predictor.enabled", false);
Services.prefs.setBoolPref("network.predictor.enable-prefetch", false);
Services.prefs.setBoolPref("network.http.rcwn.enabled", false);
Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
const server = CookieXPCShellUtils.createServer({
hosts: ["example.org", "foo.com", "bar.com"],
});
server.registerFile(
"/font.woff",
do_get_file("data/font.woff"),
(_, response) => {
response.setHeader("Access-Control-Allow-Origin", "*", false);
gHits++;
}
);
server.registerPathHandler("/font", (request, response) => {
response.setStatusLine(request.httpVersion, 200, "OK");
response.setHeader("Content-Type", "text/html", false);
let body = `
<style type="text/css">
@font-face {
font-family: foo;
src: url("http://example.org/font.woff") format('woff');
}
body { font-family: foo }
</style>
</iframe>`;
response.bodyOutputStream.write(body, body.length);
});
server.registerPathHandler("/font-iframe", (request, response) => {
response.setStatusLine(request.httpVersion, 200, "OK");
response.setHeader("Content-Type", "text/html", false);
let body = `
<style type="text/css">
@font-face {
font-family: foo;
src: url("http://example.org/font.woff") format('woff');
}
body { font-family: foo }
</style>`;
response.bodyOutputStream.write(body, body.length);
});
const tests = [
{
prefValue: true,
hitsCount: 5,
},
{
prefValue: false,
// The font in page B/C is CORS, the channel will be flagged with
// nsIRequest::LOAD_ANONYMOUS.
// The flag makes the font in A and B/C use different cache key.
hitsCount: 2,
},
];
for (let test of tests) {
info("Clear network caches");
Services.cache2.clear();
info("Reset the hits count");
gHits = 0;
info("Enabling network state partitioning");
Services.prefs.setBoolPref(
"privacy.partition.network_state",
test.prefValue
);
info("Let's load a page with origin A");
let contentPage = await CookieXPCShellUtils.loadContentPage(
);
await contentPage.close();
info("Let's load a page with origin B");
contentPage = await CookieXPCShellUtils.loadContentPage(
);
await contentPage.close();
info("Let's load a page with origin C");
contentPage = await CookieXPCShellUtils.loadContentPage(
);
await contentPage.close();
Assert.equal(gHits, test.hitsCount, "The number of hits match");
}
});