aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--frameModule.js2
-rw-r--r--js/vapi-background.js66
-rw-r--r--js/vapi-client.js9
3 files changed, 54 insertions, 23 deletions
diff --git a/frameModule.js b/frameModule.js
index 46d9377..8af4671 100644
--- a/frameModule.js
+++ b/frameModule.js
@@ -304,7 +304,7 @@ var contentObserver = {
let docReady = (e) => {
let doc = e.target;
doc.removeEventListener(e.type, docReady, true);
- lss(this.contentBaseURI + 'contentscript-end.js', sandbox);
+ lss(this.contentBaseURI + 'contentscript.js', sandbox);
};
if ( doc.readyState === 'loading') {
diff --git a/js/vapi-background.js b/js/vapi-background.js
index b4f1eac..7dfe924 100644
--- a/js/vapi-background.js
+++ b/js/vapi-background.js
@@ -1664,14 +1664,36 @@ var HTTPRequestHeaders = function(channel) {
HTTPRequestHeaders.prototype.init = function(channel) {
this.channel = channel;
+ this.headers = new Array();
+ this.originalHeaderNames = new Array();
+ channel.visitRequestHeaders({visitHeader: function(name, value) {
+ this.headers.push({name: name, value: value});
+ this.originalHeaderNames.push(name);
+ }.bind(this)});
return this;
};
HTTPRequestHeaders.prototype.dispose = function() {
this.channel = null;
+ this.headers = null;
+ this.originalHeaderNames = null;
httpRequestHeadersFactory.junkyard.push(this);
};
+HTTPRequestHeaders.prototype.update = function() {
+ var newHeaderNames = new Set();
+ for ( var header of this.headers ) {
+ this.setHeader(header.name, header.value, true);
+ newHeaderNames.add(header.name);
+ }
+ //Clear any headers that were removed
+ for ( var name of this.originalHeaderNames ) {
+ if ( !newHeaderNames.has(name) ) {
+ this.channel.setRequestHeader(name, '', false);
+ }
+ }
+}
+
HTTPRequestHeaders.prototype.getHeader = function(name) {
try {
return this.channel.getRequestHeader(name);
@@ -1901,13 +1923,17 @@ var httpObserver = {
var onBeforeSendHeaders = vAPI.net.onBeforeSendHeaders;
if ( onBeforeSendHeaders.types === null || onBeforeSendHeaders.types.has(type) ) {
var requestHeaders = httpRequestHeadersFactory(channel);
- onBeforeSendHeaders.callback({
+ var newHeaders = onBeforeSendHeaders.callback({
parentFrameId: type === 'main_frame' ? -1 : 0,
- requestHeaders: requestHeaders,
+ requestHeaders: requestHeaders.headers,
tabId: tabId,
type: type,
- url: URI.asciiSpec
+ url: URI.asciiSpec,
+ method:channel.requestMethod
});
+ if ( newHeaders ) {
+ requestHeaders.update();
+ }
requestHeaders.dispose();
}
@@ -2009,30 +2035,34 @@ var httpObserver = {
return;
}
- topic = 'Content-Security-Policy';
+ //topic = ['Content-Security-Policy', 'Content-Security-Policy-Report-Only'];
+ // Can send empty responseHeaders as these headers are only added and then merged
+
- var result;
- try {
- result = channel.getResponseHeader(topic);
- } catch (ex) {
- result = null;
- }
+ // TODO: Find better place for this, needs to be set before onHeadersReceived.callback
+ // Web workers not blocked in Pale Moon as child-src currently unavailable, see:
+ // https://github.com/MoonchildProductions/Pale-Moon/issues/949
+ if (μMatrix.cspNoWorker === undefined) {
+ μMatrix.cspNoWorker = "child-src 'none'; frame-src data: blob: *; report-uri about:blank";
+ }
- result = vAPI.net.onHeadersReceived.callback({
+ var result = vAPI.net.onHeadersReceived.callback({
parentFrameId: type === 'main_frame' ? -1 : 0,
- responseHeaders: result ? [{name: topic, value: result}] : [],
+ responseHeaders: [],
tabId: channelData[0],
type: type,
url: URI.asciiSpec
});
if ( result ) {
- channel.setResponseHeader(
- topic,
- result.responseHeaders.pop().value,
- true
- );
- }
+ for (let header of result.reponseHeaders ) {
+ channel.setResponseHeader(
+ header.name,
+ header.value,
+ true
+ );
+ }
+ }
return;
}
diff --git a/js/vapi-client.js b/js/vapi-client.js
index 7f9521d..fd77179 100644
--- a/js/vapi-client.js
+++ b/js/vapi-client.js
@@ -80,7 +80,7 @@ vAPI.messaging = {
requestId: 1,
connected: false,
- setup: function() {
+ start: function() {
this.addListener(this.builtinListener);
if ( this.toggleListenerCallback === null ) {
this.toggleListenerCallback = this.toggleListener.bind(this);
@@ -206,18 +206,19 @@ vAPI.messaging = {
}
};
-vAPI.messaging.setup()
+vAPI.messaging.start()
/******************************************************************************/
// No need to have vAPI client linger around after shutdown if
// we are not a top window (because element picker can still
// be injected in top window).
-if ( window !== window.top ) {
+// Needs more investigating
+/*if ( window !== window.top ) {
vAPI.shutdown.add(function() {
vAPI = null;
});
-}
+}*/
/******************************************************************************/