From bcf4083f9c8b9c6b6d72d0a70ad729c0d91177a5 Mon Sep 17 00:00:00 2001 From: Francis Bouvier Date: Fri, 19 Apr 2024 12:56:55 +0200 Subject: [PATCH 1/2] Keep reference of current Page in Session Signed-off-by: Francis Bouvier --- src/browser/browser.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/browser/browser.zig b/src/browser/browser.zig index 7e2033b5..3e01ba55 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -73,6 +73,7 @@ pub const Session = struct { window: Window, // TODO move the shed to the browser? storageShed: storage.Shed, + page: ?*Page = null, jstypes: [Types.len]usize = undefined, @@ -95,6 +96,8 @@ pub const Session = struct { } fn deinit(self: *Session) void { + if (self.page) |page| page.end(); + self.env.deinit(); self.arena.deinit(); @@ -130,10 +133,12 @@ pub const Page = struct { alloc: std.mem.Allocator, session: *Session, ) Page { - return Page{ + var page = Page{ .arena = std.heap.ArenaAllocator.init(alloc), .session = session, }; + session.page = &page; + return page; } // reset js env and mem arena. @@ -149,6 +154,7 @@ pub const Page = struct { pub fn deinit(self: *Page) void { self.arena.deinit(); + self.session.page = null; } // dump writes the page content into the given file. From df82d25e91e84f9f6496e3bb876871f523ca9ca8 Mon Sep 17 00:00:00 2001 From: Francis Bouvier Date: Fri, 19 Apr 2024 13:11:04 +0200 Subject: [PATCH 2/2] Return error if a Page already exists in Session Signed-off-by: Francis Bouvier --- src/browser/browser.zig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/browser/browser.zig b/src/browser/browser.zig index 3e01ba55..8a11ac1c 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -132,7 +132,8 @@ pub const Page = struct { fn init( alloc: std.mem.Allocator, session: *Session, - ) Page { + ) !Page { + if (session.page != null) return error.SessionPageExists; var page = Page{ .arena = std.heap.ArenaAllocator.init(alloc), .session = session,