Here's my modified version of @Noitidart's answer. I use an expando property on browser
(eg: _myextensionTabId
) to index my cached array.
var WindowListener = {
/* Same as @Noitidart's listener */
onOpenWindow : function(xulWindow) {
/* Get DOM window, call other window specific modules init */
myExtension.initWindow(domWindow);
myHttpObserver.initWindow(domWindow);
},
onCloseWindow: function(xulWindow) {
/* Get DOM window, call other window specific modules uninit */
myExtension.uninitWindow(domWindow);
myHttpObserver.uninitWindow(domWindow);
},
};
var myHttpObserver = {
..
initWindow: function(window) {
window.gBrowser.tabContainer
.addEventListener('TabClose', tabClosed, false);
},
uninitWindow: function(window) {
dump ("Uninit window http observer\n");
window.gBrowser.tabContainer
.removeEventListener('TabClose', tabClosed);
for (var browser of window.gBrowser.browsers) {
if (browser._myextensionTabId) {
// Do any cleanup.
}
}
},
..
/* Other http observer stuff, methods that sets the expando property etc. */
};
function tabClosed(e) {
var browser = Services.wm.getMostRecentWindow("navigator:browser")
.gBrowser.getBrowserForTab(e.target);
dump("Tab closed. \n");
if (browser._myextensionTabId) {
dump("My extension tab id : " + browser._myextensionTabId);
// Do any cleanup
}
}