From 3e03f7559f33f827e7a86737fbcfa7fe92dfcada Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Thu, 18 Dec 2025 20:48:14 +0800 Subject: [PATCH] Document log_filter_scope argument Add fetch logging --- src/browser/Browser.zig | 6 +++++- src/browser/Page.zig | 12 +++++++----- src/browser/Session.zig | 9 +++++++-- src/browser/webapi/element/DOMStringMap.zig | 8 ++++---- src/browser/webapi/net/Fetch.zig | 16 ++++++++++++++++ src/main.zig | 5 +++++ 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/browser/Browser.zig b/src/browser/Browser.zig index 1d3bcbfe..cf3ca2ef 100644 --- a/src/browser/Browser.zig +++ b/src/browser/Browser.zig @@ -27,6 +27,8 @@ const App = @import("../App.zig"); const HttpClient = @import("../http/Client.zig"); const Notification = @import("../Notification.zig"); +const IS_DEBUG = @import("builtin").mode == .Debug; + const Session = @import("Session.zig"); // Browser is an instance of the browser. @@ -104,7 +106,9 @@ pub fn runMicrotasks(self: *const Browser) void { pub fn runMessageLoop(self: *const Browser) void { while (self.env.pumpMessageLoop()) { - log.debug(.browser, "pumpMessageLoop", .{}); + if (comptime IS_DEBUG) { + log.debug(.browser, "pumpMessageLoop", .{}); + } } self.env.runIdleTasks(); } diff --git a/src/browser/Page.zig b/src/browser/Page.zig index b4db2d37..b47f5f4b 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -472,11 +472,13 @@ fn pageHeaderDoneCallback(transfer: *Http.Transfer) !void { self.window._location = try Location.init(self.url, self); self.document._location = self.window._location; - log.debug(.page, "navigate header", .{ - .url = self.url, - .status = header.status, - .content_type = header.contentType(), - }); + if (comptime IS_DEBUG) { + log.debug(.page, "navigate header", .{ + .url = self.url, + .status = header.status, + .content_type = header.contentType(), + }); + } } fn pageDataCallback(transfer: *Http.Transfer, data: []const u8) !void { diff --git a/src/browser/Session.zig b/src/browser/Session.zig index 3c599c39..5ba549c4 100644 --- a/src/browser/Session.zig +++ b/src/browser/Session.zig @@ -30,6 +30,7 @@ const Browser = @import("Browser.zig"); const Allocator = std.mem.Allocator; const NavigateOpts = Page.NavigateOpts; +const IS_DEBUG = @import("builtin").mode == .Debug; // Session is like a browser's tab. // It owns the js env and the loader for all the pages of the session. @@ -110,7 +111,9 @@ pub fn createPage(self: *Session) !*Page { // Creates a new NavigationEventTarget for this page. try self.navigation.onNewPage(page); - log.debug(.browser, "create page", .{}); + if (comptime IS_DEBUG) { + log.debug(.browser, "create page", .{}); + } // start JS env // Inform CDP the main page has been created such that additional context for other Worlds can be created as well self.browser.notification.dispatch(.page_created, page); @@ -129,7 +132,9 @@ pub fn removePage(self: *Session) void { self.navigation.onRemovePage(); - log.debug(.browser, "remove page", .{}); + if (comptime IS_DEBUG) { + log.debug(.browser, "remove page", .{}); + } } pub fn currentPage(self: *Session) ?*Page { diff --git a/src/browser/webapi/element/DOMStringMap.zig b/src/browser/webapi/element/DOMStringMap.zig index 518f996a..4d1d2307 100644 --- a/src/browser/webapi/element/DOMStringMap.zig +++ b/src/browser/webapi/element/DOMStringMap.zig @@ -28,17 +28,17 @@ const DOMStringMap = @This(); _element: *Element, -fn _getProperty(self: *DOMStringMap, name: []const u8, page: *Page) !?[]const u8 { +fn getProperty(self: *DOMStringMap, name: []const u8, page: *Page) !?[]const u8 { const attr_name = try camelToKebab(page.call_arena, name); return try self._element.getAttribute(attr_name, page); } -fn _setProperty(self: *DOMStringMap, name: []const u8, value: []const u8, page: *Page) !void { +fn setProperty(self: *DOMStringMap, name: []const u8, value: []const u8, page: *Page) !void { const attr_name = try camelToKebab(page.call_arena, name); return self._element.setAttributeSafe(attr_name, value, page); } -fn _deleteProperty(self: *DOMStringMap, name: []const u8, page: *Page) !void { +fn deleteProperty(self: *DOMStringMap, name: []const u8, page: *Page) !void { const attr_name = try camelToKebab(page.call_arena, name); try self._element.removeAttribute(attr_name, page); } @@ -101,5 +101,5 @@ pub const JsApi = struct { pub var class_id: bridge.ClassId = undefined; }; - pub const @"[]" = bridge.namedIndexed(_getProperty, _setProperty, _deleteProperty, .{ .null_as_undefined = true }); + pub const @"[]" = bridge.namedIndexed(getProperty, setProperty, deleteProperty, .{ .null_as_undefined = true }); }; diff --git a/src/browser/webapi/net/Fetch.zig b/src/browser/webapi/net/Fetch.zig index 58fc9e8f..87f794f5 100644 --- a/src/browser/webapi/net/Fetch.zig +++ b/src/browser/webapi/net/Fetch.zig @@ -99,6 +99,14 @@ fn httpHeaderDoneCallback(transfer: *Http.Transfer) !void { const res = self._response; const header = transfer.response_header.?; + if (comptime IS_DEBUG) { + log.debug(.http, "request header", .{ + .source = "xhr", + .url = self._url, + .status = header.status, + }); + } + res._status = header.status; res._url = try self._page.arena.dupeZ(u8, std.mem.span(header.url)); res._is_redirected = header.redirect_count > 0; @@ -135,6 +143,14 @@ fn httpDataCallback(transfer: *Http.Transfer, data: []const u8) !void { fn httpDoneCallback(ctx: *anyopaque) !void { const self: *Fetch = @ptrCast(@alignCast(ctx)); self._response._body = self._buf.items; + + log.info(.http, "request complete", .{ + .source = "fetch", + .url = self._url, + .status = self._response._status, + .len = self._buf.items.len, + }); + return self._resolver.resolve("fetch done", self._response); } diff --git a/src/main.zig b/src/main.zig index b43ea92c..06f65a01 100644 --- a/src/main.zig +++ b/src/main.zig @@ -305,6 +305,11 @@ const Command = struct { \\--log_format The log format: pretty or logfmt. \\ Defaults to ++ (if (builtin.mode == .Debug) " pretty." else " logfmt.") ++ + \\ + \\ + \\--log_filter_scopes + \\ Filter out too verbose logs per scope: + \\ http, unknown_prop, event, ... \\ \\ --user_agent_suffix \\ Suffix to append to the Lightpanda/X.Y User-Agent