From d1de3cc407722751cca0773eb64252add193699e Mon Sep 17 00:00:00 2001 From: Domenico Rizzo Date: Sat, 4 Jan 2025 14:22:24 +0100 Subject: [PATCH] Document's current script should not be updated when executing script elements inside shadow trees (#34787) * check if node is in shadow tree Signed-off-by: Domenico Rizzo * Removed meta ini related file Signed-off-by: Domenico Rizzo * refactored as_parent()'s calls Signed-off-by: Domenico Rizzo --------- Signed-off-by: Domenico Rizzo --- components/script/dom/htmlscriptelement.rs | 10 +++++++++- .../Document-prototype-currentScript.html.ini | 7 ------- 2 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 tests/wpt/meta/shadow-dom/Document-prototype-currentScript.html.ini diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 3b81f9bb1e1..59540b298a7 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -34,6 +34,7 @@ use style::str::{StaticStringVec, HTML_SPACE_CHARACTERS}; use uuid::Uuid; use crate::document_loader::LoadType; +use crate::dom::activation::Activatable; use crate::dom::attr::Attr; use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; use crate::dom::bindings::codegen::Bindings::HTMLScriptElementBinding::HTMLScriptElementMethods; @@ -66,6 +67,7 @@ use crate::script_module::{ use crate::script_runtime::CanGc; use crate::task_source::{TaskSource, TaskSourceName}; use crate::unminify::{unminify_js, ScriptSource}; +use crate::HasParent; impl ScriptSource for ScriptOrigin { fn unminified_dir(&self) -> Option { @@ -946,7 +948,13 @@ impl HTMLScriptElement { let old_script = document.GetCurrentScript(); match script.type_ { - ScriptType::Classic => document.set_current_script(Some(self)), + ScriptType::Classic => { + if self.upcast::().is_in_shadow_tree() { + document.set_current_script(None) + } else { + document.set_current_script(Some(self)) + } + }, ScriptType::Module => document.set_current_script(None), } diff --git a/tests/wpt/meta/shadow-dom/Document-prototype-currentScript.html.ini b/tests/wpt/meta/shadow-dom/Document-prototype-currentScript.html.ini deleted file mode 100644 index b831fefb3be..00000000000 --- a/tests/wpt/meta/shadow-dom/Document-prototype-currentScript.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[Document-prototype-currentScript.html] - expected: ERROR - [document.currentScript must not be set to a script element that loads an external script in an open shadow tree] - expected: FAIL - - [document.currentScript must not be set to a script element that loads an external script in a closed shadow tree] - expected: FAIL