From 4fd2478d67beb2dade96bc3df5afa7b5823eff69 Mon Sep 17 00:00:00 2001 From: SuperMaxusa <41739128+SuperMaxusa@users.noreply.github.com> Date: Tue, 15 Apr 2025 00:00:55 +0300 Subject: [PATCH] fix headers and worker error handling --- src/browser/fetch_network.js | 15 ++++++++------- tests/benchmark/fetch-download.js | 2 +- tests/devices/fetch_network.js | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/browser/fetch_network.js b/src/browser/fetch_network.js index 5d8109d9..06b2e819 100644 --- a/src/browser/fetch_network.js +++ b/src/browser/fetch_network.js @@ -162,14 +162,15 @@ async function on_data_http(data) let response_started = false; this.net.fetch(fetch_url, opts).then((resp) => { let resp_headers = new Headers(resp.headers); + resp_headers.delete("content-encoding"); + resp_headers.delete("keep-alive"); + resp_headers.delete("content-length"); + resp_headers.delete("transfer-encoding"); + resp_headers.set("x-was-fetch-redirected", `${!!resp.redirected}`); resp_headers.set("x-fetch-resp-url", resp.url); resp_headers.set("connection", "close"); - ["content-encoding", "content-length", "transfer-encoding"].forEach(function(header) { - if(resp_headers.has(header)) { - resp_headers.delete(header); - } - }); + this.write(encoder.encode(this.net.form_response_head(resp.status, resp.statusText, resp_headers))); response_started = true; @@ -240,9 +241,9 @@ FetchNetworkAdapter.prototype.form_response_head = function(status_code, status_ `HTTP/1.1 ${status_code} ${status_text}` ]; - headers.forEach(function(value, key) { + for(const [key, value] of headers.entries()) { lines.push(`${key}: ${value}`); - }); + } return lines.join("\r\n") + "\r\n\r\n"; }; diff --git a/tests/benchmark/fetch-download.js b/tests/benchmark/fetch-download.js index 4c77bcc8..ef09f10d 100755 --- a/tests/benchmark/fetch-download.js +++ b/tests/benchmark/fetch-download.js @@ -16,7 +16,7 @@ const LOG_SERIAL = true; const SHOW_LOGS = false; const server = new Worker(__dirname + "../devices/fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: BENCHFILE_SIZE } }); -server.onerror = (e) => { throw new Error("server: " + e); }; +server.on("error", (e) => { throw new Error("server: " + e); }); const emulator = new V86({ bios: { url: __dirname + "/../../bios/seabios.bin" }, diff --git a/tests/devices/fetch_network.js b/tests/devices/fetch_network.js index 702db471..72bb87c7 100755 --- a/tests/devices/fetch_network.js +++ b/tests/devices/fetch_network.js @@ -15,7 +15,7 @@ const { V86 } = await import(TEST_RELEASE_BUILD ? "../../build/libv86.mjs" : ".. const SHOW_LOGS = false; const server = new Worker(__dirname + "fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: 0 } }); -server.onerror = (e) => { throw new Error("server: " + e); }; +server.on("error", (e) => { throw new Error("server: " + e); }); function wait(time) { return new Promise((res) => setTimeout(res, time));