summaryrefslogtreecommitdiff
path: root/bootstrap.js
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap.js')
-rw-r--r--bootstrap.js100
1 files changed, 100 insertions, 0 deletions
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) {
+
+}