From a2f21ff46316ac58b4611ca3f725f0203eaef364 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 27 Apr 2026 09:27:30 +0800 Subject: [PATCH] Fix same-url navigate Same-URL navigate should always cause a reload. The code that currently prevents a navigate on fragment change is too loose and treats identical URLs as being a fragment change..but for it to be considered a fragment change, the fragment actually has to change. This improves some WPT compat where tests do: <--- loads "about:blank" --- src/browser/Frame.zig | 5 ++++- src/browser/tests/frames/frames.html | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/browser/Frame.zig b/src/browser/Frame.zig index 17c49d0e..50b06646 100644 --- a/src/browser/Frame.zig +++ b/src/browser/Frame.zig @@ -720,7 +720,10 @@ fn scheduleNavigationWithArena(originator: *Frame, arena: Allocator, request_url }; const session = target._session; - if (!opts.force and URL.eqlDocument(target.url, resolved_url)) { + // Short-circuit only true fragment-only navigations (same path/query, different + // fragment). Identical URLs fall through and trigger a real reload. + const is_fragment_navigation = !std.mem.eql(u8, target.url, resolved_url) and URL.eqlDocument(target.url, resolved_url); + if (!opts.force and is_fragment_navigation) { target.url = try target.arena.dupeZ(u8, resolved_url); target.window._location = try Location.init(target.url, target); if (target.parent == null) { diff --git a/src/browser/tests/frames/frames.html b/src/browser/tests/frames/frames.html index 0d11b1bb..98405cdc 100644 --- a/src/browser/tests/frames/frames.html +++ b/src/browser/tests/frames/frames.html @@ -151,8 +151,20 @@ } + + +