瀏覽代碼

LibWeb: Bail on applying the history step when no active window

This is an ad-hoc hack papering over the fact that we can apparently
end up in these places without an active window, and proceeding without
one leads to assertions on WPT.
Andreas Kling 7 月之前
父節點
當前提交
7ea7352bf3
共有 1 個文件被更改,包括 6 次插入4 次删除
  1. 6 4
      Libraries/LibWeb/HTML/TraversableNavigable.cpp

+ 6 - 4
Libraries/LibWeb/HTML/TraversableNavigable.cpp

@@ -815,15 +815,17 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_
 
     // 18. For each navigable of nonchangingNavigablesThatStillNeedUpdates, queue a global task on the navigation and traversal task source given navigable's active window to run the steps:
     for (auto& navigable : non_changing_navigables_that_still_need_updates) {
-        if (navigable->has_been_destroyed()) {
+        // AD-HOC: This check is not in the spec but we should not continue navigation if navigable has been destroyed,
+        //         or if there's no active window.
+        if (navigable->has_been_destroyed() || !navigable->active_window()) {
             ++completed_non_changing_jobs;
             continue;
         }
 
-        VERIFY(navigable->active_window());
         queue_global_task(Task::Source::NavigationAndTraversal, *navigable->active_window(), GC::create_function(heap(), [&] {
-            // NOTE: This check is not in the spec but we should not continue navigation if navigable has been destroyed.
-            if (navigable->has_been_destroyed()) {
+            // AD-HOC: This check is not in the spec but we should not continue navigation if navigable has been destroyed,
+            //         or if there's no active window.
+            if (navigable->has_been_destroyed() || !navigable->active_window()) {
                 ++completed_non_changing_jobs;
                 return;
             }