Переглянути джерело

DOM: Check for navigable destruction in declarative refresh timer

If the Document's navigable has been destroyed since we started this
timer, or it's no longer the active document of its navigable, we
shouldn't navigate to it.
Andrew Kaster 1 рік тому
батько
коміт
7b67fa706f
1 змінених файлів з 5 додано та 2 видалено
  1. 5 2
      Userland/Libraries/LibWeb/DOM/Document.cpp

+ 5 - 2
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -4062,8 +4062,11 @@ void Document::shared_declarative_refresh_steps(StringView input, JS::GCPtr<HTML
         if (has_meta_element && has_flag(active_sandboxing_flag_set(), HTML::SandboxingFlagSet::SandboxedAutomaticFeatures))
         if (has_meta_element && has_flag(active_sandboxing_flag_set(), HTML::SandboxingFlagSet::SandboxedAutomaticFeatures))
             return;
             return;
 
 
-        VERIFY(navigable());
-        MUST(navigable()->navigate({ .url = url_record, .source_document = *this }));
+        auto navigable = this->navigable();
+        if (!navigable || navigable->has_been_destroyed())
+            return;
+
+        MUST(navigable->navigate({ .url = url_record, .source_document = *this, .history_handling = Bindings::NavigationHistoryBehavior::Replace }));
     });
     });
 
 
     // For the purposes of the previous paragraph, a refresh is said to have come due as soon as the later of the
     // For the purposes of the previous paragraph, a refresh is said to have come due as soon as the later of the