mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-06-11 09:35:59 -04:00
use session arg to load cookies from file
This commit is contained in:
@@ -395,7 +395,7 @@ pub const BrowserContext = struct {
|
||||
|
||||
const session = try cdp.browser.newSession(notification);
|
||||
if (cdp.client.app.config.cookieFile()) |cookie_path| {
|
||||
lp.cookies.loadFromFile(&session.cookie_jar, cookie_path) catch |err| {
|
||||
lp.cookies.loadFromFile(session, cookie_path) catch |err| {
|
||||
log.err(.app, "cookie load error", .{ .err = err });
|
||||
};
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
const std = @import("std");
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
||||
const Session = @import("browser/Session.zig");
|
||||
const Cookie = @import("browser/webapi/storage/Cookie.zig");
|
||||
const log = @import("log.zig");
|
||||
|
||||
@@ -23,7 +24,7 @@ const log = @import("log.zig");
|
||||
/// The file format is an array of objects with: name, value, domain, path,
|
||||
/// expires (optional, float), secure (optional, bool), httpOnly (optional, bool).
|
||||
/// This matches the CDP Network.Cookie format used by Puppeteer and Playwright.
|
||||
pub fn loadFromFile(jar: *Cookie.Jar, path: []const u8) !void {
|
||||
pub fn loadFromFile(session: *Session, path: []const u8) !void {
|
||||
const file = std.fs.cwd().openFile(path, .{}) catch |err| switch (err) {
|
||||
error.FileNotFound => return, // No file yet, nothing to load
|
||||
else => {
|
||||
@@ -33,13 +34,15 @@ pub fn loadFromFile(jar: *Cookie.Jar, path: []const u8) !void {
|
||||
};
|
||||
defer file.close();
|
||||
|
||||
const content = file.readToEndAlloc(jar.allocator, 1024 * 1024) catch |err| {
|
||||
const call_arena = try session.getArena(.medium, "cookies.jar.allocatorloadFromFile");
|
||||
defer session.releaseArena(call_arena);
|
||||
|
||||
const content = file.readToEndAlloc(call_arena, 1024 * 1024) catch |err| {
|
||||
log.err(.app, "failed to read cookies file", .{ .path = path, .err = err });
|
||||
return err;
|
||||
};
|
||||
defer jar.allocator.free(content);
|
||||
|
||||
const parsed = std.json.parseFromSlice([]const JsonCookie, jar.allocator, content, .{
|
||||
const parsed = std.json.parseFromSlice([]const JsonCookie, call_arena, content, .{
|
||||
.ignore_unknown_fields = true,
|
||||
}) catch |err| {
|
||||
log.err(.app, "failed to parse cookies JSON", .{ .path = path, .err = err });
|
||||
@@ -47,6 +50,7 @@ pub fn loadFromFile(jar: *Cookie.Jar, path: []const u8) !void {
|
||||
};
|
||||
defer parsed.deinit();
|
||||
|
||||
const jar = &session.cookie_jar;
|
||||
var loaded: usize = 0;
|
||||
for (parsed.value) |jc| {
|
||||
var arena = std.heap.ArenaAllocator.init(jar.allocator);
|
||||
|
||||
@@ -69,7 +69,7 @@ pub fn fetch(app: *App, url: [:0]const u8, opts: FetchOpts) !void {
|
||||
var session = try browser.newSession(notification);
|
||||
|
||||
if (app.config.cookieFile()) |cookie_path| {
|
||||
cookies.loadFromFile(&session.cookie_jar, cookie_path) catch |err| {
|
||||
cookies.loadFromFile(session, cookie_path) catch |err| {
|
||||
log.err(.app, "cookie load error", .{ .err = err });
|
||||
};
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ pub fn init(allocator: std.mem.Allocator, app: *App, writer: *std.io.Writer) !*S
|
||||
self.session = try self.browser.newSession(self.notification);
|
||||
|
||||
if (app.config.cookieFile()) |cookie_path| {
|
||||
lp.cookies.loadFromFile(&self.session.cookie_jar, cookie_path) catch |err| {
|
||||
lp.cookies.loadFromFile(self.session, cookie_path) catch |err| {
|
||||
lp.log.err(.mcp, "cookie load error", .{ .err = err });
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user