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 { 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 // 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 // bad if old requests went to the new page, so let's make double sure
self.browser.http_client.abort(); self.browser.http_client.abort();
@@ -164,19 +195,15 @@ pub const Session = struct {
.err = err, .err = err,
.url = qn.url, .url = qn.url,
}); });
return .done; return err;
}; };
page.navigate(qn.url, qn.opts) catch |err| { page.navigate(qn.url, qn.opts) catch |err| {
log.err(.browser, "queued navigation error", .{ .err = err, .url = qn.url }); log.err(.browser, "queued navigation error", .{ .err = err, .url = qn.url });
return .done; return err;
}; };
}
if (self.page) |*page| { return true;
return page.wait(wait_ms);
}
return .no_page;
} }
}; };

View File

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