From 329e8cfbb32ccde52619e902bf9ab8d5f5961bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20W=C3=BClker?= Date: Fri, 18 Jul 2025 14:23:01 +0200 Subject: [PATCH] Implement `allow_declarative_shadow_roots` for async html parser (#38150) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This method was previously unimplemented, so attaching declarative shadow roots was always allowed. Testing: CI does not run with the async html parser. Try run: https://github.com/simonwuelker/servo/actions/runs/16350173930/job/46196332473 Part of https://github.com/servo/servo/issues/37418 Signed-off-by: Simon Wülker --- components/script/dom/servoparser/async_html.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 0c40e77361e..9c58e34affa 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -256,7 +256,10 @@ impl Tokenizer { }; tokenizer.insert_node(0, Dom::from_ref(document.upcast())); - let sink = Sink::new(to_tokenizer_sender.clone()); + let sink = Sink::new( + to_tokenizer_sender.clone(), + document.allow_declarative_shadow_roots(), + ); let mut form_parse_node = None; let mut parser_fragment_context = None; if let Some(fragment_context) = fragment_context { @@ -677,10 +680,11 @@ pub(crate) struct Sink { next_parse_node_id: Cell, document_node: ParseNode, sender: Sender, + allow_declarative_shadow_roots: bool, } impl Sink { - fn new(sender: Sender) -> Sink { + fn new(sender: Sender, allow_declarative_shadow_roots: bool) -> Sink { let sink = Sink { current_line: Cell::new(1), parse_node_data: RefCell::new(HashMap::new()), @@ -690,6 +694,7 @@ impl Sink { qual_name: None, }, sender, + allow_declarative_shadow_roots, }; let data = ParseNodeData::default(); sink.insert_parse_node_data(0, data); @@ -956,7 +961,10 @@ impl TreeSink for Sink { self.send_op(ParseOperation::Pop { node: node.id }); } - /// Attach declarative shadow + fn allow_declarative_shadow_roots(&self, _intended_parent: &Self::Handle) -> bool { + self.allow_declarative_shadow_roots + } + fn attach_declarative_shadow( &self, location: &Self::Handle,