59 lines
2.8 KiB
JavaScript
59 lines
2.8 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/. */
|
|
|
|
/* Auto-recovery module.
|
|
* This module aims to catch fatal browser initialization errors and either
|
|
* automatically correct likely causes from them, or automatically restarting
|
|
* the browser in safe mode. This is hooked into the browser's "onload"
|
|
* event because it can be assumed that at that point, everything must
|
|
* have been properly initialized already.
|
|
*/
|
|
|
|
var Cc = Components.classes;
|
|
var Ci = Components.interfaces;
|
|
var Cu = Components.utils;
|
|
|
|
// Services = object with smart getters for common XPCOM services
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
var browser_autoRecovery = {
|
|
onLoad: function() {
|
|
var nsIAS = Ci.nsIAppStartup; // Application startup interface
|
|
|
|
if (typeof gBrowser === "undefined") {
|
|
// gBrowser should always be defined at this point, but if it is not, then most likely
|
|
// it is due to an incompatible or outdated language pack being installed and selected.
|
|
// In this case, we reset "general.useragent.locale" to try to recover browser startup.
|
|
if (Services.prefs.prefHasUserValue("general.useragent.locale")) {
|
|
// Restart automatically in en-US.
|
|
Services.prefs.clearUserPref("general.useragent.locale");
|
|
Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAS).quit(nsIAS.eRestart | nsIAS.eAttemptQuit);
|
|
} else if (!Services.appinfo.inSafeMode) {
|
|
// gBrowser isn't defined, and we're not using a custom locale. Most likely
|
|
// a user-installed add-on causes issues here, so we restart in Safe Mode.
|
|
let RISM = Services.prompt.confirm(null, "Error",
|
|
"The Browser didn't start properly!\n"+
|
|
"This is usually caused by an add-on or misconfiguration.\n\n"+
|
|
"Restart in Safe Mode?");
|
|
if (RISM) {
|
|
Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAS).restartInSafeMode(nsIAS.eRestart | nsIAS.eAttemptQuit);
|
|
} else {
|
|
// Force quit application
|
|
Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAS).quit(nsIAS.eForceQuit);
|
|
}
|
|
}
|
|
// Something else caused this issue and we're already in Safe Mode, so we return
|
|
// without doing anything else, and let normal error handling take place.
|
|
return;
|
|
} // gBrowser undefined
|
|
|
|
// Other checks than gBrowser undefined can go here!
|
|
|
|
// Remove our listener, since we don't want this to fire on every load.
|
|
window.removeEventListener("load", browser_autoRecovery.onLoad, false);
|
|
}
|
|
};
|
|
|
|
window.addEventListener("load", browser_autoRecovery.onLoad, false);
|