Skip to content

Commit 27b6fd5

Browse files
authored
Merge pull request #1104 from lightpanda-io/fetch_wait
Add Session.fetchWait so that 'fetch' mode will follow navigation
2 parents 08a50a8 + 2b84712 commit 27b6fd5

File tree

2 files changed

+52
-25
lines changed

2 files changed

+52
-25
lines changed

src/browser/session.zig

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -148,36 +148,63 @@ pub const Session = struct {
148148
};
149149

150150
pub fn wait(self: *Session, wait_ms: i32) WaitResult {
151-
if (self.queued_navigation) |qn| {
152-
// This was already aborted on the page, but it would be pretty
153-
// bad if old requests went to the new page, so let's make double sure
154-
self.browser.http_client.abort();
155-
156-
// Page.navigateFromWebAPI terminatedExecution. If we don't resume
157-
// it before doing a shutdown we'll get an error.
158-
self.executor.resumeExecution();
159-
self.removePage();
160-
self.queued_navigation = null;
161-
162-
const page = self.createPage() catch |err| {
163-
log.err(.browser, "queued navigation page error", .{
164-
.err = err,
165-
.url = qn.url,
166-
});
167-
return .done;
168-
};
169-
170-
page.navigate(qn.url, qn.opts) catch |err| {
171-
log.err(.browser, "queued navigation error", .{ .err = err, .url = qn.url });
172-
return .done;
173-
};
174-
}
151+
_ = self.processQueuedNavigation() catch {
152+
// There was an error processing the queue navigation. This already
153+
// logged the error, just return.
154+
return .done;
155+
};
175156

176157
if (self.page) |*page| {
177158
return page.wait(wait_ms);
178159
}
179160
return .no_page;
180161
}
162+
163+
pub fn fetchWait(self: *Session, wait_ms: i32) void {
164+
while (true) {
165+
if (self.page == null) {
166+
return;
167+
}
168+
_ = self.page.?.wait(wait_ms);
169+
const navigated = self.processQueuedNavigation() catch {
170+
// There was an error processing the queue navigation. This already
171+
// logged the error, just return.
172+
return;
173+
};
174+
175+
if (navigated == false) {
176+
return;
177+
}
178+
}
179+
}
180+
181+
fn processQueuedNavigation(self: *Session) !bool {
182+
const qn = self.queued_navigation orelse return false;
183+
// This was already aborted on the page, but it would be pretty
184+
// bad if old requests went to the new page, so let's make double sure
185+
self.browser.http_client.abort();
186+
187+
// Page.navigateFromWebAPI terminatedExecution. If we don't resume
188+
// it before doing a shutdown we'll get an error.
189+
self.executor.resumeExecution();
190+
self.removePage();
191+
self.queued_navigation = null;
192+
193+
const page = self.createPage() catch |err| {
194+
log.err(.browser, "queued navigation page error", .{
195+
.err = err,
196+
.url = qn.url,
197+
});
198+
return err;
199+
};
200+
201+
page.navigate(qn.url, qn.opts) catch |err| {
202+
log.err(.browser, "queued navigation error", .{ .err = err, .url = qn.url });
203+
return err;
204+
};
205+
206+
return true;
207+
}
181208
};
182209

183210
const QueuedNavigation = struct {

src/main.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ fn run(alloc: Allocator) !void {
176176
},
177177
};
178178

179-
_ = session.wait(5000); // 5 seconds
179+
_ = session.fetchWait(5000); // 5 seconds
180180

181181
// dump
182182
if (opts.dump) {

0 commit comments

Comments
 (0)