|
|
|
@ -335,10 +335,10 @@ vAPI.tabs = {};
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
vAPI.isNoTabId = function(tabId) {
|
|
|
|
|
return tabId.toString() === '_';
|
|
|
|
|
return tabId.toString() === '-1';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
vAPI.noTabId = '_';
|
|
|
|
|
vAPI.noTabId = '-1';
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
@ -387,12 +387,20 @@ vAPI.tabs.getTabId = function(target) {
|
|
|
|
|
|
|
|
|
|
var i, gBrowser = target.ownerDocument.defaultView.gBrowser;
|
|
|
|
|
|
|
|
|
|
if ( !gBrowser ) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// This should be more efficient from version 35
|
|
|
|
|
if ( gBrowser.getTabForBrowser ) {
|
|
|
|
|
i = gBrowser.getTabForBrowser(target);
|
|
|
|
|
return i ? i.linkedPanel : -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( !gBrowser.browsers ) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i = gBrowser.browsers.indexOf(target);
|
|
|
|
|
|
|
|
|
|
if ( i !== -1 ) {
|
|
|
|
@ -795,6 +803,7 @@ var httpObserver = {
|
|
|
|
|
VALID_CSP_TARGETS: 1 << Ci.nsIContentPolicy.TYPE_DOCUMENT |
|
|
|
|
|
1 << Ci.nsIContentPolicy.TYPE_SUBDOCUMENT,
|
|
|
|
|
typeMap: {
|
|
|
|
|
1: 'other',
|
|
|
|
|
2: 'script',
|
|
|
|
|
3: 'image',
|
|
|
|
|
4: 'stylesheet',
|
|
|
|
@ -891,7 +900,7 @@ var httpObserver = {
|
|
|
|
|
return result === true;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handleRequest: function(channel, details) {
|
|
|
|
|
handleRequest: function(channel, URI, details) {
|
|
|
|
|
var onBeforeRequest = vAPI.net.onBeforeRequest;
|
|
|
|
|
var type = this.typeMap[details.type] || 'other';
|
|
|
|
|
|
|
|
|
@ -901,11 +910,11 @@ var httpObserver = {
|
|
|
|
|
|
|
|
|
|
var result = onBeforeRequest.callback({
|
|
|
|
|
frameId: details.frameId,
|
|
|
|
|
hostname: channel.URI.asciiHost,
|
|
|
|
|
hostname: URI.asciiHost,
|
|
|
|
|
parentFrameId: details.parentFrameId,
|
|
|
|
|
tabId: details.tabId,
|
|
|
|
|
type: type,
|
|
|
|
|
url: channel.URI.asciiSpec
|
|
|
|
|
url: URI.asciiSpec
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if ( !result || typeof result !== 'object' ) {
|
|
|
|
@ -987,8 +996,8 @@ var httpObserver = {
|
|
|
|
|
|
|
|
|
|
var lastRequest = this.lastRequest;
|
|
|
|
|
|
|
|
|
|
if ( !lastRequest.url || lastRequest.url !== URI.spec ) {
|
|
|
|
|
lastRequest.url = null;
|
|
|
|
|
if ( lastRequest.url === null ) {
|
|
|
|
|
this.handleRequest(channel, URI, {tabId: vAPI.noTabId, type: 1});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1023,7 +1032,7 @@ var httpObserver = {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( this.handleRequest(channel, lastRequest) ) {
|
|
|
|
|
if ( this.handleRequest(channel, URI, lastRequest) ) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1074,7 +1083,7 @@ var httpObserver = {
|
|
|
|
|
parentFrameId: -1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if ( this.handleRequest(newChannel, details) ) {
|
|
|
|
|
if ( this.handleRequest(newChannel, URI, details) ) {
|
|
|
|
|
result = this.ABORT;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -1106,19 +1115,6 @@ vAPI.net.registerListeners = function() {
|
|
|
|
|
var shouldLoadListenerMessageName = location.host + ':shouldLoad';
|
|
|
|
|
var shouldLoadListener = function(e) {
|
|
|
|
|
var details = e.data;
|
|
|
|
|
|
|
|
|
|
// data: and about:blank
|
|
|
|
|
if ( details.url.charAt(0) !== 'h' ) {
|
|
|
|
|
vAPI.net.onBeforeRequest.callback({
|
|
|
|
|
frameId: details.frameId,
|
|
|
|
|
parentFrameId: details.parentFrameId,
|
|
|
|
|
tabId: vAPI.tabs.getTabId(e.target),
|
|
|
|
|
type: 'main_frame',
|
|
|
|
|
url: 'http://' + details.url.slice(0, details.url.indexOf(':'))
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var lastRequest = httpObserver.lastRequest;
|
|
|
|
|
lastRequest.url = details.url;
|
|
|
|
|
lastRequest.type = details.type;
|
|
|
|
|