From 9f02afd8fea1501f262fa03bff56c6fde3a82c6f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 15 Feb 2022 14:10:16 +0100 Subject: [PATCH] LibWeb: Don't delay document load event forever with cached CSS imports If we try to @import a stylesheet that was already cached, we'll get a synchronous resource_did_load() callback. Because of this, it's necessary to set up the document load event delayer *before* calling set_resource(), as otherwise we'd be stuck without a load event forever. --- Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp b/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp index 5d0239be13..652bb316c1 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp @@ -20,8 +20,12 @@ CSSImportRule::CSSImportRule(AK::URL url, DOM::Document& document) { dbgln_if(CSS_LOADER_DEBUG, "CSSImportRule: Loading import URL: {}", m_url); auto request = LoadRequest::create_for_url_on_page(m_url, document.page()); - set_resource(ResourceLoader::the().load_resource(Resource::Type::Generic, request)); + + // NOTE: Mark this rule as delaying the document load event *before* calling set_resource() + // as it may trigger a synchronous resource_did_load() callback. m_document_load_event_delayer.emplace(document); + + set_resource(ResourceLoader::the().load_resource(Resource::Type::Generic, request)); } CSSImportRule::~CSSImportRule()