@@ -148,36 +148,63 @@ pub const Session = struct {
148
148
};
149
149
150
150
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
+ };
175
156
176
157
if (self .page ) | * page | {
177
158
return page .wait (wait_ms );
178
159
}
179
160
return .no_page ;
180
161
}
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
+ }
181
208
};
182
209
183
210
const QueuedNavigation = struct {
0 commit comments