Ver código fonte

removed implementation based on window.fetch

Gildas 7 anos atrás
pai
commit
2c8de0aacc
2 arquivos alterados com 45 adições e 62 exclusões
  1. 45 55
      lib/fetch/content/fetch.js
  2. 0 7
      lib/single-file/single-file-browser.js

+ 45 - 55
lib/fetch/content/fetch.js

@@ -18,68 +18,58 @@
  *   along with SingleFile.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* global browser, fetch, XMLHttpRequest, XPCNativeWrapper, wrappedJSObject */
+/* global browser, XMLHttpRequest */
 
 this.superFetch = this.superFetch || (() => {
 
 	const superFetch = {
 		fetch: async url => {
-			try {
-				return await fetch(url, { mode: "cors", credentials: "include" });
-			} catch (error) {
-				const responseFetch = await sendMessage({ method: "fetch", url });
-				return {
-					headers: { get: headerName => responseFetch.headers[headerName] },
-					arrayBuffer: async () => {
-						const response = await sendMessage({ method: "fetch.array", requestId: responseFetch.responseId });
-						return new Uint8Array(response.array).buffer;
+			const xhrPromise = new Promise((resolve, reject) => {
+				const xhrRequest = new XMLHttpRequest();
+				let receivedResponse, receivedError, resolveResponse = response => receivedResponse = response, rejectResponse = error => receivedError = error;
+				xhrRequest.withCredentials = true;
+				xhrRequest.responseType = "arraybuffer";
+				xhrRequest.onerror = event => reject(new Error(event.details));
+				xhrRequest.onreadystatechange = () => {
+					if (xhrRequest.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+						const headers = new Map();
+						headers.set("content-type", xhrRequest.getResponseHeader("Content-Type"));
+						resolve({
+							headers, status: xhrRequest.status, arrayBuffer: () => new Promise((resolve, reject) => {
+								if (receivedError) {
+									reject(receivedError);
+								} else if (receivedResponse) {
+									resolve(receivedResponse);
+								} else {
+									[resolveResponse, rejectResponse] = [resolve, reject];
+								}
+							})
+						});
+					}
+					if (xhrRequest.readyState == XMLHttpRequest.DONE) {
+						resolveResponse(xhrRequest.response);
 					}
 				};
-			}
-		}
-	};
-	superFetch.hostFetch = async url => {
-		const xhrPromise = new Promise((resolve, reject) => {
-			const xhrRequest = new XMLHttpRequest();
-			let receivedResponse, receivedError;
-			let resolveResponse = response => receivedResponse = response;
-			let rejectResponse = error => receivedError = error;
-			xhrRequest.withCredentials = true;
-			xhrRequest.responseType = "arraybuffer";
-			xhrRequest.onerror = event => reject(new Error(event.details));
-			xhrRequest.onreadystatechange = () => {
-				if (xhrRequest.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
-					const headers = new Map();
-					headers.set("content-type", xhrRequest.getResponseHeader("Content-Type"));
-					resolve({
-						headers, status: xhrRequest.status, arrayBuffer: () => new Promise((resolve, reject) => {
-							if (receivedError) {
-								reject(receivedError);
-							} else if (receivedResponse) {
-								resolve(receivedResponse);
-							} else {
-								[resolveResponse, rejectResponse] = [resolve, reject];
-							}
-						})
-					});
-				}
-				if (xhrRequest.readyState == XMLHttpRequest.DONE) {
-					resolveResponse(xhrRequest.response);
-				}
-			};
-			xhrRequest.onerror = error => {
-				reject(error);
-				if (rejectResponse) {
-					rejectResponse(error);
-				}
-			};
-			xhrRequest.open("GET", url, true);
-			xhrRequest.send();
-		});
-		if (typeof XPCNativeWrapper != "undefined" && typeof wrappedJSObject != "undefined") {
-			return xhrPromise.catch(() => XPCNativeWrapper(wrappedJSObject.fetch)(url, { mode: "cors", credentials: "include" }));
-		} else {
-			return xhrPromise;
+				xhrRequest.onerror = error => {
+					reject(error);
+					if (rejectResponse) {
+						rejectResponse(error);
+					}
+				};
+				xhrRequest.open("GET", url, true);
+				xhrRequest.send();
+			});
+			return xhrPromise
+				.catch(async () => {
+					const responseFetch = await sendMessage({ method: "fetch", url });
+					return {
+						headers: { get: headerName => responseFetch.headers[headerName] },
+						arrayBuffer: async () => {
+							const response = await sendMessage({ method: "fetch.array", requestId: responseFetch.responseId });
+							return new Uint8Array(response.array).buffer;
+						}
+					};
+				});
 		}
 	};
 	return superFetch;

+ 0 - 7
lib/single-file/single-file-browser.js

@@ -67,13 +67,6 @@ this.SingleFile = this.SingleFile || (() => {
 			} catch (error) {
 				return options && options.asDataURI ? "data:base64," : "";
 			}
-			if (resourceContent.status >= 400 && superFetch.hostFetch) {
-				try {
-					resourceContent = await superFetch.hostFetch(resourceURL);
-				} catch (error) {
-					return options && options.asDataURI ? "data:base64," : "";
-				}
-			}
 			if (resourceContent.status >= 400) {
 				return options && options.asDataURI ? "data:base64," : "";
 			}