From 1fbcb3f7bf7ddf955193d798837ab88cf2815112 Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 23 Feb 2014 18:32:00 +0100 Subject: convert into a restartless extension --- bootstrap.js | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 bootstrap.js (limited to 'bootstrap.js') diff --git a/bootstrap.js b/bootstrap.js new file mode 100644 index 0000000..080d98c --- /dev/null +++ b/bootstrap.js @@ -0,0 +1,100 @@ +"use strict"; + +var Cc = Components.classes; +var Ci = Components.interfaces; +var Cu = Components.utils; + +function loadIntoWindow(window) { + if (!window) + return; + + window.topmenuProxy = TopMenuService.createWindowProxy(window); +} + +function unloadFromWindow(window) { + if (!window) + return; + if (!window.topmenuProxy) + return; + + window.topmenuProxy.unload(); + window.topmenuProxy.dispose(); + window.topmenuProxy = null; +} + +var windowListener = { + onOpenWindow: function(window) { + // Wait for the window to finish loading + var domWindow = window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow); + domWindow.addEventListener("load", function onLoad() { + domWindow.removeEventListener("load", onLoad, false); + domWindow.addEventListener("unload", function onUnload() { + domWindow.removeEventListener("unload", onUnload, false); + unloadFromWindow(domWindow); + }, false); + loadIntoWindow(domWindow); + }, false); + }, + + onCloseWindow: function(window) {}, + onWindowTitleChange: function(window, title) {} +}; + +function startup(data, reason) { + // Setup logging + Cu.import("chrome://topmenu/content/log4moz.js"); + var formatter = new Log4Moz.BasicFormatter(); + var root = Log4Moz.repository.rootLogger; + root.level = Log4Moz.Level.Debug; + + var capp = new Log4Moz.ConsoleAppender(formatter); + capp.level = Log4Moz.Level.Debug; + root.addAppender(capp); + + var log = Log4Moz.repository.getLogger("topmenu.Bootstrap"); + + // Load module + Cu.import("chrome://topmenu/content/topmenuservice.js"); + + // Load into any existing windows + var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); + var windows = wm.getEnumerator(null); + while (windows.hasMoreElements()) { + var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); + loadIntoWindow(domWindow); + } + + // Load into any new windows + wm.addListener(windowListener); +} + +function shutdown(data, reason) { + // When the application is shutting down we normally don't have to clean + // up any UI changes made + if (reason === APP_SHUTDOWN) + return; + + var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); + + // Stop listening for new windows + wm.removeListener(windowListener); + + // Unload from any existing windows + var windows = wm.getEnumerator(null); + while (windows.hasMoreElements()) { + var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); + unloadFromWindow(domWindow); + } + + // Stop logging and unload modules + Cu.unload("chrome://topmenu/content/topmenuservice.js"); + Cu.unload("chrome://topmenu/content/log4moz.js"); +} + +function install(data, reason) { + +} + +function uninstall(data, reason) { + +} -- cgit v1.2.3