aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-01-28 18:12:31 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-04-26 10:17:45 +0200
commit1b036355ced7cd6b8195970fef07383ba3561c4d (patch)
treeb55825739af8dd296e911341c111ff9f497392b3 /components/script/dom/element.rs
parentdf81debffcdf2d73bfbc936392236fd82d61aeac (diff)
downloadservo-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.rs20
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) {