@@ -242,6 +242,8 @@ final class BrowserWindowController: NSWindowController, NSWindowDelegate,
242242 private var lastProgress : CGFloat = 0
243243 private var onStartPage = false
244244 private var pendingRestoredStartupURL : URL ?
245+ private var pendingAgentNavigation : WKNavigation ?
246+ private var pendingAgentNavigationFailed = false
245247 private var agentControlEnabled = false
246248 var onClose : ( ( ) -> Void ) ?
247249
@@ -478,6 +480,18 @@ final class BrowserWindowController: NSWindowController, NSWindowDelegate,
478480 load ( url)
479481 }
480482
483+ func beginAgentNavigation( to url: URL ) -> Bool {
484+ pendingRestoredStartupURL = nil
485+ onStartPage = false
486+ pendingAgentNavigationFailed = false
487+ pendingAgentNavigation = webView. load ( URLRequest ( url: url) )
488+ return pendingAgentNavigation != nil
489+ }
490+
491+ func agentNavigationStatus( ) -> ( pending: Bool , failed: Bool ) {
492+ ( pendingAgentNavigation != nil , pendingAgentNavigationFailed)
493+ }
494+
481495 private func load( _ url: URL ) {
482496 onStartPage = false
483497 if url. isFileURL {
@@ -694,6 +708,7 @@ final class BrowserWindowController: NSWindowController, NSWindowDelegate,
694708 }
695709
696710 func webView( _ webView: WKWebView , didFinish navigation: WKNavigation ! ) {
711+ completeAgentNavigation ( navigation, failed: false )
697712 if let job = snapJob {
698713 snapJob = nil
699714 runSnapJob ( job)
@@ -706,13 +721,21 @@ final class BrowserWindowController: NSWindowController, NSWindowDelegate,
706721 }
707722
708723 func webView( _ webView: WKWebView , didFailProvisionalNavigation navigation: WKNavigation ! , withError error: Error ) {
724+ completeAgentNavigation ( navigation, failed: true )
709725 handleLoadError ( error)
710726 }
711727
712728 func webView( _ webView: WKWebView , didFail navigation: WKNavigation ! , withError error: Error ) {
729+ completeAgentNavigation ( navigation, failed: true )
713730 handleLoadError ( error)
714731 }
715732
733+ private func completeAgentNavigation( _ navigation: WKNavigation ? , failed: Bool ) {
734+ guard let navigation, pendingAgentNavigation === navigation else { return }
735+ pendingAgentNavigation = nil
736+ pendingAgentNavigationFailed = failed
737+ }
738+
716739 private func handleLoadError( _ error: Error ) {
717740 let e = error as NSError
718741 // Ignore cancelled loads and "frame load interrupted" (downloads, redirects).
0 commit comments