From 60e15cb6e16637e1f05c349a54692b243f745cdb Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 24 Oct 2025 12:26:37 -0400 Subject: [PATCH] Improve `prevent-fetch` scriptlet Related issue: https://github.com/uBlockOrigin/uBlock-issues/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"}}') --- src/js/resources/prevent-fetch.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/js/resources/prevent-fetch.js b/src/js/resources/prevent-fetch.js index cfd66c0ac..ba2565a69 100644 --- a/src/js/resources/prevent-fetch.js +++ b/src/js/resources/prevent-fetch.js @@ -65,9 +65,14 @@ function preventFetchFn( const responseProps = { statusText: { value: 'OK' }, }; + const responseHeaders = {}; if ( /^\{.*\}$/.test(responseType) ) { try { Object.entries(JSON.parse(responseType)).forEach(([ p, v ]) => { + if ( p === 'headers' && trusted ) { + Object.assign(responseHeaders, v); + return; + } if ( validResponseProps[p] === undefined ) { return; } if ( validResponseProps[p].includes(v) === false ) { return; } responseProps[p] = { value: v }; @@ -120,11 +125,11 @@ function preventFetchFn( } return Promise.resolve(generateContentFn(trusted, responseBody)).then(text => { safe.uboLog(logPrefix, `Prevented with response "${text}"`); - const response = new Response(text, { - headers: { - 'Content-Length': text.length, - } - }); + const headers = Object.assign({}, responseHeaders); + if ( headers['content-length'] === undefined ) { + headers['content-length'] = text.length; + } + const response = new Response(text, { headers }); const props = Object.assign( { url: { value: details.url } }, responseProps