Remove "fire a simple event" concept, refactor event firing API.

"fire a simple event" concept was removed in
https://github.com/whatwg/html/pull/1933.
This commit is contained in:
Corey Farwell 2016-11-02 22:44:51 -04:00
parent 5b4cc9568d
commit c3b279a4c3
15 changed files with 58 additions and 52 deletions

View file

@ -606,7 +606,7 @@ impl Document {
self.ready_state.set(state); self.ready_state.set(state);
self.upcast::<EventTarget>().fire_simple_event("readystatechange"); self.upcast::<EventTarget>().fire_event("readystatechange");
} }
/// Return whether scripting is enabled or not /// Return whether scripting is enabled or not

View file

@ -330,7 +330,7 @@ impl Runnable for EventRunnable {
fn handler(self: Box<EventRunnable>) { fn handler(self: Box<EventRunnable>) {
let target = self.target.root(); let target = self.target.root();
target.fire_event(&*self.name, self.bubbles, self.cancelable); target.fire_event_with_params(&*self.name, self.bubbles, self.cancelable);
} }
} }
@ -345,6 +345,6 @@ impl Runnable for SimpleEventRunnable {
fn handler(self: Box<SimpleEventRunnable>) { fn handler(self: Box<SimpleEventRunnable>) {
let target = self.target.root(); let target = self.target.root();
target.fire_simple_event(&*self.name); target.fire_event(&*self.name);
} }
} }

View file

@ -490,21 +490,42 @@ impl EventTarget {
!self.handlers.borrow().is_empty() !self.handlers.borrow().is_empty()
} }
// https://html.spec.whatwg.org/multipage/#fire-a-simple-event // https://dom.spec.whatwg.org/#concept-event-fire
pub fn fire_simple_event(&self, name: &str) -> Root<Event> { pub fn fire_event(&self, name: &str) -> Root<Event> {
self.fire_event(name, EventBubbles::DoesNotBubble, self.fire_event_with_params(name,
EventCancelable::NotCancelable) EventBubbles::DoesNotBubble,
EventCancelable::NotCancelable)
} }
// https://dom.spec.whatwg.org/#concept-event-fire // https://dom.spec.whatwg.org/#concept-event-fire
pub fn fire_event(&self, name: &str, pub fn fire_bubbling_event(&self, name: &str) -> Root<Event> {
bubbles: EventBubbles, self.fire_event_with_params(name,
cancelable: EventCancelable) EventBubbles::Bubbles,
-> Root<Event> { EventCancelable::NotCancelable)
}
// https://dom.spec.whatwg.org/#concept-event-fire
pub fn fire_cancelable_event(&self, name: &str) -> Root<Event> {
self.fire_event_with_params(name,
EventBubbles::DoesNotBubble,
EventCancelable::Cancelable)
}
// https://dom.spec.whatwg.org/#concept-event-fire
pub fn fire_bubbling_cancelable_event(&self, name: &str) -> Root<Event> {
self.fire_event_with_params(name,
EventBubbles::Bubbles,
EventCancelable::Cancelable)
}
// https://dom.spec.whatwg.org/#concept-event-fire
pub fn fire_event_with_params(&self,
name: &str,
bubbles: EventBubbles,
cancelable: EventCancelable)
-> Root<Event> {
let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable); let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable);
event.fire(self); event.fire(self);
event event
} }
} }

View file

@ -94,7 +94,7 @@ impl Runnable for DetailsNotificationRunnable {
fn handler(self: Box<DetailsNotificationRunnable>) { fn handler(self: Box<DetailsNotificationRunnable>) {
let target = self.element.root(); let target = self.element.root();
if target.check_toggle_count(self.toggle_number) { if target.check_toggle_count(self.toggle_number) {
target.upcast::<EventTarget>().fire_simple_event("toggle"); target.upcast::<EventTarget>().fire_event("toggle");
} }
} }
} }

View file

