浏览代码

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))
             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