@@ -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
183210const QueuedNavigation = struct {
0 commit comments