From c33171340188dae76a7818df28c058634bf20931 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Fri, 4 Jul 2025 19:12:26 +0800 Subject: [PATCH] set correct state on xhr.abort and send correct events --- src/browser/xhr/xhr.zig | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/browser/xhr/xhr.zig b/src/browser/xhr/xhr.zig index 0c876c93..22a72451 100644 --- a/src/browser/xhr/xhr.zig +++ b/src/browser/xhr/xhr.zig @@ -589,11 +589,27 @@ pub const XMLHttpRequest = struct { } fn onErr(self: *XMLHttpRequest, err: anyerror) void { - self.state = .done; self.send_flag = false; - self.dispatchEvt("readystatechange"); - self.dispatchProgressEvent("error", .{}); - self.dispatchProgressEvent("loadend", .{}); + + // capture the state before we change it + const s = self.state; + + const is_abort = err == DOMError.Abort; + + if (is_abort) { + self.state = .unsent; + } else { + self.state = .done; + self.dispatchEvt("error"); + } + + if (s != .done or s != .unsent) { + self.dispatchEvt("readystatechange"); + if (is_abort) { + self.dispatchProgressEvent("abort", .{}); + } + self.dispatchProgressEvent("loadend", .{}); + } const level: log.Level = if (err == DOMError.Abort) .debug else .err; log.log(.http, level, "error", .{