Implement Event propagation across shadow roots (#34884)

* Implement Event.composed flag

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Allow composed events to pass shadow boundaries

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Update WPT expectations

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2025-01-22 16:25:16 +01:00 committed by GitHub
parent aed7e8cefd
commit 1b882f2729
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 89 additions and 144 deletions

View file

@ -805,11 +805,13 @@ impl EventTarget {
}
}
if self.downcast::<ShadowRoot>().is_some() {
// FIXME: Handle event composed flag here
// We currently assume that events are never composed (so events may never
// cross a shadow boundary)
return None;
if let Some(shadow_root) = self.downcast::<ShadowRoot>() {
if event.should_pass_shadow_boundary(shadow_root) {
let host = shadow_root.Host();
return Some(DomRoot::from_ref(host.upcast::<EventTarget>()));
} else {
return None;
}
}
if let Some(node) = self.downcast::<Node>() {