Selaa lähdekoodia

LibWeb: Make Element::set_shadow_root() disconnect any previous root

Andreas Kling 3 vuotta sitten
vanhempi
commit
b1096c2ae4

+ 1 - 1
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

+ 4 - 1
Userland/Libraries/LibWeb/DOM/Element.cpp

@@ -382,8 +382,11 @@ void Element::set_shadow_root(RefPtr<ShadowRoot> 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();
 }
 

+ 1 - 1
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

+ 1 - 1
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()