- 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 23 -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',