1 { classes: Cc, interfaces: Ci, utils: Cu } = Components
4 Cu.import "resource://gre/modules/Services.jsm", tools
8 runOnWindowLoad = (callback, window) ->
9 if window.document.readyState == 'complete'
13 window.removeEventListener 'load', arguments.callee, false
16 window.addEventListener 'load', onLoad, false
18 applyToWindows = (callback) ->
19 winEnum = ww.getWindowEnumerator()
20 while winEnum.hasMoreElements()
21 window = winEnum.getNext().QueryInterface(Ci.nsIDOMWindow)
22 runOnWindowLoad callback, window
24 isBrowserWindow = (window) ->
25 return window.document.documentElement.getAttribute("windowtype") == "navigator:browser"
28 constructor: (@delegate) ->
30 observe: (subject, topic, data) ->
31 window = subject.QueryInterface(Ci.nsIDOMWindow)
33 when 'domwindowopened'
34 runOnWindowLoad @delegate.track, window
35 when 'domwindowclosed'
36 runOnWindowLoad @delegate.untrack, window
40 constructor: (@delegate) ->
41 @observer = new WindowObserver @delegate
44 applyToWindows @delegate.track
45 ww.registerNotification @observer
48 ww.unregisterNotification @observer
49 applyToWindows @delegate.untrack
52 exports.runOnWindowLoad = runOnWindowLoad
53 exports.applyToWindows = applyToWindows
54 exports.WindowTracker = WindowTracker
55 exports.isBrowserWindow = isBrowserWindow