@ -20,7 +20,6 @@ use dom::bindings::str::DOMString;
use dom::blob::Blob; use dom::blob::Blob;
use dom::document::Document; use dom::document::Document;
use dom::element::Element; use dom::element::Element;
use dom::event::{EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget; use dom::eventtarget::EventTarget;
use dom::file::File; use dom::file::File;
use dom::globalscope::GlobalScope; use dom::globalscope::GlobalScope;
@ -305,16 +304,14 @@ impl HTMLFormElement {
{ {
if self.interactive_validation().is_err() { if self.interactive_validation().is_err() {
// TODO: Implement event handlers on all form control elements // TODO: Implement event handlers on all form control elements
self.upcast::<EventTarget>().fire_simple_event("invalid"); self.upcast::<EventTarget>().fire_event("invalid");
return; return;
} }
} }
// Step 5 // Step 5
if submit_method_flag == SubmittedFrom::NotFromForm { if submit_method_flag == SubmittedFrom::NotFromForm {
let event = self.upcast::<EventTarget>() let event = self.upcast::<EventTarget>()
.fire_event("submit", .fire_bubbling_cancelable_event("submit");
EventBubbles::Bubbles,
EventCancelable::Cancelable);
if event.DefaultPrevented() { if event.DefaultPrevented() {
return; return;
} }
@ -484,9 +481,7 @@ impl HTMLFormElement {
// Step 5-6 // Step 5-6
let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| { let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| {
let event = field.as_event_target() let event = field.as_event_target()
.fire_event("invalid", .fire_cancelable_event("invalid");
EventBubbles::DoesNotBubble,
EventCancelable::Cancelable);
if !event.DefaultPrevented() { return Some(field); } if !event.DefaultPrevented() { return Some(field); }
None None
}).collect::<Vec<FormSubmittableElement>>(); }).collect::<Vec<FormSubmittableElement>>();
@ -615,9 +610,7 @@ impl HTMLFormElement {
} }
let event = self.upcast::<EventTarget>() let event = self.upcast::<EventTarget>()
.fire_event("reset", .fire_bubbling_cancelable_event("reset");
EventBubbles::Bubbles,
EventCancelable::Cancelable);
if event.DefaultPrevented() { if event.DefaultPrevented() {
return; return;
} }

View file

@ -239,7 +239,7 @@ impl HTMLIFrameElement {
// TODO Step 3 - set child document `mut iframe load` flag // TODO Step 3 - set child document `mut iframe load` flag
// Step 4 // Step 4
self.upcast::<EventTarget>().fire_simple_event("load"); self.upcast::<EventTarget>().fire_event("load");
let mut blocker = self.load_blocker.borrow_mut(); let mut blocker = self.load_blocker.borrow_mut();
LoadBlocker::terminate(&mut blocker); LoadBlocker::terminate(&mut blocker);

View file

@ -105,12 +105,12 @@ impl Runnable for ImageResponseHandlerRunnable {
// Fire image.onload // Fire image.onload
if trigger_image_load { if trigger_image_load {
element.upcast::<EventTarget>().fire_simple_event("load"); element.upcast::<EventTarget>().fire_event("load");
} }
// Fire image.onerror // Fire image.onerror
if trigger_image_error { if trigger_image_error {
element.upcast::<EventTarget>().fire_simple_event("error"); element.upcast::<EventTarget>().fire_event("error");
} }
// Trigger reflow // Trigger reflow
@ -180,8 +180,8 @@ impl HTMLImageElement {
// Step 11, substep 5 // Step 11, substep 5
let img = self.img.root(); let img = self.img.root();
img.current_request.borrow_mut().source_url = Some(self.src.into()); img.current_request.borrow_mut().source_url = Some(self.src.into());
img.upcast::<EventTarget>().fire_simple_event("error"); img.upcast::<EventTarget>().fire_event("error");
img.upcast::<EventTarget>().fire_simple_event("loadend"); img.upcast::<EventTarget>().fire_event("loadend");
} }
} }

View file

@ -849,12 +849,8 @@ impl HTMLInputElement {
let filelist = FileList::new(&window, files); let filelist = FileList::new(&window, files);
self.filelist.set(Some(&filelist)); self.filelist.set(Some(&filelist));
target.fire_event("input", target.fire_bubbling_event("input");
EventBubbles::Bubbles, target.fire_bubbling_event("change");
EventCancelable::NotCancelable);
target.fire_event("change",
EventBubbles::Bubbles,
EventCancelable::NotCancelable);
} }
} }
} }
@ -1290,12 +1286,8 @@ impl Activatable for HTMLInputElement {
// https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior // https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior
// Check if document owner is fully active // Check if document owner is fully active
let target = self.upcast::<EventTarget>(); let target = self.upcast::<EventTarget>();
target.fire_event("input", target.fire_bubbling_event("input");
EventBubbles::Bubbles, target.fire_bubbling_event("change");
EventCancelable::NotCancelable);
target.fire_event("change",
EventBubbles::Bubbles,
EventCancelable::NotCancelable);
}, },
InputType::InputFile => self.select_files(None), InputType::InputFile => self.select_files(None),
_ => () _ => ()

