diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-01-28 18:12:31 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-04-26 10:17:45 +0200 |
commit | 1b036355ced7cd6b8195970fef07383ba3561c4d (patch) | |
tree | b55825739af8dd296e911341c111ff9f497392b3 /components/script/dom/element.rs | |
parent | df81debffcdf2d73bfbc936392236fd82d61aeac (diff) | |
download | servo-1b036355ced7cd6b8195970fef07383ba3561c4d.tar.gz servo-1b036355ced7cd6b8195970fef07383ba3561c4d.zip |
Bind/unbind shadow host children to/from tree
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) { |