Просмотр исходного кода

fixed issue when saving multiple tabs in parallel

Gildas 7 лет назад
Родитель
Сommit
f9a71d80e7
2 измененных файлов с 11 добавлено и 13 удалено
  1. 8 4
      extension/core/scripts/bg/fetch.js
  2. 3 9
      extension/core/scripts/content/fetch.js

+ 8 - 4
extension/core/scripts/bg/fetch.js

@@ -24,6 +24,8 @@
 
 	const fetchResponses = new Map();
 
+	let requestId = 1;
+
 	chrome.runtime.onMessage.addListener((request, sender, send) => {
 
 		function sendResponse(response) {
@@ -33,20 +35,22 @@
 			send(response);
 		}
 
-		function sendFetchResponse(requestId, response) {
-			fetchResponses.set(requestId, response);
+		function sendFetchResponse(responseId, response) {
+			fetchResponses.set(responseId, response);
 			const headers = {};
 			for (let headerName of response.headers.keys()) {
 				headers[headerName] = response.headers.get(headerName);
 			}
-			sendResponse({ requestId, headers });
+			sendResponse({ responseId, headers });
 		}
 
 		if (request.method) {
 			if (request.method == "fetch") {
+				const responseId = requestId;
 				fetch(request.url, request.options)
-					.then(response => sendFetchResponse(request.requestId, response))
+					.then(response => sendFetchResponse(responseId, response))
 					.catch(error => sendResponse({ error: error.toString() }));
+				requestId = requestId + 1;
 			}
 			if (request.method == "fetch.uint8array") {
 				const content = fetchResponses.get(request.requestId);

+ 3 - 9
extension/core/scripts/content/fetch.js

@@ -22,22 +22,20 @@
 
 window.fetch = (() => {
 
-	let requestId = 1;
-
 	return async (url, options) => {
 		const responseFetch = await chromeRuntimeSendMessage({ method: "fetch", url, options });
 		return {
 			headers: { get: headerName => responseFetch.headers[headerName] },
 			arrayBuffer: async () => {
-				const response = await chromeRuntimeSendMessage({ method: "fetch.uint8array", requestId: responseFetch.requestId });
+				const response = await chromeRuntimeSendMessage({ method: "fetch.uint8array", requestId: responseFetch.responseId });
 				return new Uint8Array(response.uint8array).buffer;
 			},
 			blob: async () => {
-				const response = await chromeRuntimeSendMessage({ method: "fetch.uint8array", requestId: responseFetch.requestId });
+				const response = await chromeRuntimeSendMessage({ method: "fetch.uint8array", requestId: responseFetch.responseId });
 				return new Blob([new Uint8Array(response.uint8array)]);
 			},
 			text: async () => {
-				const response = await chromeRuntimeSendMessage({ method: "fetch.text", requestId: responseFetch.requestId });
+				const response = await chromeRuntimeSendMessage({ method: "fetch.text", requestId: responseFetch.responseId });
 				return response.text;
 			}
 		};
@@ -45,10 +43,6 @@ window.fetch = (() => {
 
 	function chromeRuntimeSendMessage(message) {
 		return new Promise((resolve, reject) => {
-			if (!message.requestId) {
-				message.requestId = requestId;
-				requestId = requestId + 1;
-			}
 			chrome.runtime.sendMessage(message, response => {
 				if (response.error) {
 					reject(response.error);