Created
June 26, 2012 14:05
-
-
Save grssam/2995968 to your computer and use it in GitHub Desktop.
restart command
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Restart command | |
* | |
* @param number delay | |
* delay in seconds for the restart | |
* @param boolean disableFastload | |
* disabled loading from cache upon restart. | |
* | |
* Examples : | |
* >> restart | |
* - restarts browser immediately | |
* >> restart 20 | |
* - restarts after 20 seconds | |
* >> restart --abort | |
* - stops any scheduled restart (via the above example) | |
* >> restart 0 true | |
* - restarts immediately and starts Firefox without using cache | |
*/ | |
Components.utils.import("resource:///modules/devtools/gcli.jsm"); | |
gcli.addCommand({ | |
name: "restart", | |
description: "Restarts Firefox", | |
params: [ | |
{ | |
name: "delay", | |
type: "number", | |
defaultValue: 0, | |
description: "Delay (in seconds) for the restart" | |
}, | |
{ | |
name: "disableFastload", | |
type: "boolean", | |
defaultValue: false, | |
description: "Disables Fastload Cache while restarting" | |
}, | |
{ | |
name: "abort", | |
type: "boolean", | |
defaultValue: false, | |
description: "Abort the current scheduled restart." | |
}, | |
], | |
returnType: "html", | |
exec: function Restart(args, context) { | |
let {classes: Cc, interfaces: Ci} = Components; | |
let HTML = "http://www.w3.org/1999/xhtml"; | |
let browserDoc = context.environment.chromeDocument; | |
let chromeWin = context.environment.chromeDocument.defaultView; | |
let canceled = Cc["@mozilla.org/supports-PRBool;1"] | |
.createInstance(Ci.nsISupportsPRBool); | |
Services.obs.notifyObservers(canceled, "quit-application-requested", "restart"); | |
if (canceled.data) { | |
let div = browserDoc.createElementNS(HTML, "div"); | |
div.innerHTML = "Restart request cancelled by user."; | |
return div; | |
} | |
if (args.abort) { | |
if (chromeWin.restartTimer) { | |
chromeWin.clearTimeout(chromeWin.restartTimer); | |
chromeWin.restartTimer = null; | |
delete chromeWin.restartTimer; | |
try { | |
chromeWin.clearTimeout(chromeWin.countdownTimer); | |
chromeWin.countdownTimer = null; | |
delete chromeWin.countdownTimer; | |
} catch(ex) {} | |
let div = browserDoc.createElementNS(HTML, "div"); | |
div.innerHTML = "Restart request cancelled by user."; | |
return div; | |
} | |
let div = browserDoc.createElementNS(HTML, "div"); | |
div.innerHTML = "No scheduled restart to abort."; | |
return div; | |
} | |
// disable fastload cache | |
if (args.disableFastload) { | |
Services.appinfo.invalidateCachesOnRestart(); | |
} | |
function restart() { | |
chromeWin.restartTimer = null; | |
delete chromeWin.restartTimer; | |
Cc['@mozilla.org/toolkit/app-startup;1'] | |
.getService(Ci.nsIAppStartup) | |
.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart); | |
} | |
// restart after the delay | |
if (args.delay && args.delay > 0) { | |
let delay = Math.floor(args.delay); | |
function countdownTimer() { | |
delay--; | |
div.innerHTML = "Restarting in " + delay + " seconds."; | |
if (delay > 0) { | |
chromeWin.countdownTimer = chromeWin.setTimeout(countdownTimer, 1000); | |
} | |
else { | |
chromeWin.countdownTimer = null; | |
delete chromeWin.countdownTimer; | |
} | |
} | |
let div = browserDoc.createElementNS(HTML, "div"); | |
div.innerHTML = "Restarting in " + delay + " seconds."; | |
chromeWin.countdownTimer = chromeWin.setTimeout(countdownTimer, 1000); | |
chromeWin.restartTimer = chromeWin.setTimeout(restart, delay*1000); | |
return div; | |
} | |
else { | |
restart(); | |
let div = browserDoc.createElementNS(HTML, "div"); | |
div.innerHTML = "Restarting..."; | |
return div; | |
} | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment