aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorAndrei Volykhin <andrei.volykhin@gmail.com>2025-03-31 20:15:48 +0300
committerGitHub <noreply@github.com>2025-03-31 17:15:48 +0000
commitf48c3a5e2ac9e70e588f2a16289a53b7b2ebfbea (patch)
tree3aab694f364435758c0ba6ff574d12e3e9b9ee59 /components/script/dom
parent7382efa2094c72115e1cd2af85a04d7ee2b9c073 (diff)
downloadservo-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.rs6
-rw-r--r--components/script/dom/errorevent.rs1
-rw-r--r--components/script/dom/focusevent.rs5
-rw-r--r--components/script/dom/mouseevent.rs3
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)
}