Skip to content

Commit 53d60ac

Browse files
committed
Improve m3u-prune scriptlet
Related feedback: uBlockOrigin/uAssets#30633 (comment)
1 parent b0d5116 commit 53d60ac

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

src/js/resources/scriptlets.js

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,7 @@ builtinScriptlets.push({
15891589
name: 'm3u-prune.js',
15901590
fn: m3uPrune,
15911591
dependencies: [
1592+
'proxy-apply.fn',
15921593
'safe-self.fn',
15931594
],
15941595
});
@@ -1704,28 +1705,30 @@ function m3uPrune(
17041705
if ( arg instanceof Request ) { return arg.url; }
17051706
return String(arg);
17061707
};
1707-
const realFetch = self.fetch;
1708-
self.fetch = new Proxy(self.fetch, {
1709-
apply: function(target, thisArg, args) {
1710-
if ( reUrl.test(urlFromArg(args[0])) === false ) {
1711-
return Reflect.apply(target, thisArg, args);
1712-
}
1713-
return realFetch(...args).then(realResponse =>
1714-
realResponse.text().then(text => {
1715-
const response = new Response(pruner(text), {
1716-
status: realResponse.status,
1717-
statusText: realResponse.statusText,
1718-
headers: realResponse.headers,
1719-
});
1720-
if ( toLog.length !== 0 ) {
1721-
toLog.unshift(logPrefix);
1722-
safe.uboLog(toLog.join('\n'));
1723-
}
1724-
return response;
1725-
})
1726-
);
1708+
proxyApplyFn('fetch', async function fetch(context) {
1709+
const args = context.callArgs;
1710+
const fetchPromise = context.reflect();
1711+
if ( reUrl.test(urlFromArg(args[0])) === false ) { return fetchPromise; }
1712+
const responseBefore = await fetchPromise;
1713+
const responseClone = responseBefore.clone();
1714+
const textBefore = await responseClone.text();
1715+
const textAfter = pruner(textBefore);
1716+
if ( textAfter === textBefore ) { return responseBefore; }
1717+
const responseAfter = new Response(textAfter, {
1718+
status: responseBefore.status,
1719+
statusText: responseBefore.statusText,
1720+
headers: responseBefore.headers,
1721+
});
1722+
Object.defineProperties(responseAfter, {
1723+
url: { value: responseBefore.url },
1724+
type: { value: responseBefore.type },
1725+
});
1726+
if ( toLog.length !== 0 ) {
1727+
toLog.unshift(logPrefix);
1728+
safe.uboLog(toLog.join('\n'));
17271729
}
1728-
});
1730+
return responseAfter;
1731+
})
17291732
self.XMLHttpRequest.prototype.open = new Proxy(self.XMLHttpRequest.prototype.open, {
17301733
apply: async (target, thisArg, args) => {
17311734
if ( reUrl.test(urlFromArg(args[1])) === false ) {

0 commit comments

Comments
 (0)