mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
make the concept of has_listeners_for follow other implementations (#21044)
Co-authored-by: Gregory Terzian <gterzian@users.noreply.github.com>
This commit is contained in:
parent
4f4c2a5922
commit
cf9ec700de
3 changed files with 4 additions and 14 deletions
|
@ -2127,7 +2127,7 @@ impl Document {
|
||||||
let event = beforeunload_event.upcast::<Event>();
|
let event = beforeunload_event.upcast::<Event>();
|
||||||
event.set_trusted(true);
|
event.set_trusted(true);
|
||||||
let event_target = self.window.upcast::<EventTarget>();
|
let event_target = self.window.upcast::<EventTarget>();
|
||||||
let has_listeners = event.has_listeners_for(&event_target, &atom!("beforeunload"));
|
let has_listeners = event_target.has_listeners_for(&atom!("beforeunload"));
|
||||||
self.window.dispatch_event_with_target_override(&event);
|
self.window.dispatch_event_with_target_override(&event);
|
||||||
// TODO: Step 6, decrease the event loop's termination nesting level by 1.
|
// TODO: Step 6, decrease the event loop's termination nesting level by 1.
|
||||||
// Step 7
|
// Step 7
|
||||||
|
@ -2197,7 +2197,7 @@ impl Document {
|
||||||
);
|
);
|
||||||
event.set_trusted(true);
|
event.set_trusted(true);
|
||||||
let event_target = self.window.upcast::<EventTarget>();
|
let event_target = self.window.upcast::<EventTarget>();
|
||||||
let has_listeners = event.has_listeners_for(&event_target, &atom!("unload"));
|
let has_listeners = event_target.has_listeners_for(&atom!("unload"));
|
||||||
let _ = self.window.dispatch_event_with_target_override(&event);
|
let _ = self.window.dispatch_event_with_target_override(&event);
|
||||||
self.fired_unload.set(true);
|
self.fired_unload.set(true);
|
||||||
// Step 9
|
// Step 9
|
||||||
|
|
|
@ -138,18 +138,6 @@ impl Event {
|
||||||
self.cancelable.set(cancelable);
|
self.cancelable.set(cancelable);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if there are any listeners for a given target and type.
|
|
||||||
// See https://github.com/whatwg/dom/issues/453
|
|
||||||
pub fn has_listeners_for(&self, target: &EventTarget, type_: &Atom) -> bool {
|
|
||||||
// TODO: take 'removed' into account? Not implemented in Servo yet.
|
|
||||||
// https://dom.spec.whatwg.org/#event-listener-removed
|
|
||||||
let mut event_path = self.construct_event_path(&target);
|
|
||||||
event_path.push(DomRoot::from_ref(target));
|
|
||||||
event_path
|
|
||||||
.iter()
|
|
||||||
.any(|target| target.has_listeners_for(type_))
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#event-path
|
// https://dom.spec.whatwg.org/#event-path
|
||||||
// TODO: shadow roots put special flags in the path,
|
// TODO: shadow roots put special flags in the path,
|
||||||
// and it will stop just being a list of bare EventTargets
|
// and it will stop just being a list of bare EventTargets
|
||||||
|
|
|
@ -367,6 +367,8 @@ impl EventTarget {
|
||||||
Ok(EventTarget::new(global, proto))
|
Ok(EventTarget::new(global, proto))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Determine if there are any listeners for a given event type.
|
||||||
|
/// See <https://github.com/whatwg/dom/issues/453>.
|
||||||
pub fn has_listeners_for(&self, type_: &Atom) -> bool {
|
pub fn has_listeners_for(&self, type_: &Atom) -> bool {
|
||||||
match self.handlers.borrow().get(type_) {
|
match self.handlers.borrow().get(type_) {
|
||||||
Some(listeners) => listeners.has_listeners(),
|
Some(listeners) => listeners.has_listeners(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue