diff --git a/packages/browser-extension/v3/src/background.js b/packages/browser-extension/v3/src/background.js index ed49a82d..5fef7c9c 100644 --- a/packages/browser-extension/v3/src/background.js +++ b/packages/browser-extension/v3/src/background.js @@ -89,14 +89,17 @@ async function handleAction() { } } -let abortController = null +let abortController = new Map() async function handleSendRequest(message, sendResponse) { - abortController = new AbortController() + const { eventId } = message + try { const { url, method, headers, bodyHint } = message.eventData let { body } = message.eventData + abortController.set(eventId, new AbortController()) + if(bodyHint === 'FormData') { const formData = new FormData() for(const item of body) { @@ -116,7 +119,7 @@ async function handleSendRequest(message, sendResponse) { method, headers, body: method !== 'GET' ? body : undefined, - signal: abortController.signal + signal: abortController.get(eventId).signal }) const endTime = new Date() @@ -142,11 +145,13 @@ async function handleSendRequest(message, sendResponse) { sendResponse({ event: 'response', + eventId, eventData: responseToSend }) } catch(e) { sendResponse({ event: 'responseError', + eventId, eventData: e.message }) } @@ -158,7 +163,7 @@ function messageHandler(message, _sender, sendResponse) { } if(message.event === 'cancelRequest') { - abortController.abort() + abortController.get(message.eventId).abort() } if(message.event === 'ping') { diff --git a/packages/browser-extension/v3/src/manifest.json b/packages/browser-extension/v3/src/manifest.json index 06a4a037..7e4f6f54 100644 --- a/packages/browser-extension/v3/src/manifest.json +++ b/packages/browser-extension/v3/src/manifest.json @@ -1,7 +1,7 @@ { "name": "Restfox CORS Helper", "description": "Help bypass CORS when making requests from Restfox", - "version": "1.0.8", + "version": "1.0.9", "manifest_version": 3, "icons": { "512": "icons/favicon.png" diff --git a/packages/ui/src/helpers.ts b/packages/ui/src/helpers.ts index c859696e..ba8990d0 100644 --- a/packages/ui/src/helpers.ts +++ b/packages/ui/src/helpers.ts @@ -114,8 +114,11 @@ export async function fetchWrapper(url, method, headers, body, abortControllerSi } return new Promise((resolve, reject) => { + const eventId = generateId() + window.postMessage({ event: 'sendRequest', + eventId, eventData: { url: url.toString(), method, @@ -126,6 +129,10 @@ export async function fetchWrapper(url, method, headers, body, abortControllerSi }) const messageHandler = message => { + if (message.data.eventId !== undefined && message.data.eventId !== eventId) { + return + } + if(message.data.event === 'response') { resolve(message.data.eventData) window.removeEventListener('message', messageHandler) @@ -141,7 +148,8 @@ export async function fetchWrapper(url, method, headers, body, abortControllerSi abortControllerSignal.onabort = () => { window.postMessage({ - event: 'cancelRequest' + event: 'cancelRequest', + eventId, }) reject(new DOMException('The user aborted a request.', 'AbortError')) window.removeEventListener('message', messageHandler)