forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| /* eslint-env mozilla/remote-page */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const searchParams = new URLSearchParams(document.documentURI.split("?")[1]);
 | |
| 
 | |
| function initPage() {
 | |
|   if (!searchParams.get("e")) {
 | |
|     document.getElementById("error").remove();
 | |
|   }
 | |
| 
 | |
|   const explanation1 = document.getElementById(
 | |
|     "insecure-explanation-unavailable"
 | |
|   );
 | |
| 
 | |
|   const pageUrl = new URL(window.location.href.replace(/^view-source:/, ""));
 | |
| 
 | |
|   document.l10n.setAttributes(
 | |
|     explanation1,
 | |
|     "about-httpsonly-explanation-unavailable2",
 | |
|     { websiteUrl: pageUrl.host }
 | |
|   );
 | |
| 
 | |
|   const baseSupportURL = RPMGetFormatURLPref("app.support.baseURL");
 | |
|   document
 | |
|     .getElementById("learnMoreLink")
 | |
|     .setAttribute("href", baseSupportURL + "https-only-prefs");
 | |
| 
 | |
|   document
 | |
|     .getElementById("openInsecure")
 | |
|     .addEventListener("click", onOpenInsecureButtonClick);
 | |
| 
 | |
|   const delay = RPMGetIntPref("security.dialog_enable_delay", 1000);
 | |
|   setTimeout(() => {
 | |
|     document.getElementById("openInsecure").removeAttribute("inert");
 | |
|   }, delay);
 | |
| 
 | |
|   if (window.top == window) {
 | |
|     document
 | |
|       .getElementById("goBack")
 | |
|       .addEventListener("click", onReturnButtonClick);
 | |
|     addAutofocus("#goBack", "beforeend");
 | |
|   } else {
 | |
|     document.getElementById("goBack").remove();
 | |
|   }
 | |
| 
 | |
|   const isTopLevel = window.top == window;
 | |
|   const hasWWWPrefix = pageUrl.href.startsWith("https://www.");
 | |
|   if (isTopLevel && !hasWWWPrefix) {
 | |
|     // HTTPS-Only generally simply replaces http: with https:;
 | |
|     // here we additionally try to add www and see if that allows to upgrade the connection if it is top level
 | |
| 
 | |
|     window.addEventListener("pingSecureWWWLinkSuccess", () => {
 | |
|       activateSuggestionBox();
 | |
|       displayWWWSuggestion(pageUrl.host);
 | |
|     });
 | |
| 
 | |
|     // try to ping secure www link in the AboutHttpsOnlyErrorChild
 | |
|     RPMTryPingSecureWWWLink();
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*  Suggestion Box */
 | |
| 
 | |
| function activateSuggestionBox() {
 | |
|   const suggestionBox = document.querySelector(".suggestion-box");
 | |
|   suggestionBox.hidden = false;
 | |
| }
 | |
| 
 | |
| function displayWWWSuggestion(aURL) {
 | |
|   const suggestionBox = document.querySelector(".suggestion-box");
 | |
|   const suggestionWWWText = document.createElement("p");
 | |
|   const suggestionWWWButton = document.createElement("button");
 | |
|   const suggestionButtonContainer = document.createElement("div");
 | |
| 
 | |
|   document.l10n.setAttributes(
 | |
|     suggestionWWWText,
 | |
|     "about-httpsonly-suggestion-box-www-text",
 | |
|     { websiteUrl: aURL }
 | |
|   );
 | |
| 
 | |
|   suggestionWWWButton.setAttribute("id", "openWWW");
 | |
|   document.l10n.setAttributes(
 | |
|     suggestionWWWButton,
 | |
|     "about-httpsonly-suggestion-box-www-button",
 | |
|     { websiteUrl: aURL }
 | |
|   );
 | |
|   suggestionWWWButton.addEventListener("click", openSecureWWWButtonClick);
 | |
| 
 | |
|   suggestionButtonContainer.classList.add("button-container");
 | |
| 
 | |
|   suggestionBox.appendChild(suggestionWWWText);
 | |
|   suggestionButtonContainer.appendChild(suggestionWWWButton);
 | |
|   suggestionBox.appendChild(suggestionButtonContainer);
 | |
| }
 | |
| 
 | |
| /*  Button Events  */
 | |
| 
 | |
| function openSecureWWWButtonClick() {
 | |
|   RPMOpenSecureWWWLink();
 | |
| }
 | |
| 
 | |
| function onOpenInsecureButtonClick() {
 | |
|   document.reloadWithHttpsOnlyException();
 | |
| }
 | |
| 
 | |
| function onReturnButtonClick() {
 | |
|   RPMSendAsyncMessage("goBack");
 | |
| }
 | |
| 
 | |
| /*  Utils */
 | |
| 
 | |
| function addAutofocus(selector, position = "afterbegin") {
 | |
|   if (window.top != window) {
 | |
|     return;
 | |
|   }
 | |
|   var button = document.querySelector(selector);
 | |
|   var parent = button.parentNode;
 | |
|   button.remove();
 | |
|   button.setAttribute("autofocus", "true");
 | |
|   parent.insertAdjacentElement(position, button);
 | |
| }
 | |
| 
 | |
| /* Initialize Page */
 | |
| 
 | |
| initPage();
 | |
| // Dispatch this event so tests can detect that we finished loading the error page.
 | |
| // We're using the same event name as neterror because BrowserTestUtils.sys.mjs relies on that.
 | |
| let event = new CustomEvent("AboutNetErrorLoad", { bubbles: true });
 | |
| document.dispatchEvent(event);
 | 
