From f48c3a5e2ac9e70e588f2a16289a53b7b2ebfbea Mon Sep 17 00:00:00 2001 From: Andrei Volykhin Date: Mon, 31 Mar 2025 20:15:48 +0300 Subject: dom: Set "composed" flag on construction for some event types (#36239) "Composed" flag (https://dom.spec.whatwg.org/#composed-flag) should be properly set on event construction phase from optional "EventInit" dictionary (https://dom.spec.whatwg.org/#dom-eventinit-composed). The limited set of event types (Custom/Error/Focus/Mouse) will be affected by this CL (used in WPT tests). --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] There are WPT shadow-dom tests which have new issues related to event "relatedTarget" property tests/wpt/tests/shadow-dom/event-composed-path-with-related-target.html tests/wpt/tests/shadow-dom/event-with-related-target.html Signed-off-by: Andrei Volykhin --- components/script/dom/customevent.rs | 6 ++++-- components/script/dom/errorevent.rs | 1 + components/script/dom/focusevent.rs | 5 ++++- components/script/dom/mouseevent.rs | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) (limited to 'components/script') diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs index e1d4e4e6e46..c461fae126e 100644 --- a/components/script/dom/customevent.rs +++ b/components/script/dom/customevent.rs @@ -93,7 +93,7 @@ impl CustomEventMethods for CustomEvent { type_: DOMString, init: RootedTraceableBox, ) -> DomRoot { - CustomEvent::new( + let event = CustomEvent::new( global, proto, Atom::from(type_), @@ -101,7 +101,9 @@ impl CustomEventMethods for CustomEvent { init.parent.cancelable, init.detail.handle(), can_gc, - ) + ); + event.upcast::().set_composed(init.parent.composed); + event } // https://dom.spec.whatwg.org/#dom-customevent-detail diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs index 758d4f108e9..31191ec6577 100644 --- a/components/script/dom/errorevent.rs +++ b/components/script/dom/errorevent.rs @@ -142,6 +142,7 @@ impl ErrorEventMethods for ErrorEvent { init.error.handle(), can_gc, ); + event.upcast::().set_composed(init.parent.composed); Ok(event) } diff --git a/components/script/dom/focusevent.rs b/components/script/dom/focusevent.rs index a90756918ac..f59ca5927af 100644 --- a/components/script/dom/focusevent.rs +++ b/components/script/dom/focusevent.rs @@ -15,7 +15,7 @@ use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::reflector::reflect_dom_object_with_proto; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; use crate::dom::bindings::str::DOMString; -use crate::dom::event::{EventBubbles, EventCancelable}; +use crate::dom::event::{Event, EventBubbles, EventCancelable}; use crate::dom::eventtarget::EventTarget; use crate::dom::uievent::UIEvent; use crate::dom::window::Window; @@ -118,6 +118,9 @@ impl FocusEventMethods for FocusEvent { init.relatedTarget.as_deref(), can_gc, ); + event + .upcast::() + .set_composed(init.parent.parent.composed); Ok(event) } diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 00304a6f565..5818eb7352f 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -342,6 +342,9 @@ impl MouseEventMethods for MouseEvent { None, can_gc, ); + event + .upcast::() + .set_composed(init.parent.parent.parent.composed); Ok(event) } -- cgit v1.2.3