diff --git a/platform/firefox/vapi-background.js b/platform/firefox/vapi-background.js index 6a7f3b295..b6f3f7410 100644 --- a/platform/firefox/vapi-background.js +++ b/platform/firefox/vapi-background.js @@ -1052,14 +1052,7 @@ var httpObserver = { 12: 'object', 14: 'font' }, - lastRequest: { - url: null, - type: null, - tabId: null, - frameId: null, - parentFrameId: null, - openerURL: null - }, + lastRequest: [{}, {}], get componentRegistrar() { return Components.manager.QueryInterface(Ci.nsIComponentRegistrar); @@ -1238,12 +1231,21 @@ var httpObserver = { // http-on-opening-request - var lastRequest = this.lastRequest; + var lastRequest = this.lastRequest[0]; + + if ( lastRequest.url !== URI.spec ) { + if ( this.lastRequest[1].url === URI.spec ) { + lastRequest = this.lastRequest[1]; + } else { + lastRequest.url = null; + } + } if ( lastRequest.url === null ) { + lastRequest.type = channel.loadInfo && channel.loadInfo.contentPolicyType || 1; result = this.handleRequest(channel, URI, { tabId: vAPI.noTabId, - type: channel.loadInfo && channel.loadInfo.contentPolicyType + type: lastRequest.type }); if ( result === true ) { @@ -1255,14 +1257,10 @@ var httpObserver = { } // Carry data for behind-the-scene redirects - channelData = [ - channel.loadInfo && channel.loadInfo.contentPolicyType || 1, - vAPI.noTabId, - null, - 0, - -1 - ]; - channel.setProperty(this.REQDATAKEY, channelData); + channel.setProperty( + this.REQDATAKEY, + [lastRequest.type, vAPI.noTabId, null, 0, -1] + ); return; } @@ -1311,14 +1309,13 @@ var httpObserver = { // If request is not handled we may use the data in on-modify-request if ( channel instanceof Ci.nsIWritablePropertyBag ) { - channelData = [ + channel.setProperty(this.REQDATAKEY, [ lastRequest.type, lastRequest.tabId, sourceTabId, lastRequest.frameId, lastRequest.parentFrameId - ]; - channel.setProperty(this.REQDATAKEY, channelData); + ]); } }, @@ -1385,12 +1382,15 @@ vAPI.net.registerListeners = function() { var shouldLoadListener = function(e) { var details = e.data; var lastRequest = httpObserver.lastRequest; - lastRequest.url = details.url; - lastRequest.type = details.type; - lastRequest.tabId = vAPI.tabs.getTabId(e.target); - lastRequest.frameId = details.frameId; - lastRequest.parentFrameId = details.parentFrameId; - lastRequest.openerURL = details.openerURL; + lastRequest[1] = lastRequest[0]; + lastRequest[0] = { + url: details.url, + type: details.type, + tabId: vAPI.tabs.getTabId(e.target), + frameId: details.frameId, + parentFrameId: details.parentFrameId, + openerURL: details.openerURL + }; }; vAPI.messaging.globalMessageManager.addMessageListener(