summaryrefslogtreecommitdiff
path: root/data/extensions/jsr@javascriptrestrictor/background.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jsr@javascriptrestrictor/background.js')
-rw-r--r--data/extensions/jsr@javascriptrestrictor/background.js155
1 files changed, 0 insertions, 155 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/background.js b/data/extensions/jsr@javascriptrestrictor/background.js
deleted file mode 100644
index 12afcde..0000000
--- a/data/extensions/jsr@javascriptrestrictor/background.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/** \file
- * \brief Main background script
- *
- * \author Copyright (C) 2019 Libor Polcak
- * \author Copyright (C) 2019 Martin Timko
- * \author Copyright (C) 2023 Martin Zmitko
- *
- * \license SPDX-License-Identifier: GPL-3.0-or-later
- */
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <https://www.gnu.org/licenses/>.
-//
-
-// depends on /nscl/common/CachedStorage.js
-
-CachedStorage.init({
- tab_status: {},
- tab_urls: {},
-});
-
-function updateBadge(text, tabid) {
- actionApi.setBadgeText({text: text, tabId: tabid});
-}
-
-// get active tab and pass it
-var queryInfo = {
- active: true,
- currentWindow: true
-};
-
-// get level for updated tab
-function tabUpdate(tabid, changeInfo) {
- if (changeInfo.status === "loading") {
- delete tab_status[tabid];
- }
- var url = changeInfo["url"] || tab_urls[tabid];
- if (url === undefined) {
- return wrapping_groups.empty_level;
- }
- let current_level = getCurrentLevelJSON(url);
- tab_urls[tabid] = url;
- CachedStorage.save();
- return current_level;
-}
-// on tab reload or tab change, update metadata
-browser.tabs.onUpdated.addListener(tabUpdate); // reload tab
-
-const scriptSrcRegex = /script-src\s/;
-// Modify CSP headers to allow WASM execution in page context
-function cspRequestProcessor(details) {
- // Because this handler fires before configuration for the page is created,
- // we need to search for the configuration for that domain now.
- let subDomains = extractSubDomains(getEffectiveDomain(details.url));
- let found = false;
- for (let domain of subDomains.reverse()) {
- if (domain in domains) {
- found = true;
- if (domains[domain].wasm !== 2) {
- return {};
- }
- break;
- }
- }
- // If no configuration is found, use the default level.
- if (!found && default_level.wasm !== 2) {
- return {};
- }
-
- let modified = false;
- let headers = details.responseHeaders;
- for (let header of headers) {
- let name = header.name.toLowerCase();
- if (name !== "content-security-policy" &&
- name !== "content-security-policy-report-only" &&
- name !== "x-webkit-csp") {
- continue;
- }
- let origCSP = header.value;
- header.value = header.value.replace(scriptSrcRegex, "script-src 'wasm-unsafe-eval' ");
- if (origCSP !== header.value) {
- modified = true;
- }
- }
- return modified ? {responseHeaders: headers} : {};
-}
-// Attach listener only in chromium where the WASM module is instantiated directly in
-// page context, subject to the page's CSP. Code inserted as script tags isn't subject
-// to script-src origins, it is, however, subject to the 'unsafe' group of script evaluation rules.
-if (typeof browser_polyfill_used !== "undefined" && browser_polyfill_used) {
- try {
- browser.webRequest.onHeadersReceived.addListener(cspRequestProcessor,
- {urls: ["<all_urls>"],
- types: ["main_frame", "sub_frame"]},
- ["blocking", "responseHeaders"]
- );
- } catch (e) {
- console.error(e);
- // mv3, can't block!
- // TODO: check whether we can do something about this eiter with DNR or new scripting APIs
- }
-}
-
-// Communication channels
-
-/**
- * Create a port to popup window
- *
- * The communication cannels are mostly used because
- * browser.runtime.getBackgroundPage() does not work as expected. See
- * also https://bugzilla.mozilla.org/show_bug.cgi?id=1329304.
- */
-async function connected(port) {
- if (port.name === "port_from_popup") {
- let current_level = wrapping_groups.empty_level;
- try {
- // We always send back current level
- let [tab] = await browser.tabs.query(queryInfo);
- current_level = getCurrentLevelJSON(tab.url);
- } catch (e) {
- // Stick to the empty_level and ignore the exception
- }
- port.postMessage(current_level);
- port.onMessage.addListener(function(msg) {
- port.postMessage(current_level);
- });
- }
-}
-browser.runtime.onConnect.addListener(connected);
-
-/**
- * Listen to detected API calls and update badge accordingly
- */
-fpdObservable.add_observer({
- notify: function(api, tabid, type, count) {
- let group_name = wrapping_groups.wrapper_map[api];
- if (!group_name) {
- return; // The API does not belong to any group
- }
- let tab_stats = get_or_create(tab_status, tabid, {});
- tab_stats[group_name] = true;
- updateBadge(String(Object.keys(tab_stats).length), tabid);
- }
-});
-browser.tabs.onRemoved.addListener(tabid => delete tab_status[tabid]);