use session arena instead of storing arena in Navigation

This commit is contained in:
Muki Kiboigo
2025-12-24 09:04:25 -08:00
parent 4c8abd4680
commit a31497937b
2 changed files with 9 additions and 13 deletions

View File

@@ -75,7 +75,7 @@ pub fn init(self: *Session, browser: *Browser) !void {
.storage_shed = .{}, .storage_shed = .{},
.arena = session_allocator, .arena = session_allocator,
.cookie_jar = storage.Cookie.Jar.init(allocator), .cookie_jar = storage.Cookie.Jar.init(allocator),
.navigation = Navigation.init(session_allocator), .navigation = .{},
.history = .{}, .history = .{},
.transfer_arena = browser.transfer_arena.allocator(), .transfer_arena = browser.transfer_arena.allocator(),
}; };

View File

@@ -38,7 +38,6 @@ const NavigationCurrentEntryChangeEvent = @import("../event/NavigationCurrentEnt
const NavigationEventTarget = @import("NavigationEventTarget.zig"); const NavigationEventTarget = @import("NavigationEventTarget.zig");
_proto: *NavigationEventTarget = undefined, _proto: *NavigationEventTarget = undefined,
_arena: std.mem.Allocator,
_current_navigation_kind: ?NavigationKind = null, _current_navigation_kind: ?NavigationKind = null,
_index: usize = 0, _index: usize = 0,
@@ -47,10 +46,6 @@ _entries: std.ArrayList(*NavigationHistoryEntry) = .empty,
_next_entry_id: usize = 0, _next_entry_id: usize = 0,
_activation: ?NavigationActivation = null, _activation: ?NavigationActivation = null,
pub fn init(arena: std.mem.Allocator) Navigation {
return Navigation{ ._arena = arena };
}
fn asEventTarget(self: *Navigation) *EventTarget { fn asEventTarget(self: *Navigation) *EventTarget {
return self._proto.asEventTarget(); return self._proto.asEventTarget();
} }
@@ -171,7 +166,7 @@ pub fn pushEntry(
page: *Page, page: *Page,
dispatch: bool, dispatch: bool,
) !*NavigationHistoryEntry { ) !*NavigationHistoryEntry {
const arena = self._arena; const arena = page._session.arena;
const url = try arena.dupeZ(u8, _url); const url = try arena.dupeZ(u8, _url);
// truncates our history here. // truncates our history here.
@@ -220,7 +215,7 @@ pub fn replaceEntry(
page: *Page, page: *Page,
dispatch: bool, dispatch: bool,
) !*NavigationHistoryEntry { ) !*NavigationHistoryEntry {
const arena = self._arena; const arena = page._session.arena;
const url = try arena.dupeZ(u8, _url); const url = try arena.dupeZ(u8, _url);
const previous = self.getCurrentEntry(); const previous = self.getCurrentEntry();
@@ -263,7 +258,7 @@ pub fn navigateInner(
kind: NavigationKind, kind: NavigationKind,
page: *Page, page: *Page,
) !NavigationReturn { ) !NavigationReturn {
const arena = self._arena; const arena = page._session.arena;
const url = _url orelse return error.MissingURL; const url = _url orelse return error.MissingURL;
// https://github.com/WICG/navigation-api/issues/95 // https://github.com/WICG/navigation-api/issues/95
@@ -315,7 +310,7 @@ pub fn navigateInner(
// todo: Fire navigate event // todo: Fire navigate event
finished.resolve("navigation traverse", {}); finished.resolve("navigation traverse", {});
} else { } else {
try page.navigate(url, .{ .reason = .navigation, .kind = kind }); try page.scheduleNavigation(url, .{ .reason = .navigation, .kind = kind }, .script);
} }
}, },
.reload => { .reload => {
@@ -338,8 +333,9 @@ pub fn navigateInner(
} }
pub fn navigate(self: *Navigation, _url: [:0]const u8, _opts: ?NavigateOptions, page: *Page) !NavigationReturn { pub fn navigate(self: *Navigation, _url: [:0]const u8, _opts: ?NavigateOptions, page: *Page) !NavigationReturn {
const arena = page._session.arena;
const opts = _opts orelse NavigateOptions{}; const opts = _opts orelse NavigateOptions{};
const json = if (opts.state) |state| state.toJson(self._arena) catch return error.DataClone else null; const json = if (opts.state) |state| state.toJson(arena) catch return error.DataClone else null;
const kind: NavigationKind = if (opts.history) |history| const kind: NavigationKind = if (opts.history) |history|
if (std.mem.eql(u8, "replace", history)) .{ .replace = json } else .{ .push = json } if (std.mem.eql(u8, "replace", history)) .{ .replace = json } else .{ .push = json }
@@ -355,7 +351,7 @@ pub const ReloadOptions = struct {
}; };
pub fn reload(self: *Navigation, _opts: ?ReloadOptions, page: *Page) !NavigationReturn { pub fn reload(self: *Navigation, _opts: ?ReloadOptions, page: *Page) !NavigationReturn {
const arena = self._arena; const arena = page._session.arena;
const opts = _opts orelse ReloadOptions{}; const opts = _opts orelse ReloadOptions{};
const entry = self.getCurrentEntry(); const entry = self.getCurrentEntry();
@@ -397,7 +393,7 @@ pub const UpdateCurrentEntryOptions = struct {
}; };
pub fn updateCurrentEntry(self: *Navigation, options: UpdateCurrentEntryOptions, page: *Page) !void { pub fn updateCurrentEntry(self: *Navigation, options: UpdateCurrentEntryOptions, page: *Page) !void {
const arena = self._arena; const arena = page._session.arena;
const previous = self.getCurrentEntry(); const previous = self.getCurrentEntry();
self.getCurrentEntry()._state = .{ self.getCurrentEntry()._state = .{