xiMatrix

filter net requests according to source, destination and type  https://addons.mozilla.org/firefox/addon/ximatrix/
git clone https://git.ce9e.org/xiMatrix.git

commit
c7a97c1aee1e445da2e6e5ff0f99b1501d2d13f0
parent
278c272b0ae3b9cd5e7c8f1af4e942e59a1aa219
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2022-11-27 09:50
store recording in local storage

Diffstat

M src/bg.js 43 +++++++++++++++++++++++--------------------

1 files changed, 23 insertions, 20 deletions


diff --git a/src/bg.js b/src/bg.js

@@ -3,10 +3,9 @@
    3     3 var STORAGE_DEFAULTS = {
    4     4     'rules': {},
    5     5     'requests': {},
   -1     6     'recording': true,
    6     7 };
    7     8 
    8    -1 var recording = false;
    9    -1 
   10     9 var getHostname = function(url) {
   11    10     var u = new URL(url);
   12    11     return u.hostname;
@@ -62,21 +61,22 @@ var restrictRules = function(rules, context) {
   62    61 };
   63    62 
   64    63 var pushRequest = function(tabId, hostname, type) {
   65    -1     if (!recording) {
   66    -1         return Promise.resolve();
   67    -1     }
   68    -1     return storageChange('requests', requests => {
   69    -1         if (!requests[tabId]) {
   70    -1             requests[tabId] = {};
   71    -1         }
   72    -1         if (!requests[tabId][hostname]) {
   73    -1             requests[tabId][hostname] = {};
   74    -1         }
   75    -1         if (!requests[tabId][hostname][type]) {
   76    -1             requests[tabId][hostname][type] = 0;
   -1    64     return storageGet('recording').then(recording => {
   -1    65         if (recording) {
   -1    66             return storageChange('requests', requests => {
   -1    67                 if (!requests[tabId]) {
   -1    68                     requests[tabId] = {};
   -1    69                 }
   -1    70                 if (!requests[tabId][hostname]) {
   -1    71                     requests[tabId][hostname] = {};
   -1    72                 }
   -1    73                 if (!requests[tabId][hostname][type]) {
   -1    74                     requests[tabId][hostname][type] = 0;
   -1    75                 }
   -1    76                 requests[tabId][hostname][type] += 1;
   -1    77                 return requests;
   -1    78             });
   77    79         }
   78    -1         requests[tabId][hostname][type] += 1;
   79    -1         return requests;
   80    80     });
   81    81 };
   82    82 
@@ -102,7 +102,8 @@ browser.runtime.onMessage.addListener((msg, sender) => {
  102   102             getCurrentTab(),
  103   103             storageGet('rules'),
  104   104             storageGet('requests'),
  105    -1         ]).then(([tab, rules, requests]) => {
   -1   105             storageGet('recording'),
   -1   106         ]).then(([tab, rules, requests, recording]) => {
  106   107             var context = msg.data || getHostname(tab.url);
  107   108             return {
  108   109                 context: context,
@@ -123,8 +124,7 @@ browser.runtime.onMessage.addListener((msg, sender) => {
  123   124     } else if (msg.type === 'securitypolicyviolation') {
  124   125         return pushRequest(sender.tab.id, 'inline', msg.data);
  125   126     } else if (msg.type === 'toggleRecording') {
  126    -1         recording = !recording;
  127    -1         return Promise.resolve(recording);
   -1   127         return storageChange('recording', recording => !recording);
  128   128     }
  129   129 });
  130   130 
@@ -162,7 +162,10 @@ browser.webRequest.onBeforeRequest.addListener(details => {
  162   162 }, {urls: ['<all_urls>']}, ['blocking']);
  163   163 
  164   164 browser.webRequest.onHeadersReceived.addListener(function(details) {
  165    -1     return storageGet('rules').then(rules => {
   -1   165     return Promise.all([
   -1   166         storageGet('rules'),
   -1   167         storageGet('recording'),
   -1   168     ]).then(([rules, recording]) => {
  166   169         var context = getHostname(details.url);
  167   170 
  168   171         var csp = (type, value) => {