summaryrefslogtreecommitdiff
path: root/data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js')
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js74
1 files changed, 42 insertions, 32 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js
index 600a501..f59eed8 100644
--- a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/content/externalLicenseChecker.js
@@ -2,6 +2,7 @@
* GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
*
* Copyright (C) 2018 Giorgio Maone <giorgio@maone.net>
+* Copyright (C) 2022 Yuchen Pei <id@ypei.org>
*
* This file is part of GNU LibreJS.
*
@@ -20,38 +21,42 @@
*/
"use strict";
{
- let licensedScripts = null;
-
- let fetchWebLabels = async args => {
- // see https://www.gnu.org/software/librejs/free-your-javascript.html#step3
- let { map, cache } = args;
- let link = document.querySelector(`link[rel="jslicense"], link[data-jslicense="1"], a[rel="jslicense"], a[data-jslicense="1"]`);
- let baseURL = link ? link.href : cache.webLabels && new URL(cache.webLabels.href, document.baseURI);
- if (baseURL) try {
- let response = await fetch(baseURL);
+ // 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 => {
+ const { map, cache } = args;
+ const link = document.querySelector(`link[rel="jslicense"], link[data-jslicense="1"], a[rel="jslicense"], a[data-jslicense="1"]`);
+ const webLabelsUrl = link ? link.href : cache.webLabels && new URL(cache.webLabels.href, document.baseURI);
+ if (webLabelsUrl) try {
+ const response = await fetch(webLabelsUrl);
if (!response.ok) throw `${response.status} ${response.statusText}`;
- let doc = new DOMParser().parseFromString(
+ const doc = new DOMParser().parseFromString(
await response.text(),
- "text/html"
+ 'text/html'
);
- let base = doc.querySelector("base");
- if (base) {
- base.href = base.href;
- } else {
- doc.head.appendChild(doc.createElement("base")).href = baseURL;
+ // Sets the base url to be the url of the weblabel page if it
+ // does not exist. Otherwise relative links on the weblabels
+ // page will use the base of the current page.
+ if (!doc.querySelector("base")) {
+ doc.head.appendChild(doc.createElement("base")).href = webLabelsUrl;
}
- let link = a => ({ url: a.href, label: a.textContent });
- let firstLink = parent => link(parent.querySelector("a"));
- let allLinks = parent => Array.prototype.map.call(parent.querySelectorAll("a"), link);
- for (let row of doc.querySelectorAll("table#jslicense-labels1 > tbody > tr")) {
+ const link = a => ({ url: a.href, label: a.textContent });
+ const firstLink = parent => link(parent.querySelector("a"));
+ const allLinks = parent => Array.prototype.map.call(parent.querySelectorAll("a"), link);
+ for (const row of doc.querySelectorAll("table#jslicense-labels1 > tbody > tr")) {
try {
- let cols = row.querySelectorAll("td");
- let script = firstLink(cols[0]);
- let licenseLinks = allLinks(cols[1]);
- let sources = cols[2] ? allLinks(cols[2]) : [];
+ const cols = row.querySelectorAll("td");
+ const script = firstLink(cols[0]);
+ const licenseLinks = allLinks(cols[1]);
+ const sources = cols[2] ? allLinks(cols[2]) : [];
map.set(script.url, { script, licenseLinks, sources });
} catch (e) {
- console.error("LibreJS: error parsing Web Labels at %s, row %s", baseURL, row.innerHTML, e);
+ console.error("LibreJS: error parsing Web Labels at %s, row %s", webLabelsUrl, row.innerHTML, e);
}
}
} catch (e) {
@@ -60,9 +65,9 @@
return map;
}
- let fetchLicenseInfo = async cache => {
- let map = new Map();
- let args = { map, cache };
+ const fetchLicenseInfo = async cache => {
+ const map = new Map();
+ const args = { map, cache };
// in the fetchXxx methods we add to a map whatever license(s)
// URLs and source code references we can find in various formats
// (WebLabels is currently the only implementation), keyed by script URLs.
@@ -75,10 +80,15 @@
return map;
}
- let handlers = {
+ 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) {
- let { url, cache } = m;
- if (!licensedScripts) licensedScripts = await fetchLicenseInfo(cache);
+ const { url, cache } = m;
+ const licensedScripts = await fetchLicenseInfo(cache);
return licensedScripts.get(url) || licensedScripts.get(url.replace(/\?.*/, ''));
}
}
@@ -86,7 +96,7 @@
browser.runtime.onMessage.addListener(async m => {
if (m.action in handlers) try {
debug("Received message", m);
- let result = await handlers[m.action](m);
+ const result = await handlers[m.action](m);
return result;
} catch (e) {
console.error(e);