From 57bcdfed10d99b975b954c72e44bb132c3ee4129 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Fri, 21 Aug 2026 18:36:53 +0800 Subject: [PATCH] chore: Simplify Network and HttpClient init Remove app field from Network --- src/App.zig | 2 +- src/browser/Browser.zig | 2 +- src/network/HttpClient.zig | 21 +++++++++++++-------- src/network/Network.zig | 10 +++++----- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/App.zig b/src/App.zig index c2141a839..817acdfd3 100644 --- a/src/App.zig +++ b/src/App.zig @@ -67,7 +67,7 @@ pub fn init(allocator: Allocator, config: *const Config) !*App { try app.watchdog.start(); errdefer app.watchdog.deinit(); - app.network = try Network.init(allocator, app, config); + app.network = try Network.init(app); errdefer app.network.deinit(); app.app_dir_path = getAndMakeAppDir(allocator); diff --git a/src/browser/Browser.zig b/src/browser/Browser.zig index 3302a48bd..0f9e6d425 100644 --- a/src/browser/Browser.zig +++ b/src/browser/Browser.zig @@ -128,7 +128,7 @@ pub fn init(self: *Browser, app: *App, opts: InitOpts, cdp: ?*CDP) !void { .watchdog_entry = undefined, }; self.env.protectHeapLimit(); - try self.http_client.init(allocator, &app.network, cdp); + try self.http_client.init(app, cdp); self.watchdog_entry = .{ .env = &self.env, diff --git a/src/network/HttpClient.zig b/src/network/HttpClient.zig index 06e437184..9a90c1086 100644 --- a/src/network/HttpClient.zig +++ b/src/network/HttpClient.zig @@ -190,14 +190,17 @@ obey_robots: bool, robots: RobotsGate, url_blocklist: ?UrlBlocklist, -pub fn init(self: *Client, allocator: Allocator, network: *Network, cdp: ?*CDP) !void { - var handles = try http.Handles.init(network.config); +pub fn init(self: *Client, app: *lp.App, cdp: ?*CDP) !void { + const config = app.config; + const allocator = app.allocator; + + var handles = try http.Handles.init(config); errdefer handles.deinit(); - const http_proxy = network.config.httpProxy(); + const http_proxy = config.httpProxy(); var url_blocklist: ?UrlBlocklist = null; - if (network.config.blockedUrlPatterns()) |initial_patterns| { + if (config.blockedUrlPatterns()) |initial_patterns| { var patterns: std.ArrayList([]const u8) = .empty; defer patterns.deinit(allocator); @@ -211,10 +214,12 @@ pub fn init(self: *Client, allocator: Allocator, network: *Network, cdp: ?*CDP) } errdefer if (url_blocklist) |*blocklist| blocklist.deinit(); + const network = &app.network; + self.* = Client{ .handles = handles, .network = network, - .allocator = allocator, + .allocator = app.allocator, .cdp = cdp, .inbox = .{}, .cache = &network.cache, @@ -224,14 +229,14 @@ pub fn init(self: *Client, allocator: Allocator, network: *Network, cdp: ?*CDP) .tls_verify = network.config.tlsVerifyHost(), .max_response_size = network.config.httpMaxResponseSize() orelse 1 * 1024 * 1024 * 1024, // 1 GiB - .serve_mode = network.config.mode == .serve, - .obey_robots = network.config.obeyRobots(), + .serve_mode = config.mode == .serve, + .obey_robots = config.obeyRobots(), .robots = .{ .network = network, .single_flight = .init(allocator), }, .url_blocklist = url_blocklist, - .arena_pool = &network.app.arena_pool, + .arena_pool = &app.arena_pool, }; } diff --git a/src/network/Network.zig b/src/network/Network.zig index 2c532d010..525743b44 100644 --- a/src/network/Network.zig +++ b/src/network/Network.zig @@ -81,10 +81,8 @@ pub const CdpLink = struct { // Number of fixed pollfds entries (wakeup pipe + listener). const PSEUDO_POLLFDS = 2; -allocator: Allocator, - -app: *App, cache: Cache, +allocator: Allocator, config: *const Config, robot_store: RobotStore, web_bot_auth: ?WebBotAuth, @@ -140,12 +138,15 @@ cdp_start: usize, /// Optional IP filter for blocking requests to private/internal networks (--block-private-networks). ip_filter: ?*IpFilter = null, -pub fn init(allocator: Allocator, app: *App, config: *const Config) !Network { +pub fn init(app: *App) !Network { libcurl.curl_global_init(.{ .ssl = true }, null) catch |err| { lp.assert(false, "curl global init", .{ .err = err }); }; errdefer libcurl.curl_global_cleanup(); + const config = app.config; + const allocator = app.allocator; + const pipe = try sys_net.pipe2(.{ .NONBLOCK = true, .CLOEXEC = true }); // pollfds layout: @@ -207,7 +208,6 @@ pub fn init(allocator: Allocator, app: *App, config: *const Config) !Network { errdefer cache.deinit(); return .{ - .app = app, .config = config, .allocator = allocator, .certificates = certificates,