safeMode.js (2242B)
1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 const appStartup = Services.startup; 7 8 const { ResetProfile } = ChromeUtils.importESModule( 9 "resource://gre/modules/ResetProfile.sys.mjs" 10 ); 11 12 var defaultToReset = false; 13 14 function showResetDialog() { 15 // Prompt the user to confirm the reset. 16 let retVals = { 17 reset: false, 18 }; 19 window.openDialog( 20 "chrome://global/content/resetProfile.xhtml", 21 null, 22 "chrome,modal,centerscreen,titlebar,dialog=yes", 23 retVals 24 ); 25 if (!retVals.reset) { 26 return; 27 } 28 29 ResetProfile.doReset(); 30 } 31 32 function onDefaultButton(event) { 33 if (defaultToReset) { 34 // Prevent starting into safe mode while restarting. 35 event.preventDefault(); 36 // Restart to reset the profile. 37 ResetProfile.doReset(); 38 } 39 // Dialog will be closed by default Event handler. 40 // Continue in safe mode. No restart needed. 41 } 42 43 function onCancel() { 44 appStartup.quit(appStartup.eForceQuit); 45 } 46 47 function onExtra1() { 48 if (defaultToReset) { 49 // Continue in safe mode 50 window.close(); 51 } 52 // The reset dialog will handle starting the reset process if the user confirms. 53 showResetDialog(); 54 } 55 56 window.addEventListener("load", () => { 57 const dialog = document.getElementById("safeModeDialog"); 58 if (appStartup.automaticSafeModeNecessary) { 59 document.getElementById("autoSafeMode").hidden = false; 60 document.getElementById("safeMode").hidden = true; 61 if (ResetProfile.resetSupported()) { 62 document.getElementById("resetProfile").hidden = false; 63 } else { 64 // Hide the reset button is it's not supported. 65 dialog.getButton("extra1").hidden = true; 66 } 67 } else if (!ResetProfile.resetSupported()) { 68 // Hide the reset button and text if it's not supported. 69 dialog.getButton("extra1").hidden = true; 70 document.getElementById("resetProfileInstead").hidden = true; 71 } 72 document.addEventListener("dialogaccept", onDefaultButton); 73 document.addEventListener("dialogcancel", onCancel); 74 document.addEventListener("dialogextra1", onExtra1); 75 });