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
1c4b122472ad89ddedec127fd78bc982174d5107
parent
027c3761397fcbdb5e3b73d0116a60f3572da13e
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-05-18 14:40
Merge branch 'cookies'

Diffstat

M src/bg.js 37 ++++++++++++++++++++++++-------------
M src/shared.js 2 +-

2 files changed, 25 insertions, 14 deletions


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

@@ -167,12 +167,8 @@ browser.webNavigation.onBeforeNavigate.addListener(details => {
  167   167     }
  168   168 });
  169   169 
  170    -1 browser.webRequest.onBeforeRequest.addListener(details => {
  171    -1     if (details.type === 'main_frame') {
  172    -1         return;
  173    -1     }
  174    -1 
  175    -1     var context = getHostname(details.documentUrl);
   -1   170 browser.webRequest.onBeforeSendHeaders.addListener(details => {
   -1   171     var context = getHostname(details.documentUrl || details.url);
  176   172     if (details.frameAncestors.length) {
  177   173         var last = details.frameAncestors.length - 1;
  178   174         context = getHostname(details.frameAncestors[last].url);
@@ -180,11 +176,21 @@ browser.webRequest.onBeforeRequest.addListener(details => {
  180   176     var hostname = getHostname(details.url);
  181   177     var type = shared.TYPE_MAP[details.type] || 'other';
  182   178 
   -1   179     let isCookie = h => h.name.toLowerCase() === 'cookie';
   -1   180     var cookiePromise = Promise.resolve();
   -1   181     if (details.requestHeaders.some(isCookie)) {
   -1   182         cookiePromise = pushRequest(details.tabId, hostname, 'cookie');
   -1   183     }
   -1   184 
  183   185     return Promise.all([
  184   186         pushRequest(details.tabId, hostname, type),
   -1   187         cookiePromise,
  185   188         getRules(context),
  186    -1     ]).then(([_, rules]) => {
  187    -1         if (!shared.shouldAllow(rules, context, hostname, type)) {
   -1   189     ]).then(([_, _2, rules]) => {
   -1   190         if (
   -1   191             details.type !== 'main_frame'
   -1   192             && !shared.shouldAllow(rules, context, hostname, type)
   -1   193         ) {
  188   194             if (details.type === 'sub_frame') {
  189   195                 // this can in turn be blocked by a local CSP
  190   196                 return {redirectUrl: 'data:,' + encodeURIComponent(details.url)};
@@ -192,10 +198,17 @@ browser.webRequest.onBeforeRequest.addListener(details => {
  192   198                 return {cancel: true};
  193   199             }
  194   200         }
   -1   201 
   -1   202         if (shared.shouldAllow(rules, context, hostname, 'cookie')) {
   -1   203             return {requestHeaders: details.requestHeaders};
   -1   204         } else {
   -1   205             var filtered = details.requestHeaders.filter(h => !isCookie(h));
   -1   206             return {requestHeaders: filtered};
   -1   207         }
  195   208     });
  196    -1 }, {urls: ['<all_urls>']}, ['blocking']);
   -1   209 }, {urls: ['<all_urls>']}, ['blocking', 'requestHeaders']);
  197   210 
  198    -1 browser.webRequest.onHeadersReceived.addListener(function(details) {
   -1   211 browser.webRequest.onHeadersReceived.addListener(details => {
  199   212     var context = getHostname(details.url);
  200   213     return Promise.all([
  201   214         getRules(context),
@@ -220,9 +233,7 @@ browser.webRequest.onHeadersReceived.addListener(function(details) {
  220   233         csp('script', "script-src 'self' *");
  221   234         csp('media', "img-src 'self' *");
  222   235 
  223    -1         return {
  224    -1             responseHeaders: details.responseHeaders,
  225    -1         };
   -1   236         return {responseHeaders: details.responseHeaders};
  226   237     });
  227   238 }, {
  228   239     urls: ['<all_urls>'],

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

@@ -1,6 +1,6 @@
    1     1 var shared = {};
    2     2 
    3    -1 shared.TYPES = ['font', 'css', 'media', 'script', 'xhr', 'frame', 'other'];
   -1     3 shared.TYPES = ['cookie', 'font', 'css', 'media', 'script', 'xhr', 'frame', 'other'];
    4     4 shared.TYPE_MAP = {
    5     5     'stylesheet': 'css',
    6     6     'font': 'font',