/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const { CookieXPCShellUtils } = ChromeUtils.import( "resource://testing-common/CookieXPCShellUtils.jsm" ); const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); CookieXPCShellUtils.init(this); // Same agent cluster, all works fine: blobURLs can be opened. add_task(async () => { do_get_profile(); Services.prefs.setBoolPref( "privacy.partition.bloburl_per_agent_cluster", true ); const server = CookieXPCShellUtils.createServer({ hosts: ["example.org"] }); let result = new Promise(resolve => { server.registerPathHandler("/result", (metadata, response) => { resolve(metadata.queryString == "ok"); const body = "Done"; response.bodyOutputStream.write(body, body.length); }); }); server.registerPathHandler("/test", (metadata, response) => { response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = ``; response.bodyOutputStream.write(body, body.length); }); let contentPage = await CookieXPCShellUtils.loadContentPage( "http://example.org/test" ); Assert.ok(await result, "BlobURL works"); await contentPage.close(); }); // Same agent cluster: frames add_task(async () => { do_get_profile(); const server = CookieXPCShellUtils.createServer({ hosts: ["example.org"] }); let result = new Promise(resolve => { server.registerPathHandler("/result", (metadata, response) => { resolve(metadata.queryString == "ok"); const body = "Done"; response.bodyOutputStream.write(body, body.length); }); }); server.registerPathHandler("/iframe", (metadata, response) => { response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = ``; response.bodyOutputStream.write(body, body.length); }); server.registerPathHandler("/test", (metadata, response) => { response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = ``; response.bodyOutputStream.write(body, body.length); }); let contentPage = await CookieXPCShellUtils.loadContentPage( "http://example.org/test" ); Assert.ok(await result, "BlobURL works"); await contentPage.close(); }); // Cross agent cluster: different tabs add_task(async () => { do_get_profile(); const server = CookieXPCShellUtils.createServer({ hosts: ["example.org"] }); let result = new Promise(resolve => { server.registerPathHandler("/result", (metadata, response) => { resolve(metadata.queryString == "ok"); const body = "Done"; response.bodyOutputStream.write(body, body.length); }); }); const step = new Promise(resolve => { server.registerPathHandler("/step", (metadata, response) => { resolve(metadata.queryString); response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = "Thanks!"; response.bodyOutputStream.write(body, body.length); }); }); server.registerPathHandler("/test", (metadata, response) => { response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = ``; response.bodyOutputStream.write(body, body.length); }); let contentPage = await CookieXPCShellUtils.loadContentPage( "http://example.org/test" ); const blobURL = await step; Assert.ok(blobURL.length, "We have a blobURL"); server.registerPathHandler("/cross-test", (metadata, response) => { response.setStatusLine(metadata.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/html", false); const body = ``; response.bodyOutputStream.write(body, body.length); }); let contentPage2 = await CookieXPCShellUtils.loadContentPage( "http://example.org/cross-test?" + blobURL ); Assert.ok(!(await result), "BlobURL should not work"); await contentPage.close(); await contentPage2.close(); });