Explorar o código

added referrerPolicy option

Former-commit-id: e7e881d9c7738edd2cca429fddc1d9de0e6d9276
Gildas %!s(int64=6) %!d(string=hai) anos
pai
achega
7766117d1b

+ 2 - 1
extension/core/bg/config.js

@@ -72,7 +72,8 @@ singlefile.extension.core.bg.config = (() => {
 		removeAlternativeImages: true,
 		groupDuplicateImages: true,
 		saveRawPage: false,
-		saveToClipboard: false
+		saveToClipboard: false,
+		referrerPolicy: "origin-when-cross-origin"
 	};
 
 	let pendingUpgradePromise = upgrade();

+ 9 - 9
lib/fetch/content/content-fetch-resources.js

@@ -26,23 +26,23 @@
 this.singlefile.lib.fetch.content.resources = this.singlefile.lib.fetch.content.resources || (() => {
 
 	return {
-		fetch: async url => {
+		fetch: async (url, options = {}) => {
+			if (!options.referrerPolicy) {
+				options.referrerPolicy = "origin-when-cross-origin";
+			}
 			try {
-				let response = await fetch(url, { cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
-				if (response.status == 403) {
-					response = await fetch(url, { credentials: "same-origin", cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
-				}
+				let response = await fetch(url, { cache: "force-cache" });
 				if (response.status == 403) {
-					response = await fetch(url, { credentials: "include", cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
+					response = await fetch(url, { credentials: "same-origin", cache: "force-cache", referrerPolicy: options.referrerPolicy });
 				}
 				if (response.status == 403) {
-					response = await fetch(url, { mode: "cors", credentials: "omit", cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
+					response = await fetch(url, { credentials: "include", cache: "force-cache", referrerPolicy: options.referrerPolicy });
 				}
 				if (response.status == 403) {
-					response = await fetch(url, { mode: "cors", credentials: "same-origin", cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
+					response = await fetch(url, { mode: "cors", credentials: "same-origin", cache: "force-cache", referrerPolicy: options.referrerPolicy });
 				}
 				if (response.status == 403) {
-					response = await fetch(url, { mode: "cors", credentials: "include", cache: "force-cache", referrerPolicy: "origin-when-cross-origin" });
+					response = await fetch(url, { mode: "cors", credentials: "include", cache: "force-cache", referrerPolicy: options.referrerPolicy });
 				}
 				if (response.status == 403) {
 					response = await xhrFetch(url);

+ 40 - 8
lib/single-file/single-file-core.js

@@ -305,7 +305,12 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 				const resourceRequests = this.requests.get(requestKey);
 				this.requests.delete(requestKey);
 				try {
-					const content = await util.getContent(resourceURL, { asDataURI, maxResourceSize: options.maxResourceSize, maxResourceSizeEnabled: options.maxResourceSizeEnabled });
+					const content = await util.getContent(resourceURL, {
+						asDataURI,
+						maxResourceSize: options.maxResourceSize,
+						maxResourceSizeEnabled: options.maxResourceSizeEnabled,
+						referrerPolicy: options.referrerPolicy
+					});
 					indexResource = indexResource + 1;
 					onloadListener({ url: resourceURL });
 					resourceRequests.forEach(callbacks => {
@@ -364,7 +369,13 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 		async loadPage(pageContent, charset) {
 			let content;
 			if (!pageContent || this.options.saveRawPage) {
-				content = await util.getContent(this.baseURI, { asDataURI: false, maxResourceSize: this.options.maxResourceSize, maxResourceSizeEnabled: this.options.maxResourceSizeEnabled, charset });
+				content = await util.getContent(this.baseURI, {
+					asDataURI: false,
+					maxResourceSize: this.options.maxResourceSize,
+					maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
+					charset,
+					referrerPolicy: this.options.referrerPolicy
+				});
 				pageContent = content.data;
 			}
 			this.doc = util.parseDocContent(pageContent, this.baseURI);
@@ -830,7 +841,13 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 					if (element.closest("[" + SHADOW_MODE_ATTRIBUTE_NAME + "]")) {
 						stylesheetInfo.scoped = true;
 					}
-					const options = { maxResourceSize: this.options.maxResourceSize, maxResourceSizeEnabled: this.options.maxResourceSizeEnabled, url: this.options.url, charset: this.charset, compressCSS: this.options.compressCSS };
+					const options = {
+						maxResourceSize: this.options.maxResourceSize,
+						maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
+						url: this.options.url,
+						charset: this.charset,
+						compressCSS: this.options.compressCSS
+					};
 					let stylesheetContent;
 					if (element.tagName.toLowerCase() == "link") {
 						if (element.charset) {
@@ -1063,7 +1080,12 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 				}
 				if (Util.testValidURL(resourceURL)) {
 					this.stats.add("processed", "scripts", 1);
-					const content = await util.getContent(resourceURL, { asDataURI: true, maxResourceSize: this.options.maxResourceSize, maxResourceSizeEnabled: this.options.maxResourceSizeEnabled });
+					const content = await util.getContent(resourceURL, {
+						asDataURI: true,
+						maxResourceSize: this.options.maxResourceSize,
+						maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
+						referrerPolicy: this.options.referrerPolicy
+					});
 					scriptElement.setAttribute("src", content.data);
 				}
 			}));
@@ -1336,8 +1358,13 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 							// ignored
 						}
 						if (Util.testValidURL(resourceURL)) {
-							const downloadOptions = { asDataURI: false, maxResourceSize: options.maxResourceSize, maxResourceSizeEnabled: options.maxResourceSizeEnabled, validateTextContentType: true };
-							const content = await util.getContent(resourceURL, downloadOptions);
+							const content = await util.getContent(resourceURL, {
+								asDataURI: false,
+								maxResourceSize: options.maxResourceSize,
+								maxResourceSizeEnabled: options.maxResourceSizeEnabled,
+								validateTextContentType: true,
+								referrerPolicy: options.referrerPolicy
+							});
 							resourceURL = content.resourceURL;
 							let importedStylesheetContent = Util.removeCssComments(content.data);
 							if (options.compressCSS) {
@@ -1400,8 +1427,13 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 		static async resolveLinkStylesheetURLs(resourceURL, baseURI, options, workStylesheet) {
 			resourceURL = Util.normalizeURL(resourceURL);
 			if (resourceURL && resourceURL != baseURI && resourceURL != ABOUT_BLANK_URI) {
-				const downloadOptions = { asDataURI: false, maxResourceSize: options.maxResourceSize, maxResourceSizeEnabled: options.maxResourceSizeEnabled, charset: options.charset };
-				const content = await util.getContent(resourceURL, downloadOptions);
+				const content = await util.getContent(resourceURL, {
+					asDataURI: false,
+					maxResourceSize: options.maxResourceSize,
+					maxResourceSizeEnabled: options.maxResourceSizeEnabled,
+					charset: options.charset,
+					referrerPolicy: options.referrerPolicy
+				});
 				resourceURL = content.resourceURL;
 				let stylesheetContent = Util.removeCssComments(content.data);
 				if (options.compressCSS) {

+ 1 - 1
lib/single-file/single-file-util.js

@@ -168,7 +168,7 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 					log("  // STARTED download url =", resourceURL, "asDataURI =", options.asDataURI);
 				}
 				try {
-					resourceContent = await util.getResourceContent(resourceURL, options);
+					resourceContent = await util.getResourceContent(resourceURL, { referrerPolicy: options.referrerPolicy });
 				} catch (error) {
 					return { data: options.asDataURI ? "data:base64," : "", resourceURL };
 				}

+ 2 - 2
lib/single-file/single-file.js

@@ -61,8 +61,8 @@ this.singlefile.lib.SingleFile = this.singlefile.lib.SingleFile || (() => {
 		getClass: () => SingleFile
 	};
 
-	async function getResourceContent(resourceURL) {
-		const resourceContent = await fetchResource(resourceURL);
+	async function getResourceContent(resourceURL, options) {
+		const resourceContent = await fetchResource(resourceURL, { referrerPolicy: options.referrerPolicy });
 		const buffer = await resourceContent.arrayBuffer();
 		return {
 			getUrl() {