From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser/browser_firstPartyIsolation_blobURI.js | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 browser/components/originattributes/test/browser/browser_firstPartyIsolation_blobURI.js (limited to 'browser/components/originattributes/test/browser/browser_firstPartyIsolation_blobURI.js') diff --git a/browser/components/originattributes/test/browser/browser_firstPartyIsolation_blobURI.js b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_blobURI.js new file mode 100644 index 0000000000..e5e74fbe4b --- /dev/null +++ b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_blobURI.js @@ -0,0 +1,116 @@ +add_setup(async function () { + Services.prefs.setBoolPref("privacy.firstparty.isolate", true); + + registerCleanupFunction(function () { + Services.prefs.clearUserPref("privacy.firstparty.isolate"); + Services.cookies.removeAll(); + }); +}); + +/** + * First we generate a Blob URI by using URL.createObjectURL(new Blob(..)); + * then we navigate to this Blob URI, hence to make the top-level document URI + * is Blob URI. + * Later we create an iframe on this Blob: document, and we test that the iframe + * has correct firstPartyDomain. + */ +add_task(async function test_blob_uri_inherit_oa_from_content() { + const BASE_URI = + "http://mochi.test:8888/browser/browser/components/" + + "originattributes/test/browser/dummy.html"; + const BASE_DOMAIN = "mochi.test"; + + // First we load a normal web page. + let win = await BrowserTestUtils.openNewBrowserWindow({ remote: true }); + let browser = win.gBrowser.selectedBrowser; + BrowserTestUtils.loadURIString(browser, BASE_URI); + await BrowserTestUtils.browserLoaded(browser); + + // Then navigate to the blob: URI. + await SpecialPowers.spawn( + browser, + [{ firstPartyDomain: BASE_DOMAIN }], + async function (attrs) { + Assert.ok(true, "origin " + content.document.nodePrincipal.origin); + Assert.equal( + content.document.nodePrincipal.originAttributes.firstPartyDomain, + attrs.firstPartyDomain, + "The document should have firstPartyDomain" + ); + + // Now we use createObjectURL to generate a blob URI and navigate to it. + let url = content.window.URL.createObjectURL( + new content.window.Blob( + [ + ``, + ], + { type: "text/html" } + ) + ); + content.document.location = url; + } + ); + + // Wait for the Blob: URI to be loaded. + await BrowserTestUtils.browserLoaded(browser, false, function (url) { + info("BrowserTestUtils.browserLoaded url=" + url); + return url.startsWith("blob:http://mochi.test:8888/"); + }); + + // We verify the blob document has correct origin attributes. + // Then we inject an iframe to it. + await SpecialPowers.spawn( + browser, + [{ firstPartyDomain: BASE_DOMAIN }], + async function (attrs) { + Assert.ok( + content.document.documentURI.startsWith("blob:http://mochi.test:8888/"), + "the document URI should be a blob URI." + ); + Assert.ok(true, "origin " + content.document.nodePrincipal.origin); + Assert.equal( + content.document.nodePrincipal.originAttributes.firstPartyDomain, + attrs.firstPartyDomain, + "The document should have firstPartyDomain" + ); + + let iframe = content.document.createElement("iframe"); + iframe.src = "http://example.com"; + iframe.id = "iframe1"; + content.document.body.appendChild(iframe); + + // Wait for the iframe to be loaded. + await new content.Promise(done => { + iframe.addEventListener( + "load", + function () { + done(); + }, + { capture: true, once: true } + ); + }); + } + ); + + // Finally we verify the iframe has correct origin attributes. + await SpecialPowers.spawn( + browser, + [{ firstPartyDomain: BASE_DOMAIN }], + async function (attrs) { + let iframe = content.document.getElementById("iframe1"); + await SpecialPowers.spawn( + iframe, + [attrs.firstPartyDomain], + function (firstPartyDomain) { + Assert.equal( + content.document.nodePrincipal.originAttributes.firstPartyDomain, + firstPartyDomain, + "iframe should inherit firstPartyDomain from blob: URI" + ); + } + ); + } + ); + + win.close(); +}); -- cgit v1.2.3