diff options
author | Andrei Volykhin <andrei.volykhin@gmail.com> | 2025-03-31 20:15:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-31 17:15:48 +0000 |
commit | f48c3a5e2ac9e70e588f2a16289a53b7b2ebfbea (patch) | |
tree | 3aab694f364435758c0ba6ff574d12e3e9b9ee59 /components/script/dom | |
parent | 7382efa2094c72115e1cd2af85a04d7ee2b9c073 (diff) | |
download | servo-f48c3a5e2ac9e70e588f2a16289a53b7b2ebfbea.tar.gz servo-f48c3a5e2ac9e70e588f2a16289a53b7b2ebfbea.zip |
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 <andrei.volykhin@gmail.com>
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/customevent.rs | 6 | ||||
-rw-r--r-- | components/script/dom/errorevent.rs | 1 | ||||
-rw-r--r-- | components/script/dom/focusevent.rs | 5 | ||||
-rw-r--r-- | components/script/dom/mouseevent.rs | 3 |
4 files changed, 12 insertions, 3 deletions
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<crate::DomTypeHolder> for CustomEvent { type_: DOMString, init: RootedTraceableBox<CustomEventBinding::CustomEventInit>, ) -> DomRoot<CustomEvent> { - CustomEvent::new( + let event = CustomEvent::new( global, proto, Atom::from(type_), @@ -101,7 +101,9 @@ impl CustomEventMethods<crate::DomTypeHolder> for CustomEvent { init.parent.cancelable, init.detail.handle(), can_gc, - ) + ); + event.upcast::<Event>().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<crate::DomTypeHolder> for ErrorEvent { init.error.handle(), can_gc, ); + event.upcast::<Event>().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<crate::DomTypeHolder> for FocusEvent { init.relatedTarget.as_deref(), can_gc, ); + event + .upcast::<Event>() + .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<crate::DomTypeHolder> for MouseEvent { None, can_gc, ); + event + .upcast::<Event>() + .set_composed(init.parent.parent.parent.composed); Ok(event) } |