diff --git a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp index 2ba2f5fab7..478d569ac9 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp @@ -36,7 +36,7 @@ namespace Web::HTML { HTMLLinkElement::HTMLLinkElement(DOM::Document& document, QualifiedName qualified_name) : HTMLElement(document, move(qualified_name)) - , m_css_loader(document) + , m_css_loader(*this) { m_css_loader.on_load = [&] { document.update_style(); @@ -53,10 +53,8 @@ void HTMLLinkElement::inserted_into(Node& node) if (m_relationship & Relationship::Stylesheet && !(m_relationship & Relationship::Alternate)) { m_css_loader.load_from_url(document().complete_url(href())); - if (auto sheet = m_css_loader.style_sheet()) { - sheet->set_owner_node(this); + if (auto sheet = m_css_loader.style_sheet()) document().style_sheets().add_sheet(sheet.release_nonnull()); - } } } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h index f9d4434cd0..fc0df34bad 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h @@ -55,8 +55,8 @@ private: }; }; - unsigned m_relationship { 0 }; CSSLoader m_css_loader; + unsigned m_relationship { 0 }; }; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp index 05f8632987..9dece219dc 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp @@ -34,7 +34,7 @@ namespace Web::HTML { HTMLStyleElement::HTMLStyleElement(DOM::Document& document, QualifiedName qualified_name) : HTMLElement(document, move(qualified_name)) - , m_css_loader(document) + , m_css_loader(*this) { m_css_loader.on_load = [&] { document.update_style(); @@ -54,10 +54,8 @@ void HTMLStyleElement::children_changed() }); m_css_loader.load_from_text(builder.to_string()); - if (auto sheet = m_css_loader.style_sheet()) { - sheet->set_owner_node(this); + if (auto sheet = m_css_loader.style_sheet()) document().style_sheets().add_sheet(sheet.release_nonnull()); - } HTMLElement::children_changed(); } diff --git a/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp b/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp index ec49234d30..c029373ced 100644 --- a/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp +++ b/Userland/Libraries/LibWeb/Loader/CSSLoader.cpp @@ -29,21 +29,24 @@ #include #include #include +#include #include #include namespace Web { -CSSLoader::CSSLoader(DOM::Document& document) - : m_document(&document) +CSSLoader::CSSLoader(DOM::Element& owner_element) + : m_owner_element(owner_element) { } void CSSLoader::load_from_text(const String& text) { - m_style_sheet = parse_css(CSS::ParsingContext(*m_document), text); - if (!m_style_sheet) + m_style_sheet = parse_css(CSS::ParsingContext(m_owner_element.document()), text); + if (!m_style_sheet) { m_style_sheet = CSS::CSSStyleSheet::create({}); + m_style_sheet->set_owner_node(&m_owner_element); + } load_next_import_if_needed(); } @@ -51,6 +54,7 @@ void CSSLoader::load_from_text(const String& text) void CSSLoader::load_from_url(const URL& url) { m_style_sheet = CSS::CSSStyleSheet::create({}); + m_style_sheet->set_owner_node(&m_owner_element); LoadRequest request; request.set_url(url); @@ -67,7 +71,7 @@ void CSSLoader::resource_did_load() dbgln_if(CSS_LOADER_DEBUG, "CSSLoader: 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_owner_element.document()), resource()->encoded_data()); if (!sheet) { dbgln_if(CSS_LOADER_DEBUG, "CSSLoader: Failed to parse stylesheet: {}", resource()->url()); return; diff --git a/Userland/Libraries/LibWeb/Loader/CSSLoader.h b/Userland/Libraries/LibWeb/Loader/CSSLoader.h index 01eb265433..fe2166b8e0 100644 --- a/Userland/Libraries/LibWeb/Loader/CSSLoader.h +++ b/Userland/Libraries/LibWeb/Loader/CSSLoader.h @@ -34,7 +34,7 @@ namespace Web { class CSSLoader : public ResourceClient { public: - CSSLoader(DOM::Document& document); + explicit CSSLoader(DOM::Element& owner_element); void load_from_text(const String&); void load_from_url(const URL&); @@ -51,8 +51,9 @@ private: virtual void resource_did_load() override; virtual void resource_did_fail() override; + DOM::Element& m_owner_element; + RefPtr m_style_sheet; - const DOM::Document* m_document; }; }