diff options
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 5d23400e745..dac2d29e51f 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -2784,6 +2784,16 @@ impl VirtualMethods for Element { return; } + if self.is_shadow_host() { + let shadow_root = self.shadow_root.get().unwrap(); + let shadow_root = shadow_root.upcast::<Node>(); + shadow_root.set_flag(NodeFlags::IS_CONNECTED, tree_connected); + for node in shadow_root.children() { + node.set_flag(NodeFlags::IS_CONNECTED, tree_connected); + node.bind_to_tree(tree_connected); + } + } + let doc = document_from_node(self); if let Some(ref value) = *self.id_attribute.borrow() { doc.register_named_element(self, value.clone()); @@ -2803,6 +2813,16 @@ impl VirtualMethods for Element { return; } + if self.is_shadow_host() { + let shadow_root = self.shadow_root.get().unwrap(); + let shadow_root = shadow_root.upcast::<Node>(); + shadow_root.set_flag(NodeFlags::IS_CONNECTED, false); + for node in shadow_root.children() { + node.set_flag(NodeFlags::IS_CONNECTED, false); + node.unbind_from_tree(context); + } + } + let doc = document_from_node(self); let fullscreen = doc.GetFullscreenElement(); if fullscreen.deref() == Some(self) { |