aboutsummaryrefslogtreecommitdiff
/**
 * 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"]
);