View file

@ -325,7 +325,7 @@ impl FetchResponseListener for StylesheetContext {
if let Some(ref meta) = self.metadata { if let Some(ref meta) = self.metadata {
if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type {
} else { } else {
self.elem.root().upcast::<EventTarget>().fire_simple_event("error"); self.elem.root().upcast::<EventTarget>().fire_event("error");
} }
} }
} }
@ -382,7 +382,7 @@ impl FetchResponseListener for StylesheetContext {
let event = if successful { "load" } else { "error" }; let event = if successful { "load" } else { "error" };
elem.upcast::<EventTarget>().fire_simple_event(event); elem.upcast::<EventTarget>().fire_event(event);
} }
} }

View file

@ -142,7 +142,7 @@ impl WeakMediaQueryListVec {
pub fn evaluate_and_report_changes(&self) { pub fn evaluate_and_report_changes(&self) {
for mql in self.cell.borrow().iter() { for mql in self.cell.borrow().iter() {
if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() { if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() {
mql.root().unwrap().upcast::<EventTarget>().fire_simple_event("change"); mql.root().unwrap().upcast::<EventTarget>().fire_event("change");
} }
} }
} }

View file

@ -56,12 +56,12 @@ impl ServiceWorker {
pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) { pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) {
let service_worker = address.root(); let service_worker = address.root();
service_worker.upcast().fire_simple_event("error"); service_worker.upcast().fire_event("error");
} }
pub fn set_transition_state(&self, state: ServiceWorkerState) { pub fn set_transition_state(&self, state: ServiceWorkerState) {
self.state.set(state); self.state.set(state);
self.upcast::<EventTarget>().fire_simple_event("statechange"); self.upcast::<EventTarget>().fire_event("statechange");
} }
pub fn get_script_url(&self) -> Url { pub fn get_script_url(&self) -> Url {

View file

@ -45,7 +45,7 @@ pub trait Controllable {
impl Controllable for ServiceWorkerContainer { impl Controllable for ServiceWorkerContainer {
fn set_controller(&self, active_worker: &ServiceWorker) { fn set_controller(&self, active_worker: &ServiceWorker) {
self.controller.set(Some(active_worker)); self.controller.set(Some(active_worker));
self.upcast::<EventTarget>().fire_simple_event("controllerchange"); self.upcast::<EventTarget>().fire_event("controllerchange");
} }
} }

View file

@ -268,7 +268,7 @@ impl ServiceWorkerGlobalScope {
// TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event
// when we have the Request and Response dom api's implemented // when we have the Request and Response dom api's implemented
// https://slightlyoff.github.io/ServiceWorker/spec/service_worker_1/index.html#fetch-event-section // https://slightlyoff.github.io/ServiceWorker/spec/service_worker_1/index.html#fetch-event-section
self.upcast::<EventTarget>().fire_simple_event("fetch"); self.upcast::<EventTarget>().fire_event("fetch");
let _ = mediator.response_chan.send(None); let _ = mediator.response_chan.send(None);
} }
} }

View file

@ -498,7 +498,7 @@ impl Runnable for ConnectionEstablishedTask {
} }
// Step 6. // Step 6.
ws.upcast().fire_simple_event("open"); ws.upcast().fire_event("open");
} }
} }
@ -548,7 +548,7 @@ impl Runnable for CloseTask {
// Step 2. // Step 2.
if self.failed { if self.failed {
ws.upcast().fire_simple_event("error"); ws.upcast().fire_event("error");
} }
// Step 3. // Step 3.

View file

@ -138,7 +138,7 @@ impl Worker {
pub fn dispatch_simple_error(address: TrustedWorkerAddress) { pub fn dispatch_simple_error(address: TrustedWorkerAddress) {
let worker = address.root(); let worker = address.root();
worker.upcast().fire_simple_event("error"); worker.upcast().fire_event("error");
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]