aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-09-27 11:58:12 +1000
committerYuchen Pei <hi@ypei.me>2022-09-27 11:59:00 +1000
commitad1a6ea51386feccfb1da0bc0fc4f5ace101b71b (patch)
treef8bd240e8ed7166f4b12297f7110036db0240f1b
parent2424408902a4d073e4addd758201bd31963d86c7 (diff)
A better fix for bugs #58131
-rw-r--r--bg/ResponseProcessor.js4
-rw-r--r--main_background.js29
2 files changed, 19 insertions, 14 deletions
diff --git a/bg/ResponseProcessor.js b/bg/ResponseProcessor.js
index 922ff19..3c90d9c 100644
--- a/bg/ResponseProcessor.js
+++ b/bg/ResponseProcessor.js
@@ -83,6 +83,8 @@ class ResponseTextFilter {
if (res) return res;
const { requestId } = request;
+ // create a filter to modify response data, see
+ // Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData
const filter = browser.webRequest.filterResponseData(requestId);
let buffer = [];
@@ -118,7 +120,7 @@ class ResponseTextFilter {
} catch (e) {
console.error(e);
}
- if (editedText !== null && editedText.indexOf('/* LibreJS: script accepted') !== 0) {
+ if (editedText !== null && editedText !== response.text) {
// we changed the content, let's re-encode
const encoded = new TextEncoder().encode(editedText);
// pre-pending the UTF-8 BOM will force the charset per HTML 5 specs
diff --git a/main_background.js b/main_background.js
index f947657..49815d5 100644
--- a/main_background.js
+++ b/main_background.js
@@ -378,10 +378,11 @@ async function onTabActivated({ tabId }) {
/**
* Checks script and updates the report entry accordingly.
*
- * Asynchronous function, returns the final edited script as a
- * string.
+ * Asynchronous function, returns the final edited script as a string,
+ * or unedited script if passAccWlist is true and the script is
+ * accepted or whitelisted.
*/
-async function checkScriptAndUpdateReport(scriptSrc, url, tabId, whitelisted, isExternal = false) {
+async function checkScriptAndUpdateReport(scriptSrc, url, tabId, whitelisted, isExternal = false, passAccWlist = false) {
const scriptName = url.split('/').pop();
if (whitelisted) {
if (tabId !== -1) {
@@ -392,7 +393,7 @@ async function checkScriptAndUpdateReport(scriptSrc, url, tabId, whitelisted, is
: 'Address whitelisted by user';
addReportEntry(tabId, { 'whitelisted': [site || url, reason], url });
}
- if (scriptSrc.startsWith('javascript:'))
+ if (scriptSrc.startsWith('javascript:') || passAccWlist)
return scriptSrc;
else
return `/* LibreJS: script whitelisted by user preference. */\n${scriptSrc}`;
@@ -414,15 +415,17 @@ async function checkScriptAndUpdateReport(scriptSrc, url, tabId, whitelisted, is
return scriptSrc.startsWith('javascript:')
? `javascript:void(${encodeURIComponent(edited)})` : edited;
}
- case 'whitelisted': {
- return scriptSrc.startsWith('javascript:')
- ? scriptSrc : `/* LibreJS: script ${actionType} by user. */\n${scriptSrc}`;
- }
+ case 'whitelisted':
+ case 'accepted':
+ {
+ return (scriptSrc.startsWith('javascript:') || passAccWlist)
+ ? scriptSrc : `/* LibreJS: script ${actionType} by user. */\n${scriptSrc}`;
+ }
+ // blocked
default: {
- const scriptSource = accepted ? scriptSrc : editedSource;
return scriptSrc.startsWith('javascript:')
- ? (accepted ? scriptSource : `javascript:void(/* ${scriptSource} */)`)
- : `/* LibreJS: script ${actionType}. */\n${scriptSource}`;
+ ? `javascript:void(/* ${editedSource} */)`
+ : `/* LibreJS: script ${actionType}. */\n${editedSource}`;
}
}
}
@@ -472,7 +475,7 @@ async function blockBlacklistedScripts(request) {
* and external script inclusions in search of non-free JavaScript
*/
-var ResponseHandler = {
+const ResponseHandler = {
/**
* Enforce white/black lists for url/site early (hashes will be handled later)
*/
@@ -554,7 +557,7 @@ var ResponseHandler = {
async function handleScript(response, whitelisted) {
const { text, request } = response;
const { url, tabId } = request;
- return await checkScriptAndUpdateReport(text, ListStore.urlItem(url), tabId, whitelisted, isExternal = true);
+ return await checkScriptAndUpdateReport(text, ListStore.urlItem(url), tabId, whitelisted, isExternal = true, passAccWlist = true);
}
/**