From 9cdf1f57623e5ab7668ece6143df96071e2d7050 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 18 Jun 2024 09:11:56 +0200 Subject: [PATCH] xhr: fix unit tests for 0.12.1 --- src/dom/event_target.zig | 4 ++-- src/events/event.zig | 6 +++--- src/netsurf/netsurf.zig | 4 +++- src/url/url.zig | 2 +- src/xhr/event_target.zig | 4 ++-- src/xhr/xhr.zig | 21 +++++++++++++-------- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/dom/event_target.zig b/src/dom/event_target.zig index 6f8f2f8f..23444bfc 100644 --- a/src/dom/event_target.zig +++ b/src/dom/event_target.zig @@ -25,7 +25,7 @@ const Case = jsruntime.test_utils.Case; const checkCases = jsruntime.test_utils.checkCases; const parser = @import("netsurf"); -const event_handler = @import("../events/event.zig").event_handler; +const EventHandler = @import("../events/event.zig").EventHandler; const DOMException = @import("exceptions.zig").DOMException; const Nod = @import("node.zig"); @@ -75,7 +75,7 @@ pub const EventTarget = struct { eventType, cbk, capture orelse false, - event_handler, + EventHandler, ); } diff --git a/src/events/event.zig b/src/events/event.zig index 81cfefd4..784b2d77 100644 --- a/src/events/event.zig +++ b/src/events/event.zig @@ -240,7 +240,7 @@ pub fn testExecFn( try checkCases(js_env, &remove); } -pub const event_handler = struct { +pub const EventHandler = struct { fn handle(event: ?*parser.Event, data: ?*anyopaque) callconv(.C) void { if (data) |d| { const func = parser.event_handler_cbk(d); @@ -252,9 +252,9 @@ pub const event_handler = struct { if (event) |evt| { func.trycall(.{ Event.toInterface(evt) catch unreachable, - }, &res) catch {}; + }, &res) catch |e| log.err("event handler error: {any}", .{e}); } else { - func.trycall(.{event}, &res) catch {}; + func.trycall(.{event}, &res) catch |e| log.err("event handler error: {any}", .{e}); } // in case of function error, we log the result and the trace. diff --git a/src/netsurf/netsurf.zig b/src/netsurf/netsurf.zig index 839c42c8..d7e64648 100644 --- a/src/netsurf/netsurf.zig +++ b/src/netsurf/netsurf.zig @@ -608,13 +608,15 @@ pub fn eventTargetHasListener( return null; } +const EventHandler = fn (event: ?*Event, data: ?*anyopaque) callconv(.C) void; + pub fn eventTargetAddEventListener( et: *EventTarget, alloc: std.mem.Allocator, typ: []const u8, cbk: Callback, capture: bool, - handler: anytype, + handler: EventHandler, ) !void { // this allocation will be removed either on // eventTargetRemoveEventListener or eventTargetRemoveAllEventListeners diff --git a/src/url/url.zig b/src/url/url.zig index 554638eb..bea44839 100644 --- a/src/url/url.zig +++ b/src/url/url.zig @@ -105,7 +105,7 @@ pub const URL = struct { var q = std.ArrayList(u8).init(alloc); defer q.deinit(); try self.search_params.values.encode(q.writer()); - self.uri.query = .{ .raw = q.items }; + self.uri.query = .{ .percent_encoded = q.items }; return try self.format(alloc); } diff --git a/src/xhr/event_target.zig b/src/xhr/event_target.zig index d03de6f7..ab4e7683 100644 --- a/src/xhr/event_target.zig +++ b/src/xhr/event_target.zig @@ -22,7 +22,7 @@ const jsruntime = @import("jsruntime"); const Callback = jsruntime.Callback; const EventTarget = @import("../dom/event_target.zig").EventTarget; -const event_handler = @import("../events/event.zig").event_handler; +const EventHandler = @import("../events/event.zig").EventHandler; const parser = @import("netsurf"); @@ -54,7 +54,7 @@ pub const XMLHttpRequestEventTarget = struct { typ, cbk, false, - event_handler, + EventHandler, ); } fn unregister(self: *XMLHttpRequestEventTarget, alloc: std.mem.Allocator, typ: []const u8, cbk: Callback) !void { diff --git a/src/xhr/xhr.zig b/src/xhr/xhr.zig index f4ff42c0..d9e44f1c 100644 --- a/src/xhr/xhr.zig +++ b/src/xhr/xhr.zig @@ -118,7 +118,12 @@ pub const XMLHttpRequest = struct { // https://lightpanda.slack.com/archives/C05TRU6RBM1/p1707819010681019 // upload: ?XMLHttpRequestUpload = null, - timeout: u32 = 0, + // TODO uncomment this field causes casting issue with + // XMLHttpRequestEventTarget. I think it's dueto an alignement issue, but + // not sure. see + // https://lightpanda.slack.com/archives/C05TRU6RBM1/p1707819010681019 + // timeout: u32 = 0, + withCredentials: bool = false, // TODO: response readonly attribute any response; response_bytes: ?[]const u8 = null, @@ -195,7 +200,7 @@ pub const XMLHttpRequest = struct { fn has(self: Headers, k: []const u8) bool { for (self.list.items) |h| { - if (std.ascii.eqlIgnoreCase(k, h.value)) { + if (std.ascii.eqlIgnoreCase(k, h.name)) { return true; } } @@ -205,7 +210,7 @@ pub const XMLHttpRequest = struct { fn getFirstValue(self: Headers, k: []const u8) ?[]const u8 { for (self.list.items) |h| { - if (std.ascii.eqlIgnoreCase(k, h.value)) { + if (std.ascii.eqlIgnoreCase(k, h.name)) { return h.value; } } @@ -216,7 +221,7 @@ pub const XMLHttpRequest = struct { // replace any existing header with the same key fn set(self: *Headers, k: []const u8, v: []const u8) !void { for (self.list.items, 0..) |h, i| { - if (std.ascii.eqlIgnoreCase(k, h.value)) { + if (std.ascii.eqlIgnoreCase(k, h.name)) { const hh = self.list.swapRemove(i); self.alloc.free(hh.name); self.alloc.free(hh.value); @@ -330,16 +335,16 @@ pub const XMLHttpRequest = struct { return self.state; } - pub fn get_timeout(self: *XMLHttpRequest) u32 { - return self.timeout; + pub fn get_timeout(_: *XMLHttpRequest) u32 { + return 0; } - pub fn set_timeout(self: *XMLHttpRequest, timeout: u32) !void { + // TODO, the value is ignored for now. + pub fn set_timeout(_: *XMLHttpRequest, _: u32) !void { // TODO If the current global object is a Window object and this’s // synchronous flag is set, then throw an "InvalidAccessError" // DOMException. // https://xhr.spec.whatwg.org/#dom-xmlhttprequest-timeout - self.timeout = timeout; } pub fn get_withCredentials(self: *XMLHttpRequest) bool {