Bläddra i källkod

LibWeb: Do not unload during same-document history step application

See https://github.com/whatwg/html/pull/9904
Aliaksandr Kalenik 1 år sedan
förälder
incheckning
38531ce7cf
1 ändrade filer med 12 tillägg och 9 borttagningar
  1. 12 9
      Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp

+ 12 - 9
Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp

@@ -424,15 +424,18 @@ void TraversableNavigable::apply_the_history_step(int step, Optional<SourceSnaps
 
             // 1. If changingNavigableContinuation's update-only is false, then:
             if (!update_only) {
-                // 1. Unload displayedDocument given targetEntry's document.
-                displayed_document->unload(target_entry->document_state->document());
-
-                // 2. For each childNavigable of displayedDocument's descendant navigables, queue a global task on the navigation and traversal task source given
-                //    childNavigable's active window to unload childNavigable's active document.
-                for (auto child_navigable : displayed_document->descendant_navigables()) {
-                    queue_global_task(Task::Source::NavigationAndTraversal, *navigable->active_window(), [child_navigable] {
-                        child_navigable->active_document()->unload();
-                    });
+                // 1. If targetEntry's document does not equal displayedDocument, then:
+                if (target_entry->document_state->document().ptr() != displayed_document.ptr()) {
+                    // 1. Unload displayedDocument given targetEntry's document.
+                    displayed_document->unload(target_entry->document_state->document());
+
+                    // 2. For each childNavigable of displayedDocument's descendant navigables, queue a global task on the navigation and traversal task source given
+                    //    childNavigable's active window to unload childNavigable's active document.
+                    for (auto child_navigable : displayed_document->descendant_navigables()) {
+                        queue_global_task(Task::Source::NavigationAndTraversal, *navigable->active_window(), [child_navigable] {
+                            child_navigable->active_document()->unload();
+                        });
+                    }
                 }
 
                 // 3. Activate history entry targetEntry for navigable.