diff options
author | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-09 15:33:52 -0500 |
---|---|---|
committer | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-02-12 15:57:37 -0500 |
commit | 01aba1fcc453192da64272dcc180135ce11e4ea7 (patch) | |
tree | 31f92472dca740a63a91a51188a0f3325a00481b /components/script/dom/document.rs | |
parent | ed9b5843443db7164bda6eb6f3cb7caff2ff5a3c (diff) | |
download | servo-01aba1fcc453192da64272dcc180135ce11e4ea7.tar.gz servo-01aba1fcc453192da64272dcc180135ce11e4ea7.zip |
Event dispatch rewritten to resemble spec more often, activate on clicks better
Diffstat (limited to 'components/script/dom/document.rs')
-rw-r--r-- | components/script/dom/document.rs | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 98e7663bbf1..42e16fab055 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -3,7 +3,6 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::document_loader::{DocumentLoader, LoadType}; -use crate::dom::activation::{synthetic_click_activation, ActivationSource}; use crate::dom::attr::Attr; use crate::dom::beforeunloadevent::BeforeUnloadEvent; use crate::dom::bindings::callback::ExceptionHandling; @@ -557,8 +556,7 @@ impl Document { let event = event.upcast::<Event>(); event.set_trusted(true); // FIXME(nox): Why are errors silenced here? - let _ = window.upcast::<EventTarget>().dispatch_event_with_target( - document.upcast(), + let _ = window.dispatch_event_with_target_override( &event, ); }), @@ -1015,7 +1013,11 @@ impl Document { // https://html.spec.whatwg.org/multipage/#run-authentic-click-activation-steps let activatable = el.as_maybe_activatable(); match mouse_event_type { - MouseEventType::Click => el.authentic_click_activation(event), + MouseEventType::Click => { + el.set_click_in_progress(true); + event.fire(node.upcast()); + el.set_click_in_progress(false); + }, MouseEventType::MouseDown => { if let Some(a) = activatable { a.enter_formal_activation_state(); @@ -1477,16 +1479,9 @@ impl Document { if (keyboard_event.key == Key::Enter || keyboard_event.code == Code::Space) && keyboard_event.state == KeyState::Up { - let maybe_elem = target.downcast::<Element>(); - if let Some(el) = maybe_elem { - synthetic_click_activation( - el, - false, - false, - false, - false, - ActivationSource::NotFromClick, - ) + if let Some(elem) = target.downcast::<Element>() { + elem.upcast::<Node>() + .fire_synthetic_mouse_event_not_trusted(DOMString::from("click")); } } } @@ -1802,7 +1797,6 @@ impl Document { // Step 2 self.incr_ignore_opens_during_unload_counter(); //Step 3-5. - let document = Trusted::new(self); let beforeunload_event = BeforeUnloadEvent::new( &self.window, atom!("beforeunload"), @@ -1813,7 +1807,7 @@ impl Document { event.set_trusted(true); let event_target = self.window.upcast::<EventTarget>(); let has_listeners = event.has_listeners_for(&event_target, &atom!("beforeunload")); - event_target.dispatch_event_with_target(document.root().upcast(), &event); + self.window.dispatch_event_with_target_override(&event); // TODO: Step 6, decrease the event loop's termination nesting level by 1. // Step 7 if has_listeners { @@ -1857,7 +1851,6 @@ impl Document { // TODO: Step 1, increase the event loop's termination nesting level by 1. // Step 2 self.incr_ignore_opens_during_unload_counter(); - let document = Trusted::new(self); // Step 3-6 if self.page_showing.get() { self.page_showing.set(false); @@ -1870,10 +1863,7 @@ impl Document { ); let event = event.upcast::<Event>(); event.set_trusted(true); - let _ = self - .window - .upcast::<EventTarget>() - .dispatch_event_with_target(document.root().upcast(), &event); + let _ = self.window.dispatch_event_with_target_override(&event); // TODO Step 6, document visibility steps. } // Step 7 @@ -1887,7 +1877,7 @@ impl Document { event.set_trusted(true); let event_target = self.window.upcast::<EventTarget>(); let has_listeners = event.has_listeners_for(&event_target, &atom!("unload")); - let _ = event_target.dispatch_event_with_target(document.root().upcast(), &event); + let _ = self.window.dispatch_event_with_target_override(&event); self.fired_unload.set(true); // Step 9 if has_listeners { @@ -1983,8 +1973,7 @@ impl Document { debug!("About to dispatch load for {:?}", document.url()); // FIXME(nox): Why are errors silenced here? - let _ = window.upcast::<EventTarget>().dispatch_event_with_target( - document.upcast(), + let _ = window.dispatch_event_with_target_override( &event, ); @@ -2028,8 +2017,7 @@ impl Document { event.set_trusted(true); // FIXME(nox): Why are errors silenced here? - let _ = window.upcast::<EventTarget>().dispatch_event_with_target( - document.upcast(), + let _ = window.dispatch_event_with_target_override( &event, ); }), |