From 80f758018ca5630d0e94982b606ee3509d29db60 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Thu, 11 Sep 2025 15:53:34 +0800 Subject: [PATCH] Increase event timeStamp resolution Depends on https://github.com/lightpanda-io/libdom/pull/36 The spec says this should be a High Definition timestamp. But browsers avoid that in order to avoid fingerprinting. By default, FireFox rounds to 2ms (which is what this PR does). Previously, the timestamp was seconds, so you'd think: isn't that better? Well, it's pretty far off the spec and what browsers do, but more importantly, it crashes our WPT test. If you look at `Event-timestamp-safe-resolution.html` you'll see that it's trying to find the delta between two timestamps, in an endless loop (without a loop of many iterations). With second-resolution, it just takes too long (and crashes..memory). --- src/browser/events/event.zig | 2 +- src/browser/netsurf.zig | 6 +++--- vendor/netsurf/libdom | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/browser/events/event.zig b/src/browser/events/event.zig index f11cf07d..cc82ab57 100644 --- a/src/browser/events/event.zig +++ b/src/browser/events/event.zig @@ -113,7 +113,7 @@ pub const Event = struct { // Even though this is supposed to to provide microsecond resolution, browser // return coarser values to protect against fingerprinting. libdom returns // seconds, which is good enough. - pub fn get_timeStamp(self: *parser.Event) !u32 { + pub fn get_timeStamp(self: *parser.Event) !u64 { return parser.eventTimestamp(self); } diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index 026f5ade..a663037b 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -505,11 +505,11 @@ pub fn eventIsTrusted(evt: *Event) !bool { return res; } -pub fn eventTimestamp(evt: *Event) !u32 { - var ts: c_uint = undefined; +pub fn eventTimestamp(evt: *Event) !u64 { + var ts: u64 = 0; const err = c._dom_event_get_timestamp(evt, &ts); try DOMErr(err); - return @as(u32, @intCast(ts)); + return ts; } pub fn eventStopPropagation(evt: *Event) !void { diff --git a/vendor/netsurf/libdom b/vendor/netsurf/libdom index 120717ba..269ce051 160000 --- a/vendor/netsurf/libdom +++ b/vendor/netsurf/libdom @@ -1 +1 @@ -Subproject commit 120717bad4e46c3fee559aff9728a5c0dbc9c8f2 +Subproject commit 269ce05169017f49f60eae44a0fa3a56947a6e81