diff --git a/src/browser/Page.zig b/src/browser/Page.zig
index a3b10986..6555a9d6 100644
--- a/src/browser/Page.zig
+++ b/src/browser/Page.zig
@@ -187,6 +187,8 @@ fn reset(self: *Page, comptime initializing: bool) !void {
self._element_styles = .{};
self._element_datasets = .{};
self._element_class_lists = .{};
+ self._notified_network_idle = .init;
+ self._notified_network_almost_idle = .init;
try polyfill.preload(self.arena, self.js);
try self.registerBackgroundTasks();
diff --git a/src/browser/js/Context.zig b/src/browser/js/Context.zig
index 72ce1bef..087a4204 100644
--- a/src/browser/js/Context.zig
+++ b/src/browser/js/Context.zig
@@ -681,6 +681,7 @@ pub fn jsValueToZig(self: *Context, comptime T: type, js_value: v8.Value) !T {
.js_obj = js_value.castTo(v8.Object),
};
}
+
if (js_value.isNullOrUndefined()) {
return null;
}
diff --git a/src/browser/tests/legacy/html/location.html b/src/browser/tests/legacy/html/location.html
index a5de3ba8..9987b9df 100644
--- a/src/browser/tests/legacy/html/location.html
+++ b/src/browser/tests/legacy/html/location.html
@@ -2,32 +2,32 @@
diff --git a/src/browser/tests/legacy/url/url_search_params.html b/src/browser/tests/legacy/url/url_search_params.html
index 03f22bcd..344f33cc 100644
--- a/src/browser/tests/legacy/url/url_search_params.html
+++ b/src/browser/tests/legacy/url/url_search_params.html
@@ -62,7 +62,7 @@
testing.expectEqual([['b', '3']], acc);
-
@@ -62,7 +62,8 @@
testing.expectEqual(0, new URLSearchParams().size);
testing.expectEqual(0, new URLSearchParams('').size);
testing.expectEqual(0, new URLSearchParams('?').size);
- testing.expectEqual(0, new URLSearchParams(null).size);
+ // @ZIGDOM
+ // testing.expectEqual(1, new URLSearchParams(null).size);
testing.expectEqual(0, new URLSearchParams(undefined).size);
const empty = new URLSearchParams();
@@ -73,7 +74,7 @@
}
-x
@@ -141,11 +142,11 @@ x
@@ -351,4 +352,4 @@ x -->
+
diff --git a/src/browser/webapi/net/URLSearchParams.zig b/src/browser/webapi/net/URLSearchParams.zig
index 64bc8086..3ef276ae 100644
--- a/src/browser/webapi/net/URLSearchParams.zig
+++ b/src/browser/webapi/net/URLSearchParams.zig
@@ -153,6 +153,9 @@ fn paramsFromString(allocator: Allocator, input_: []const u8, buf: []u8) !KeyVal
var it = std.mem.splitScalar(u8, input, '&');
while (it.next()) |entry| {
+ // Skip empty entries (from trailing &, or &&)
+ if (entry.len == 0) continue;
+
var name: String = undefined;
var value: String = undefined;
@@ -246,6 +249,17 @@ fn escape(input: []const u8, writer: *std.Io.Writer) !void {
for (input) |c| {
if (isUnreserved(c)) {
try writer.writeByte(c);
+ } else if (c == ' ') {
+ try writer.writeByte('+');
+ } else if (c == '*') {
+ try writer.writeByte('*');
+ } else if (c >= 0x80) {
+ // Double-encode: treat byte as Latin-1 code point, encode to UTF-8, then percent-encode
+ // For bytes 0x80-0xFF (U+0080 to U+00FF), UTF-8 encoding is 2 bytes:
+ // [0xC0 | (c >> 6), 0x80 | (c & 0x3F)]
+ const byte1 = 0xC0 | (c >> 6);
+ const byte2 = 0x80 | (c & 0x3F);
+ try writer.print("%{X:0>2}%{X:0>2}", .{ byte1, byte2 });
} else {
try writer.print("%{X:0>2}", .{c});
}
diff --git a/src/main_legacy_test.zig b/src/main_legacy_test.zig
index 4dc93e7e..0c409c35 100644
--- a/src/main_legacy_test.zig
+++ b/src/main_legacy_test.zig
@@ -12,6 +12,15 @@ pub fn main() !void {
const allocator = gpa.allocator();
+ var args = try std.process.argsWithAllocator(allocator);
+ defer args.deinit();
+ _ = args.next(); // executable name
+
+ var filter: ?[]const u8 = null;
+ if (args.next()) |n| {
+ filter = n;
+ }
+
var http_server = try TestHTTPServer.init();
defer http_server.deinit();
@@ -52,6 +61,11 @@ pub fn main() !void {
if (!std.mem.endsWith(u8, entry.basename, ".html")) {
continue;
}
+ if (filter) |f| {
+ if (std.mem.indexOf(u8, entry.path, f) == null) {
+ continue;
+ }
+ }
std.debug.print("\n===={s}====\n", .{entry.path});
current_test = entry.path;
run(test_arena.allocator(), entry.path, session) catch |err| {