/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const { CookieXPCShellUtils } = ChromeUtils.importESModule( "resource://testing-common/CookieXPCShellUtils.sys.mjs" ); 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 = ` `; 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 = ` `; 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( "http://example.org/font" ); await contentPage.close(); info("Let's load a page with origin B"); contentPage = await CookieXPCShellUtils.loadContentPage( "http://foo.com/font" ); await contentPage.close(); info("Let's load a page with origin C"); contentPage = await CookieXPCShellUtils.loadContentPage( "http://bar.com/font" ); await contentPage.close(); Assert.equal(gHits, test.hitsCount, "The number of hits match"); } });