Determine the initial state for fragment parsing using the scripting flag of the context element (#37704)

When parsing a html fragment, the initial parser state depends on
whether or not scripting is enabled. So far we've used the scripting
flag of the parser, but that is wrong - the parser's scripting flag is
always false, because the fragment document has no browsing context.
Instead we should use the scripting flag of the context element.

Testing: A new web platform test passes

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2025-06-26 22:40:13 +02:00 committed by GitHub
parent 4dded465a4
commit cbb0407ae6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 48 additions and 35 deletions

View file

@ -74,20 +74,22 @@ impl Tokenizer {
..Default::default()
};
let inner = if let Some(fc) = fragment_context {
let tb = TreeBuilder::new_for_fragment(
let inner = if let Some(fragment_context) = fragment_context {
let tree_builder = TreeBuilder::new_for_fragment(
sink,
Dom::from_ref(fc.context_elem),
fc.form_elem.map(Dom::from_ref),
Dom::from_ref(fragment_context.context_elem),
fragment_context.form_elem.map(Dom::from_ref),
options,
);
let tok_options = TokenizerOpts {
initial_state: Some(tb.tokenizer_state_for_context_elem()),
let tokenizer_options = TokenizerOpts {
initial_state: Some(tree_builder.tokenizer_state_for_context_elem(
fragment_context.context_element_allows_scripting,
)),
..Default::default()
};
HtmlTokenizer::new(tb, tok_options)
HtmlTokenizer::new(tree_builder, tokenizer_options)
} else {
HtmlTokenizer::new(TreeBuilder::new(sink, options), Default::default())
};