diff options
author | Simon Wülker <simon.wuelker@arcor.de> | 2025-01-07 22:22:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-07 21:22:16 +0000 |
commit | 270df6e26334149d12c975cb91e6db7e5fa8ccab (patch) | |
tree | 22bbadbfe74a0a0470c82233da270122ad400ab1 /components/script/dom/shadowroot.rs | |
parent | cd39b1de643f50354b0620e6063d5443721ea39b (diff) | |
download | servo-270df6e26334149d12c975cb91e6db7e5fa8ccab.tar.gz servo-270df6e26334149d12c975cb91e6db7e5fa8ccab.zip |
Consider shadow dom when dispatching events (#34788)
* Implement EventTarget::get_the_parent
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Add spec steps to Event::init_event
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Rewrite Event::composedPath to be spec compliant
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Retarget EventTargets instead of Nodes
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Rewrite event dispatch/invocation to better match the spec
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Add spec comments to Event struct
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Don't traverse shadow roots when calculating an events path
We can't do this correctly yet, and assuming that an events
composed flag is never set is correct 99% of the time.
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Fix typo in event dispatch
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* fix comment
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Update WPT expectations
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* allow crown error
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* fmt
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Reduce item visibility where possible
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Simplify code a bit
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Fix Step 5.10 of Event::invoke
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Fix renamed method calls
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
---------
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Diffstat (limited to 'components/script/dom/shadowroot.rs')
-rw-r--r-- | components/script/dom/shadowroot.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/components/script/dom/shadowroot.rs b/components/script/dom/shadowroot.rs index 6e5d344dd46..ad75bf72e5f 100644 --- a/components/script/dom/shadowroot.rs +++ b/components/script/dom/shadowroot.rs @@ -28,6 +28,7 @@ use crate::dom::node::{ BindContext, Node, NodeDamage, NodeFlags, NodeTraits, ShadowIncluding, UnbindContext, }; use crate::dom::stylesheetlist::{StyleSheetList, StyleSheetListOwner}; +use crate::dom::types::EventTarget; use crate::dom::virtualmethods::VirtualMethods; use crate::dom::window::Window; use crate::script_runtime::CanGc; @@ -218,7 +219,9 @@ impl ShadowRootMethods<crate::DomTypeHolder> for ShadowRoot { can_gc, ) { Some(e) => { - let retargeted_node = self.upcast::<Node>().retarget(e.upcast::<Node>()); + let retargeted_node = self + .upcast::<EventTarget>() + .retarget(e.upcast::<EventTarget>()); retargeted_node.downcast::<Element>().map(DomRoot::from_ref) }, None => None, @@ -240,7 +243,9 @@ impl ShadowRootMethods<crate::DomTypeHolder> for ShadowRoot { .elements_from_point(x, y, None, self.document.has_browsing_context(), can_gc) .iter() { - let retargeted_node = self.upcast::<Node>().retarget(e.upcast::<Node>()); + let retargeted_node = self + .upcast::<EventTarget>() + .retarget(e.upcast::<EventTarget>()); if let Some(element) = retargeted_node.downcast::<Element>().map(DomRoot::from_ref) { elements.push(element); } |