|
|
|
@ -1921,44 +1921,52 @@ var httpObserver = {
|
|
|
|
|
// Also:
|
|
|
|
|
// https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts
|
|
|
|
|
tabIdFromChannel: function(channel) {
|
|
|
|
|
var aWindow;
|
|
|
|
|
if ( channel.notificationCallbacks ) {
|
|
|
|
|
var lc;
|
|
|
|
|
try {
|
|
|
|
|
lc = channel.notificationCallbacks.getInterface(Ci.nsILoadContext);
|
|
|
|
|
} catch(ex) {
|
|
|
|
|
}
|
|
|
|
|
if ( !lc ) {
|
|
|
|
|
try {
|
|
|
|
|
var loadContext = channel
|
|
|
|
|
.notificationCallbacks
|
|
|
|
|
.getInterface(Ci.nsILoadContext);
|
|
|
|
|
if ( loadContext.topFrameElement ) {
|
|
|
|
|
return tabWatcher.tabIdFromTarget(loadContext.topFrameElement);
|
|
|
|
|
}
|
|
|
|
|
aWindow = loadContext.associatedWindow;
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
//console.error(ex);
|
|
|
|
|
lc = channel.loadGroup.notificationCallbacks.getInterface(Ci.nsILoadContext);
|
|
|
|
|
} catch(ex) {
|
|
|
|
|
}
|
|
|
|
|
if ( !lc ) {
|
|
|
|
|
return vAPI.noTabId;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( lc.topFrameElement ) {
|
|
|
|
|
return tabWatcher.tabIdFromTarget(lc.topFrameElement);
|
|
|
|
|
}
|
|
|
|
|
var win;
|
|
|
|
|
try {
|
|
|
|
|
if ( !aWindow && channel.loadGroup && channel.loadGroup.notificationCallbacks ) {
|
|
|
|
|
aWindow = channel
|
|
|
|
|
.loadGroup
|
|
|
|
|
.notificationCallbacks
|
|
|
|
|
.getInterface(Ci.nsILoadContext)
|
|
|
|
|
.associatedWindow;
|
|
|
|
|
}
|
|
|
|
|
if ( aWindow ) {
|
|
|
|
|
return tabWatcher.tabIdFromTarget(
|
|
|
|
|
aWindow
|
|
|
|
|
.getInterface(Ci.nsIWebNavigation)
|
|
|
|
|
.QueryInterface(Ci.nsIDocShell)
|
|
|
|
|
.rootTreeItem
|
|
|
|
|
.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
|
|
|
.getInterface(Ci.nsIDOMWindow)
|
|
|
|
|
.gBrowser
|
|
|
|
|
.getBrowserForContentWindow(aWindow)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
//console.error(ex);
|
|
|
|
|
win = lc.associatedWindow;
|
|
|
|
|
} catch (ex) { }
|
|
|
|
|
if ( !win ) {
|
|
|
|
|
return vAPI.noTabId;
|
|
|
|
|
}
|
|
|
|
|
if ( win.top ) {
|
|
|
|
|
win = win.top;
|
|
|
|
|
}
|
|
|
|
|
var tabBrowser;
|
|
|
|
|
try {
|
|
|
|
|
tabBrowser = getTabBrowser(
|
|
|
|
|
win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation)
|
|
|
|
|
.QueryInterface(Ci.nsIDocShell).rootTreeItem
|
|
|
|
|
.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow)
|
|
|
|
|
);
|
|
|
|
|
} catch (ex) { }
|
|
|
|
|
if ( !tabBrowser ) {
|
|
|
|
|
return vAPI.noTabId;
|
|
|
|
|
}
|
|
|
|
|
if ( tabBrowser.getBrowserForContentWindow ) {
|
|
|
|
|
return tabWatcher.tabIdFromTarget(tabBrowser.getBrowserForContentWindow(win));
|
|
|
|
|
}
|
|
|
|
|
return vAPI.noTabId;
|
|
|
|
|
// Falling back onto _getTabForContentWindow to ensure older versions
|
|
|
|
|
// of Firefox work well.
|
|
|
|
|
return tabBrowser._getTabForContentWindow ?
|
|
|
|
|
tabWatcher.tabIdFromTarget(tabBrowser._getTabForContentWindow(win)) :
|
|
|
|
|
vAPI.noTabId;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
rawtypeFromContentType: function(channel) {
|
|
|
|
|