/**
* SPDX-License-Identifier: CC0-1.0
*
* Copyright (C) 2025 Woj. Kosior <koszko@koszko.org>
*/
const jsBlockUrls = [];
const jsAndCssBlockUrls = [];
const jsBlockHeaderTests = [];
const cookieHeaderRegex = /^set-cookie$/;
function blockJsOnUrl() {
jsBlockUrls.push(...arguments);
}
function blockJsAndCssOnUrl() {
jsAndCssBlockUrls.push(...arguments);
}
function blockJsOnCookie() {
for (const cookieValueRegex of arguments)
jsBlockHeaderTests.push([cookieHeaderRegex, cookieValueRegex]);
}
function blockJsOnHeader(headerRegex, valueRegex) {
jsBlockHeaderTests.push([headerRegex, valueRegex]);
}
$contentScriptsBgCode$;
function blockScripts(details) {
return {
responseHeaders: [
...details.responseHeaders,
{
name: "Content-Security-Policy",
value: "script-src 'none';"
}
]
};
}
browser.webRequest.onHeadersReceived.addListener(
blockScripts,
{
urls: jsBlockUrls,
types: ["main_frame", "sub_frame"]
},
["blocking", "responseHeaders"]
);
function blockScriptsAndStyles(details) {
return {
responseHeaders: [
...details.responseHeaders,
{
name: "Content-Security-Policy",
value: "script-src 'none'; style-src 'none';"
}
]
};
}
browser.webRequest.onHeadersReceived.addListener(
blockScriptsAndStyles,
{
urls: jsAndCssBlockUrls,
types: ["main_frame", "sub_frame"]
},
["blocking", "responseHeaders"]
);
function blockScriptsOnCookies(details) {
console.log("cookie inspector", details);
for (const header of details.responseHeaders) {
for (const [headerRegex, valueRegex] of jsBlockHeaderTests) {
if (headerRegex.test(header.name) &&
valueRegex.test(header.value)) {
return {
responseHeaders: [
...details.responseHeaders,
{
name: "Content-Security-Policy",
value: "script-src 'none';"
}
]
};
}
}
}
}
browser.webRequest.onHeadersReceived.addListener(
blockScriptsOnCookies,
{
urls: ["<all_urls>"],
types: ["main_frame", "sub_frame"]
},
["blocking", "responseHeaders"]
);