diff --git a/components/script/dom/documentorshadowroot.rs b/components/script/dom/documentorshadowroot.rs index 96323156ba8..c814b75cfda 100644 --- a/components/script/dom/documentorshadowroot.rs +++ b/components/script/dom/documentorshadowroot.rs @@ -303,7 +303,7 @@ impl DocumentOrShadowRoot { root: DomRoot, ) { debug!("Adding named element {:p}: {:p} id={}", self, element, id); - assert!(element.upcast::().is_connected()); + assert!(element.upcast::().is_connected_to_tree()); assert!(!id.is_empty()); let mut id_map = id_map.borrow_mut(); let elements = id_map.entry(id.clone()).or_default(); diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index ca7effd3e09..be31e9ba122 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -3510,8 +3510,9 @@ impl VirtualMethods for Element { None } }); + let containing_shadow_root = self.containing_shadow_root(); - if node.is_connected() { + if node.is_connected_to_tree() { let value = attr.value().as_atom().clone(); match mutation { AttributeMutation::Set(old_value) => { diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 9d5076c170a..29079cda314 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -766457,6 +766457,13 @@ {} ] ], + "getElementById-dynamic-002.html": [ + "8fb1934c60753c39c081fa97987bbdf1cc68a521", + [ + null, + {} + ] + ], "historical.html": [ "4fa8be1dbc9537b904d51b74e8de37dc36a471d6", [ diff --git a/tests/wpt/tests/shadow-dom/getElementById-dynamic-002.html b/tests/wpt/tests/shadow-dom/getElementById-dynamic-002.html new file mode 100644 index 00000000000..8fb1934c607 --- /dev/null +++ b/tests/wpt/tests/shadow-dom/getElementById-dynamic-002.html @@ -0,0 +1,20 @@ + +Shadow DOM: Modifying an element ID inside a disconnected shadow root does not break getElementById + + + + +
+