diff options
Diffstat (limited to 'install/ffextension/bootstrap.js')
-rw-r--r-- | install/ffextension/bootstrap.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/install/ffextension/bootstrap.js b/install/ffextension/bootstrap.js new file mode 100644 index 000000000..7e2ae576c --- /dev/null +++ b/install/ffextension/bootstrap.js @@ -0,0 +1,88 @@ +// Heavily inspired by Dave Townsend's post: +// Playing with windows in restartless (bootstrapped) extensions +// http://www.oxymoronical.com/blog/2011/01/Playing-with-windows-in-restartless-bootstrapped-extensions + +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cu = Components.utils; + +var WindowListener = { + + setupBrowserUI: function(domWindow) { + var doc = domWindow.document; + domWindow.kerberosauth_listener = kerberosauth_listener(domWindow); + doc.addEventListener('kerberos-auth-config', domWindow.kerberosauth_listener, false, true); + }, + + tearDownBrowserUI: function(domWindow) { + + var doc = domWindow.document; + doc.removeEventListener('kerberos-auth-config', domWindow.kerberosauth_listener); + delete domWindow.kerberosauth_listener; + }, + + // nsIWindowMediatorListener functions + onOpenWindow: function(xulWindow) { + // A new window has opened + var domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor). + getInterface(Ci.nsIDOMWindowInternal); + + // Wait for it to finish loading + domWindow.addEventListener("load", function listener() { + domWindow.removeEventListener("load", listener, false); + + // If this is a browser window then setup its UI + if (domWindow.document.documentElement.getAttribute("windowtype") === "navigator:browser") { + WindowListener.setupBrowserUI(domWindow); + } + }, false); + }, + + onCloseWindow: function(xulWindow) { + }, + + onWindowTitleChange: function(xulWindow, newTitle) { + } +}; + +function startup(data, reason) { + var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); + + Cu['import']("chrome://kerberosauth/content/kerberosauth.js"); + + // Get the list of browser windows already open + var windows = wm.getEnumerator("navigator:browser"); + while (windows.hasMoreElements()) { + var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); + + WindowListener.setupBrowserUI(domWindow); + } + + // Wait for any new browser windows to open + 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); + + // Get the list of browser windows already open + var windows = wm.getEnumerator("navigator:browser"); + while (windows.hasMoreElements()) { + var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); + WindowListener.tearDownBrowserUI(domWindow); + } + + // Stop listening for any new browser windows to open + wm.removeListener(WindowListener); + + Cu.unload("chrome://kerberosauth/content/kerberosauth.js"); +} + +function install() {} +function uninstall() {}
\ No newline at end of file |