From 3013e3a9e6beaaf67784a550f34d32208f4424ff Mon Sep 17 00:00:00 2001 From: sjhddh Date: Sat, 14 Mar 2026 08:42:02 +0000 Subject: [PATCH 1/5] fix(net): fetch() should reject with a TypeError on network errors --- src/browser/webapi/net/Fetch.zig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/browser/webapi/net/Fetch.zig b/src/browser/webapi/net/Fetch.zig index 9b0f2f98..71b01c56 100644 --- a/src/browser/webapi/net/Fetch.zig +++ b/src/browser/webapi/net/Fetch.zig @@ -192,7 +192,10 @@ fn httpErrorCallback(ctx: *anyopaque, err: anyerror) void { self._page.js.localScope(&ls); defer ls.deinit(); - ls.toLocal(self._resolver).reject("fetch error", @errorName(err)); + // fetch() must reject with a TypeError on network errors per spec + const err_handle = ls.local.isolate.createTypeError("Failed to fetch"); + const err_val = js.Value{ .local = ls.local, .handle = err_handle }; + ls.toLocal(self._resolver).reject("fetch error", err_val); } fn httpShutdownCallback(ctx: *anyopaque) void { From 56d3cf51e853a550ad1022a37289a0d61fa4e217 Mon Sep 17 00:00:00 2001 From: sjhddh Date: Sun, 15 Mar 2026 07:12:10 +0000 Subject: [PATCH 2/5] test: update empty xml parse error case in domparser.html --- src/browser/tests/domparser.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/browser/tests/domparser.html b/src/browser/tests/domparser.html index 7930ec87..d8399055 100644 --- a/src/browser/tests/domparser.html +++ b/src/browser/tests/domparser.html @@ -11,9 +11,9 @@ } { - // Empty XML is a parse error (no root element) const parser = new DOMParser(); - testing.expectError('Error', () => parser.parseFromString('', 'text/xml')); + let d = parser.parseFromString('', 'text/xml'); + testing.expectEqual('error', new XMLSerializer().serializeToString(d)); } } From 4d60f56e66b0ded3e1c18266a70aa604bbfd5014 Mon Sep 17 00:00:00 2001 From: sjhddh Date: Sun, 15 Mar 2026 07:26:18 +0000 Subject: [PATCH 3/5] test: add test case for fetch throwing TypeError on network errors --- src/browser/tests/net/fetch.html | 12 ++++++++++++ src/browser/webapi/net/Fetch.zig | 4 +--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/browser/tests/net/fetch.html b/src/browser/tests/net/fetch.html index a545a452..c284e6a8 100644 --- a/src/browser/tests/net/fetch.html +++ b/src/browser/tests/net/fetch.html @@ -203,3 +203,15 @@ testing.expectEqual(true, response.body !== null); }); + + diff --git a/src/browser/webapi/net/Fetch.zig b/src/browser/webapi/net/Fetch.zig index 71b01c56..ab98a8e5 100644 --- a/src/browser/webapi/net/Fetch.zig +++ b/src/browser/webapi/net/Fetch.zig @@ -193,9 +193,7 @@ fn httpErrorCallback(ctx: *anyopaque, err: anyerror) void { defer ls.deinit(); // fetch() must reject with a TypeError on network errors per spec - const err_handle = ls.local.isolate.createTypeError("Failed to fetch"); - const err_val = js.Value{ .local = ls.local, .handle = err_handle }; - ls.toLocal(self._resolver).reject("fetch error", err_val); + ls.toLocal(self._resolver).rejectError("fetch error", .{ .type_error = @errorName(err) }); } fn httpShutdownCallback(ctx: *anyopaque) void { From a9d044ec10344dc6d1ae93b5cbec37c21696185a Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 16 Mar 2026 07:11:06 +0800 Subject: [PATCH 4/5] revert domparser test change that belongs to a different PR --- src/browser/tests/domparser.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/browser/tests/domparser.html b/src/browser/tests/domparser.html index d8399055..7930ec87 100644 --- a/src/browser/tests/domparser.html +++ b/src/browser/tests/domparser.html @@ -11,9 +11,9 @@ } { + // Empty XML is a parse error (no root element) const parser = new DOMParser(); - let d = parser.parseFromString('', 'text/xml'); - testing.expectEqual('error', new XMLSerializer().serializeToString(d)); + testing.expectError('Error', () => parser.parseFromString('', 'text/xml')); } } From 1121bed49ba16a778a4b807610b379bef0d95b1b Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 16 Mar 2026 07:20:57 +0800 Subject: [PATCH 5/5] remove test that I guess isn't reliable (CI?) --- src/browser/tests/net/fetch.html | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/browser/tests/net/fetch.html b/src/browser/tests/net/fetch.html index c284e6a8..a545a452 100644 --- a/src/browser/tests/net/fetch.html +++ b/src/browser/tests/net/fetch.html @@ -203,15 +203,3 @@ testing.expectEqual(true, response.body !== null); }); - -