Firefox "Restart" Menu Item

By Erik Vold Uploaded Nov 18, 2009
jetpack.future.import("menu");
jetpack.menu.file.remove("Restart");
jetpack.menu.file.insertBefore(jetpack.Menu({
	label: "Restart",
	mnemonic: "R",
	command: function(){
		var Ci=Components.interfaces;
		var Cc=Components.classes;
		// Taken from Ubiquity source code
		// MOZILLA PUBLIC LICENSE Version 1.1
		// See: https://addons.mozilla.org/en-US/firefox/versions/license/72901
		var Application = Cc["@mozilla.org/fuel/application;1"].getService(Ci.fuelIApplication);
		var extApplication = { // helper method for correct quitting/restarting
			_warnOnClose: function app__warnOnClose( event ) {
				var prefs = {
					close:		"browser.tabs.warnOnClose",
					restart:	"browser.warnOnRestart",
					quit:		"browser.warnOnQuit"
				};
				if (!(event in prefs) || Application.prefs.getValue(prefs[event], true)) {
					var os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
					var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool);
					os.notifyObservers(cancelQuit, "quit-application-requested", null);
					if (cancelQuit.data) return false; // somebody canceled our quit request
				}
				return true; // assume yes
			},
			_quitWithFlags: function app__quitWithFlags(aFlags, event) {
				if (this._warnOnClose(event)) {
					var appStartup = Cc['@mozilla.org/toolkit/app-startup;1'].getService(Ci.nsIAppStartup);
					appStartup.quit(aFlags);
					return true;
				}
				return false;
			},
			quit: function app_quit() {
				return this._quitWithFlags(Ci.nsIAppStartup.eAttemptQuit, "quit");
			},
			restart: function app_restart() {
				return this._quitWithFlags(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart, "restart");
			}
		};
		extApplication.restart()
	}
}),"Exit");