diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /browser/base/content/test/general/browser_bug734076.js | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/base/content/test/general/browser_bug734076.js')
-rw-r--r-- | browser/base/content/test/general/browser_bug734076.js | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug734076.js b/browser/base/content/test/general/browser_bug734076.js new file mode 100644 index 0000000000..89eed9c2b2 --- /dev/null +++ b/browser/base/content/test/general/browser_bug734076.js @@ -0,0 +1,195 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +add_task(async function() { + // allow top level data: URI navigations, otherwise loading data: URIs + // in toplevel windows fail. + await SpecialPowers.pushPrefEnv({ + set: [["security.data_uri.block_toplevel_data_uri_navigations", false]], + }); + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, null, false); + + tab.linkedBrowser.stop(); // stop the about:blank load + + let writeDomainURL = encodeURI( + "data:text/html,<script>document.write(document.domain);</script>" + ); + + let tests = [ + { + name: "view image with background image", + url: "http://mochi.test:8888/", + element: "body", + opensNewTab: true, + go() { + return SpecialPowers.spawn( + gBrowser.selectedBrowser, + [{ writeDomainURL }], + async function(arg) { + let contentBody = content.document.body; + contentBody.style.backgroundImage = + "url('" + arg.writeDomainURL + "')"; + + return "context-viewimage"; + } + ); + }, + verify(browser) { + return SpecialPowers.spawn(browser, [], async function(arg) { + Assert.equal( + content.document.body.textContent, + "", + "no domain was inherited for view image with background image" + ); + }); + }, + }, + { + name: "view image", + url: "http://mochi.test:8888/", + element: "img", + opensNewTab: true, + go() { + return SpecialPowers.spawn( + gBrowser.selectedBrowser, + [{ writeDomainURL }], + async function(arg) { + let doc = content.document; + let img = doc.createElement("img"); + img.height = 100; + img.width = 100; + img.setAttribute("src", arg.writeDomainURL); + doc.body.insertBefore(img, doc.body.firstElementChild); + + return "context-viewimage"; + } + ); + }, + verify(browser) { + return SpecialPowers.spawn(browser, [], async function(arg) { + Assert.equal( + content.document.body.textContent, + "", + "no domain was inherited for view image" + ); + }); + }, + }, + { + name: "show only this frame", + url: "http://mochi.test:8888/", + element: "html", + frameIndex: 0, + go() { + return SpecialPowers.spawn( + gBrowser.selectedBrowser, + [{ writeDomainURL }], + async function(arg) { + let doc = content.document; + let iframe = doc.createElement("iframe"); + iframe.setAttribute("src", arg.writeDomainURL); + doc.body.insertBefore(iframe, doc.body.firstElementChild); + + // Wait for the iframe to load. + return new Promise(resolve => { + iframe.addEventListener( + "load", + function() { + resolve("context-showonlythisframe"); + }, + { capture: true, once: true } + ); + }); + } + ); + }, + verify(browser) { + return SpecialPowers.spawn(browser, [], async function(arg) { + Assert.equal( + content.document.body.textContent, + "", + "no domain was inherited for 'show only this frame'" + ); + }); + }, + }, + ]; + + let contentAreaContextMenu = document.getElementById( + "contentAreaContextMenu" + ); + + for (let test of tests) { + let loadedPromise = BrowserTestUtils.browserLoaded( + gBrowser.selectedBrowser + ); + BrowserTestUtils.loadURI(gBrowser, test.url); + await loadedPromise; + + info("Run subtest " + test.name); + let commandToRun = await test.go(); + + let popupShownPromise = BrowserTestUtils.waitForEvent( + contentAreaContextMenu, + "popupshown" + ); + + let browsingContext = gBrowser.selectedBrowser.browsingContext; + if (test.frameIndex != null) { + browsingContext = browsingContext.children[test.frameIndex]; + } + + await new Promise(r => { + SimpleTest.executeSoon(r); + }); + + // Sometimes, the iframe test fails as the child iframe hasn't finishing layout + // yet. Try again in this case. + while (true) { + try { + await BrowserTestUtils.synthesizeMouse( + test.element, + 3, + 3, + { type: "contextmenu", button: 2 }, + browsingContext + ); + } catch (ex) { + continue; + } + break; + } + + await popupShownPromise; + info("onImage: " + gContextMenu.onImage); + + let loadedAfterCommandPromise = test.opensNewTab + ? BrowserTestUtils.waitForNewTab(gBrowser, null, true) + : BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); + let popupHiddenPromise = BrowserTestUtils.waitForEvent( + contentAreaContextMenu, + "popuphidden" + ); + if (commandToRun == "context-showonlythisframe") { + let subMenu = document.getElementById("frame"); + let subMenuShown = BrowserTestUtils.waitForEvent(subMenu, "popupshown"); + subMenu.openMenu(true); + await subMenuShown; + } + contentAreaContextMenu.activateItem(document.getElementById(commandToRun)); + let result = await loadedAfterCommandPromise; + + await test.verify( + test.opensNewTab ? result.linkedBrowser : gBrowser.selectedBrowser + ); + + await popupHiddenPromise; + + if (test.opensNewTab) { + gBrowser.removeCurrentTab(); + } + } + + gBrowser.removeCurrentTab(); +}); |