Merge pull request #1104 from lightpanda-io/fetch_wait

Add Session.fetchWait so that 'fetch' mode will follow navigation
This commit is contained in:
Karl Seguin
2025-10-02 09:22:29 +08:00
committed by GitHub
2 changed files with 52 additions and 25 deletions

View File

@@ -148,7 +148,38 @@ pub const Session = struct {
};
pub fn wait(self: *Session, wait_ms: i32) WaitResult {
if (self.queued_navigation) |qn| {
_ = self.processQueuedNavigation() catch {
// There was an error processing the queue navigation. This already
// logged the error, just return.
return .done;
};
if (self.page) |*page| {
return page.wait(wait_ms);
}
return .no_page;
}
pub fn fetchWait(self: *Session, wait_ms: i32) void {
while (true) {
if (self.page == null) {
return;
}
_ = self.page.?.wait(wait_ms);
const navigated = self.processQueuedNavigation() catch {
// There was an error processing the queue navigation. This already
// logged the error, just return.
return;
};
if (navigated == false) {
return;
}
}
}
fn processQueuedNavigation(self: *Session) !bool {
const qn = self.queued_navigation orelse return false;
// This was already aborted on the page, but it would be pretty
// bad if old requests went to the new page, so let's make double sure
self.browser.http_client.abort();
@@ -164,19 +195,15 @@ pub const Session = struct {
.err = err,
.url = qn.url,
});
return .done;
return err;
};
page.navigate(qn.url, qn.opts) catch |err| {
log.err(.browser, "queued navigation error", .{ .err = err, .url = qn.url });
return .done;
return err;
};
}
if (self.page) |*page| {
return page.wait(wait_ms);
}
return .no_page;
return true;
}
};

View File

@@ -176,7 +176,7 @@ fn run(alloc: Allocator) !void {
},
};
_ = session.wait(5000); // 5 seconds
_ = session.fetchWait(5000); // 5 seconds
// dump
if (opts.dump) {