mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Propagate events from slottables to their assigned slot instead of their parent (#35177)
* Propagate events from slottables to their assigned slot instead of their parent 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:
parent
6b04bc6263
commit
177b5b2cef
2 changed files with 26 additions and 9 deletions
|
@ -41,6 +41,7 @@ use crate::dom::bindings::codegen::Bindings::NodeBinding::GetRootNodeOptions;
|
||||||
use crate::dom::bindings::codegen::Bindings::NodeBinding::Node_Binding::NodeMethods;
|
use crate::dom::bindings::codegen::Bindings::NodeBinding::Node_Binding::NodeMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::ShadowRootBinding::ShadowRoot_Binding::ShadowRootMethods;
|
use crate::dom::bindings::codegen::Bindings::ShadowRootBinding::ShadowRoot_Binding::ShadowRootMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
||||||
|
use crate::dom::bindings::codegen::InheritTypes::{CharacterDataTypeId, NodeTypeId};
|
||||||
use crate::dom::bindings::codegen::UnionTypes::{
|
use crate::dom::bindings::codegen::UnionTypes::{
|
||||||
AddEventListenerOptionsOrBoolean, EventListenerOptionsOrBoolean, EventOrString,
|
AddEventListenerOptionsOrBoolean, EventListenerOptionsOrBoolean, EventOrString,
|
||||||
};
|
};
|
||||||
|
@ -58,6 +59,7 @@ use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::dom::htmlformelement::FormControlElementHelpers;
|
use crate::dom::htmlformelement::FormControlElementHelpers;
|
||||||
use crate::dom::node::{Node, NodeTraits};
|
use crate::dom::node::{Node, NodeTraits};
|
||||||
use crate::dom::shadowroot::ShadowRoot;
|
use crate::dom::shadowroot::ShadowRoot;
|
||||||
|
use crate::dom::text::Text;
|
||||||
use crate::dom::virtualmethods::VirtualMethods;
|
use crate::dom::virtualmethods::VirtualMethods;
|
||||||
use crate::dom::window::Window;
|
use crate::dom::window::Window;
|
||||||
use crate::dom::workerglobalscope::WorkerGlobalScope;
|
use crate::dom::workerglobalscope::WorkerGlobalScope;
|
||||||
|
@ -815,9 +817,30 @@ impl EventTarget {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(node) = self.downcast::<Node>() {
|
if let Some(node) = self.downcast::<Node>() {
|
||||||
// FIXME: Handle slottables here
|
// > A node’s get the parent algorithm, given an event, returns the node’s assigned slot,
|
||||||
let parent = node.GetParentNode()?;
|
// > if node is assigned; otherwise node’s parent.
|
||||||
return Some(DomRoot::from_ref(parent.upcast::<EventTarget>()));
|
let assigned_slot = match node.type_id() {
|
||||||
|
NodeTypeId::Element(_) => {
|
||||||
|
let element = node.downcast::<Element>().unwrap();
|
||||||
|
element
|
||||||
|
.assigned_slot()
|
||||||
|
.map(|slot| DomRoot::from_ref(slot.upcast::<EventTarget>()))
|
||||||
|
},
|
||||||
|
NodeTypeId::CharacterData(CharacterDataTypeId::Text(_)) => {
|
||||||
|
let text = node.downcast::<Text>().unwrap();
|
||||||
|
text.slottable_data()
|
||||||
|
.borrow()
|
||||||
|
.assigned_slot
|
||||||
|
.as_ref()
|
||||||
|
.map(|slot| DomRoot::from_ref(slot.upcast::<EventTarget>()))
|
||||||
|
},
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
|
||||||
|
return assigned_slot.or_else(|| {
|
||||||
|
node.GetParentNode()
|
||||||
|
.map(|parent| DomRoot::from_ref(parent.upcast::<EventTarget>()))
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
None
|
None
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
[event-composed-path.html]
|
[event-composed-path.html]
|
||||||
[Event Path with a slot in an open Shadow Root.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event Path with a slot in a closed Shadow Root.]
|
[Event Path with a slot in a closed Shadow Root.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Event Path with slots in nested ShadowRoots: open > open.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event Path with slots in nested ShadowRoots: closed > closed.]
|
[Event Path with slots in nested ShadowRoots: closed > closed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue