From f47c658275e2f5f5b35f8926a997a976ec60de11 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 5 Dec 2021 15:28:38 +0100 Subject: [PATCH] LibWeb: Make CSSImportRule::m_document a WeakPtr It's not safe for this to be a raw reference, as CSSImportRule can outlive the document. --- Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp | 7 +++++-- Userland/Libraries/LibWeb/CSS/CSSImportRule.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp b/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp index 80822dfa43..5d0239be13 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSImportRule.cpp @@ -21,7 +21,7 @@ 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)); - m_document_load_event_delayer.emplace(m_document); + m_document_load_event_delayer.emplace(document); } CSSImportRule::~CSSImportRule() @@ -62,6 +62,9 @@ void CSSImportRule::resource_did_load() { VERIFY(resource()); + if (!m_document) + return; + m_document_load_event_delayer.clear(); if (!resource()->has_encoded_data()) { @@ -70,7 +73,7 @@ void CSSImportRule::resource_did_load() dbgln_if(CSS_LOADER_DEBUG, "CSSImportRule: Resource did load, has encoded data. URL: {}", resource()->url()); } - auto sheet = parse_css(CSS::ParsingContext(m_document), resource()->encoded_data()); + auto sheet = parse_css(CSS::ParsingContext(*m_document), resource()->encoded_data()); if (!sheet) { dbgln_if(CSS_LOADER_DEBUG, "CSSImportRule: Failed to parse stylesheet: {}", resource()->url()); return; diff --git a/Userland/Libraries/LibWeb/CSS/CSSImportRule.h b/Userland/Libraries/LibWeb/CSS/CSSImportRule.h index 5ab22f9d8d..3958c54708 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSImportRule.h +++ b/Userland/Libraries/LibWeb/CSS/CSSImportRule.h @@ -48,7 +48,7 @@ private: virtual void resource_did_load() override; AK::URL m_url; - DOM::Document& m_document; + WeakPtr m_document; Optional m_document_load_event_delayer; RefPtr m_style_sheet; };