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");