mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-10-31 16:28:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			195 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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 () {
 | |
|           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 () {
 | |
|           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 () {
 | |
|           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.startLoadingURIString(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();
 | |
| });
 | 
