forked from mirrors/gecko-dev
		
	 3d5136ed5a
			
		
	
	
		3d5136ed5a
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D57663 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| function checkAndClickButton(document, id) {
 | |
|   let button = document.getElementById(id);
 | |
|   Assert.ok(button, `${id} button found`);
 | |
|   Assert.equal(
 | |
|     button.hasAttribute("disabled"),
 | |
|     false,
 | |
|     "button should be clickable"
 | |
|   );
 | |
|   button.click();
 | |
| }
 | |
| 
 | |
| function is_element_visible(aElement, aMsg) {
 | |
|   isnot(aElement, null, "Element should not be null, when checking visibility");
 | |
|   Assert.ok(!BrowserTestUtils.is_hidden(aElement), aMsg);
 | |
| }
 | |
| 
 | |
| // Extracted from https://searchfox.org/mozilla-central/rev/40ef22080910c2e2c27d9e2120642376b1d8b8b2/browser/components/preferences/in-content/tests/head.js#41
 | |
| function promiseLoadSubDialog(aURL) {
 | |
|   return new Promise((resolve, reject) => {
 | |
|     content.gSubDialog._dialogStack.addEventListener(
 | |
|       "dialogopen",
 | |
|       function dialogopen(aEvent) {
 | |
|         if (
 | |
|           aEvent.detail.dialog._frame.contentWindow.location == "about:blank"
 | |
|         ) {
 | |
|           return;
 | |
|         }
 | |
|         content.gSubDialog._dialogStack.removeEventListener(
 | |
|           "dialogopen",
 | |
|           dialogopen
 | |
|         );
 | |
| 
 | |
|         Assert.equal(
 | |
|           aEvent.detail.dialog._frame.contentWindow.location.toString(),
 | |
|           aURL,
 | |
|           "Check the proper URL is loaded"
 | |
|         );
 | |
| 
 | |
|         // Check visibility
 | |
|         is_element_visible(aEvent.detail.dialog._overlay, "Overlay is visible");
 | |
| 
 | |
|         // Check that stylesheets were injected
 | |
|         let expectedStyleSheetURLs = aEvent.detail.dialog._injectedStyleSheets.slice(
 | |
|           0
 | |
|         );
 | |
|         for (let styleSheet of aEvent.detail.dialog._frame.contentDocument
 | |
|           .styleSheets) {
 | |
|           let i = expectedStyleSheetURLs.indexOf(styleSheet.href);
 | |
|           if (i >= 0) {
 | |
|             info("found " + styleSheet.href);
 | |
|             expectedStyleSheetURLs.splice(i, 1);
 | |
|           }
 | |
|         }
 | |
|         Assert.equal(
 | |
|           expectedStyleSheetURLs.length,
 | |
|           0,
 | |
|           "All expectedStyleSheetURLs should have been found"
 | |
|         );
 | |
| 
 | |
|         // Wait for the next event tick to make sure the remaining part of the
 | |
|         // testcase runs after the dialog gets ready for input.
 | |
|         executeSoon(() => resolve(aEvent.detail.dialog._frame.contentWindow));
 | |
|       }
 | |
|     );
 | |
|   });
 | |
| }
 | |
| 
 | |
| function injectErrorPageFrame(tab, src) {
 | |
|   return SpecialPowers.spawn(
 | |
|     tab.linkedBrowser,
 | |
|     [{ frameSrc: src }],
 | |
|     async function({ frameSrc }) {
 | |
|       let loaded = ContentTaskUtils.waitForEvent(
 | |
|         content.wrappedJSObject,
 | |
|         "DOMFrameContentLoaded"
 | |
|       );
 | |
|       let iframe = content.document.createElement("iframe");
 | |
|       iframe.src = frameSrc;
 | |
|       content.document.body.appendChild(iframe);
 | |
|       await loaded;
 | |
|       // We will have race conditions when accessing the frame content after setting a src,
 | |
|       // so we can't wait for AboutNetErrorLoad. Let's wait for the certerror class to
 | |
|       // appear instead (which should happen at the same time as AboutNetErrorLoad).
 | |
|       await ContentTaskUtils.waitForCondition(() =>
 | |
|         iframe.contentDocument.body.classList.contains("certerror")
 | |
|       );
 | |
|     }
 | |
|   );
 | |
| }
 | |
| 
 | |
| async function openErrorPage(useFrame = false) {
 | |
|   let src = "https://expired.example.com/";
 | |
|   let dummyPage =
 | |
|     getRootDirectory(gTestPath).replace(
 | |
|       "chrome://mochitests/content",
 | |
|       "https://example.com"
 | |
|     ) + "dummy_page.html";
 | |
| 
 | |
|   let tab;
 | |
|   if (useFrame) {
 | |
|     info("Loading cert error page in an iframe");
 | |
|     tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, dummyPage);
 | |
|     await injectErrorPageFrame(tab, src);
 | |
|   } else {
 | |
|     let certErrorLoaded;
 | |
|     tab = await BrowserTestUtils.openNewForegroundTab(
 | |
|       gBrowser,
 | |
|       () => {
 | |
|         gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, src);
 | |
|         let browser = gBrowser.selectedBrowser;
 | |
|         certErrorLoaded = BrowserTestUtils.waitForErrorPage(browser);
 | |
|       },
 | |
|       false
 | |
|     );
 | |
|     info("Loading and waiting for the cert error");
 | |
|     await certErrorLoaded;
 | |
|   }
 | |
| 
 | |
|   return tab;
 | |
| }
 |