From 4b83101ab9270a5403d66af4ebe08d251ac372ca Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sun, 20 Aug 2023 08:36:16 -0400 Subject: [PATCH] Fix/improve `xml-prune` scriptlet Related issue: https://github.com/uBlockOrigin/uAssets/issues/14849#issuecomment-1257094491 --- assets/resources/scriptlets.js | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index be09ee55a..7acf86e19 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -2580,18 +2580,29 @@ function xmlPrune( }; self.fetch = new Proxy(self.fetch, { apply: function(target, thisArg, args) { + const fetchPromise = Reflect.apply(target, thisArg, args); if ( reUrl.test(urlFromArg(args[0])) === false ) { - return Reflect.apply(target, thisArg, args); + return fetchPromise; } - return safe.fetch(...args).then(realResponse => - realResponse.text().then(text => - new Response(pruneFromText(text), { - status: realResponse.status, - statusText: realResponse.statusText, - headers: realResponse.headers, - }) - ) - ); + return fetchPromise.then(responseBefore => { + const response = responseBefore.clone(); + return response.text().then(text => { + const responseAfter = new Response(pruneFromText(text), { + status: responseBefore.status, + statusText: responseBefore.statusText, + headers: responseBefore.headers, + }); + Object.defineProperties(responseAfter, { + ok: { value: responseBefore.ok }, + redirected: { value: responseBefore.redirected }, + type: { value: responseBefore.type }, + url: { value: responseBefore.url }, + }); + return responseAfter; + }).catch(( ) => + responseBefore + ); + }); } }); self.XMLHttpRequest.prototype.open = new Proxy(self.XMLHttpRequest.prototype.open, {