From ccd4b113a804e1b5650683d1fed7ecea83b17d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20W=C3=BClker?= Date: Mon, 10 Mar 2025 17:34:09 +0100 Subject: [PATCH] Don't run scripts in documents that don't have a browsing context (#35871) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Don't run scripts in document that don't have a browsing context For confirmation that this is correct, refer to the note under Step 3 of https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring. Signed-off-by: Simon Wülker * Update WPT expectations Signed-off-by: Simon Wülker --------- Signed-off-by: Simon Wülker --- components/script/dom/servoparser/async_html.rs | 4 ++++ components/script/dom/servoparser/html.rs | 1 + .../meta/domparsing/DOMParser-parseFromString-html.html.ini | 3 --- .../parsing-html-fragments/tokenizer-modes-001.html.ini | 3 +++ 4 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 tests/wpt/meta/domparsing/DOMParser-parseFromString-html.html.ini create mode 100644 tests/wpt/meta/html/syntax/parsing-html-fragments/tokenizer-modes-001.html.ini diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 863ed3c917b..83d3dddfc54 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -267,6 +267,7 @@ impl Tokenizer { // Create new thread for HtmlTokenizer. This is where parser actions // will be generated from the input provided. These parser actions are then passed // onto the main thread to be executed. + let scripting_enabled = document.has_browsing_context(); thread::Builder::new() .name(format!("Parse:{}", tokenizer.url.debug_compact())) .spawn(move || { @@ -277,6 +278,7 @@ impl Tokenizer { form_parse_node, to_tokenizer_sender, html_tokenizer_receiver, + scripting_enabled, ); }) .expect("HTML Parser thread spawning failed"); @@ -573,9 +575,11 @@ fn run( form_parse_node: Option, sender: Sender, receiver: Receiver, + scripting_enabled: bool, ) { let options = TreeBuilderOpts { ignore_missing_rules: true, + scripting_enabled, ..Default::default() }; diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs index 2d07bf2f088..5bbee966995 100644 --- a/components/script/dom/servoparser/html.rs +++ b/components/script/dom/servoparser/html.rs @@ -56,6 +56,7 @@ impl Tokenizer { let options = TreeBuilderOpts { ignore_missing_rules: true, + scripting_enabled: document.has_browsing_context(), ..Default::default() }; diff --git a/tests/wpt/meta/domparsing/DOMParser-parseFromString-html.html.ini b/tests/wpt/meta/domparsing/DOMParser-parseFromString-html.html.ini deleted file mode 100644 index 8a5fe453881..00000000000 --- a/tests/wpt/meta/domparsing/DOMParser-parseFromString-html.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[DOMParser-parseFromString-html.html] - [must be parsed with scripting disabled, so noscript works] - expected: FAIL diff --git a/tests/wpt/meta/html/syntax/parsing-html-fragments/tokenizer-modes-001.html.ini b/tests/wpt/meta/html/syntax/parsing-html-fragments/tokenizer-modes-001.html.ini new file mode 100644 index 00000000000..384f5a63b3a --- /dev/null +++ b/tests/wpt/meta/html/syntax/parsing-html-fragments/tokenizer-modes-001.html.ini @@ -0,0 +1,3 @@ +[tokenizer-modes-001.html] + [ should not break out of noscript.] + expected: FAIL