Skip to content

Commit 60e15cb

Browse files
committed
Improve prevent-fetch scriptlet
Related issue: uBlockOrigin/uBlock-issues#3828 Ability to set header values for the trusted version of the scriptlet. Example: ..##+js(trusted-prevent-fetch, target, length:100, '{"headers":{"content-type": "image/png"}}')
1 parent 2e416f5 commit 60e15cb

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/js/resources/prevent-fetch.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,14 @@ function preventFetchFn(
6565
const responseProps = {
6666
statusText: { value: 'OK' },
6767
};
68+
const responseHeaders = {};
6869
if ( /^\{.*\}$/.test(responseType) ) {
6970
try {
7071
Object.entries(JSON.parse(responseType)).forEach(([ p, v ]) => {
72+
if ( p === 'headers' && trusted ) {
73+
Object.assign(responseHeaders, v);
74+
return;
75+
}
7176
if ( validResponseProps[p] === undefined ) { return; }
7277
if ( validResponseProps[p].includes(v) === false ) { return; }
7378
responseProps[p] = { value: v };
@@ -120,11 +125,11 @@ function preventFetchFn(
120125
}
121126
return Promise.resolve(generateContentFn(trusted, responseBody)).then(text => {
122127
safe.uboLog(logPrefix, `Prevented with response "${text}"`);
123-
const response = new Response(text, {
124-
headers: {
125-
'Content-Length': text.length,
126-
}
127-
});
128+
const headers = Object.assign({}, responseHeaders);
129+
if ( headers['content-length'] === undefined ) {
130+
headers['content-length'] = text.length;
131+
}
132+
const response = new Response(text, { headers });
128133
const props = Object.assign(
129134
{ url: { value: details.url } },
130135
responseProps

0 commit comments

Comments
 (0)