From b1096c2ae4759c97cc428fac9afea3396bd82a72 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 16 Mar 2022 00:26:40 +0100 Subject: [PATCH] LibWeb: Make Element::set_shadow_root() disconnect any previous root --- Userland/Libraries/LibWeb/DOM/DocumentFragment.h | 2 +- Userland/Libraries/LibWeb/DOM/Element.cpp | 5 ++++- Userland/Libraries/LibWeb/DOM/ShadowRoot.cpp | 2 +- Userland/Libraries/LibWeb/HTML/HTMLTemplateElement.cpp | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibWeb/DOM/DocumentFragment.h b/Userland/Libraries/LibWeb/DOM/DocumentFragment.h index 5b208500ab..2d3aca8e44 100644 --- a/Userland/Libraries/LibWeb/DOM/DocumentFragment.h +++ b/Userland/Libraries/LibWeb/DOM/DocumentFragment.h @@ -29,7 +29,7 @@ public: Element* host() { return m_host; } Element const* host() const { return m_host; } - void set_host(Element& host) { m_host = host; } + void set_host(Element* host) { m_host = host; } private: // https://dom.spec.whatwg.org/#concept-documentfragment-host diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 2c0d5462ed..7004a9c534 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -382,8 +382,11 @@ void Element::set_shadow_root(RefPtr shadow_root) { if (m_shadow_root == shadow_root) return; + if (m_shadow_root) + m_shadow_root->set_host(nullptr); m_shadow_root = move(shadow_root); - m_shadow_root->set_host(*this); + if (m_shadow_root) + m_shadow_root->set_host(this); invalidate_style(); } diff --git a/Userland/Libraries/LibWeb/DOM/ShadowRoot.cpp b/Userland/Libraries/LibWeb/DOM/ShadowRoot.cpp index 03e2ca69af..3bb337b3d6 100644 --- a/Userland/Libraries/LibWeb/DOM/ShadowRoot.cpp +++ b/Userland/Libraries/LibWeb/DOM/ShadowRoot.cpp @@ -15,7 +15,7 @@ namespace Web::DOM { ShadowRoot::ShadowRoot(Document& document, Element& host) : DocumentFragment(document) { - set_host(host); + set_host(&host); } // https://dom.spec.whatwg.org/#ref-for-get-the-parent%E2%91%A6 diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTemplateElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTemplateElement.cpp index 28384e281f..27b917af46 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLTemplateElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLTemplateElement.cpp @@ -13,7 +13,7 @@ HTMLTemplateElement::HTMLTemplateElement(DOM::Document& document, DOM::Qualified : HTMLElement(document, move(qualified_name)) { m_content = adopt_ref(*new DOM::DocumentFragment(appropriate_template_contents_owner_document(document))); - m_content->set_host(*this); + m_content->set_host(this); } HTMLTemplateElement::~HTMLTemplateElement()