aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-09-22 12:54:07 +1000
committerYuchen Pei <hi@ypei.me>2022-09-22 12:54:07 +1000
commitaf903283f05e628ca2e25dfb8e2745baee945b7f (patch)
treef7eb4df454bf61d4299cde47e05daaa9d95f3301
parentd3d4a8675626671f728ba64a6f85ef07d377c521 (diff)
clean up external license checking a bit
-rw-r--r--bg/ExternalLicenses.js7
-rw-r--r--content/externalLicenseChecker.js13
-rw-r--r--main_background.js5
3 files changed, 17 insertions, 8 deletions
diff --git a/bg/ExternalLicenses.js b/bg/ExternalLicenses.js
index 1196602..01894b1 100644
--- a/bg/ExternalLicenses.js
+++ b/bg/ExternalLicenses.js
@@ -48,6 +48,7 @@ const ExternalLicenses = {
cachedHrefs.delete(tabId);
},
+ // Checks external script using web labels
async check(script) {
const { url, tabId, frameId, documentUrl } = script;
const tabCache = cachedHrefs.get(tabId);
@@ -69,12 +70,6 @@ const ExternalLicenses = {
licensesByLabel.get(uLabel.replace(/^GNU-|-(?:OR-LATER|ONLY)$/, ''));
return license ? [license] : [];
}).flat());
- scriptInfo.toString = () => {
- const licenseIds = [...this.licenses].map(l => l.identifier).sort().join(', ');
- return licenseIds
- ? `Free license${this.licenses.size > 1 ? 's' : ''} (${licenseIds})`
- : 'Unknown license(s)';
- }
scriptInfo.free = scriptInfo.licenses.size > 0;
return scriptInfo;
},
diff --git a/content/externalLicenseChecker.js b/content/externalLicenseChecker.js
index 70a763c..91377b3 100644
--- a/content/externalLicenseChecker.js
+++ b/content/externalLicenseChecker.js
@@ -21,8 +21,14 @@
*/
"use strict";
{
+ // Find and fetch the url to the web labels table, and returns the
+ // license info in the table as a map from the script url to
+ // { script: {url, label},
+ // licenseLinks: [{url, label}],
+ // sources: [{url, label}] }
+ //
+ // see https://www.gnu.org/software/librejs/free-your-javascript.html#step3
const fetchWebLabels = async args => {
- // see https://www.gnu.org/software/librejs/free-your-javascript.html#step3
const { map, cache } = args;
const link = document.querySelector(`link[rel="jslicense"], link[data-jslicense="1"], a[rel="jslicense"], a[data-jslicense="1"]`);
const baseURL = link ? link.href : cache.webLabels && new URL(cache.webLabels.href, document.baseURI);
@@ -69,6 +75,11 @@
}
const handlers = {
+ // Look up the script url in the web labels and return it if found,
+ // otherwise return undefined. The found value is of the format
+ // { script: {url, label},
+ // licenseLinks: [{url, label}],
+ // sources: [{url, label}] }
async checkLicensedScript(m) {
const { url, cache } = m;
const licensedScripts = await fetchLicenseInfo(cache);
diff --git a/main_background.js b/main_background.js
index 4f164f4..c9ed6f2 100644
--- a/main_background.js
+++ b/main_background.js
@@ -858,7 +858,10 @@ var ResponseHandler = {
const scriptInfo = await ExternalLicenses.check({ url: fullUrl, tabId, frameId, documentUrl });
if (scriptInfo) {
const [verdict, ret] = scriptInfo.free ? ['accepted', ResponseProcessor.ACCEPT] : ['blocked', ResponseProcessor.REJECT];
- const msg = scriptInfo.toString();
+ const licenseIds = [...scriptInfo.licenses].map(l => l.identifier).sort().join(', ');
+ const msg = licenseIds
+ ? `Free license${scriptInfo.licenses.size > 1 ? 's' : ''} (${licenseIds})`
+ : 'Unknown license(s)';
addReportEntry(tabId, { url, [verdict]: [url, msg] });
return ret;
}