From c3b279a4c301609cd2f413fb9fd5222e6dd45014 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Wed, 2 Nov 2016 22:44:51 -0400 Subject: [PATCH 1/3] 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. --- components/script/dom/document.rs | 2 +- components/script/dom/event.rs | 4 +- components/script/dom/eventtarget.rs | 41 ++++++++++++++----- components/script/dom/htmldetailselement.rs | 2 +- components/script/dom/htmlformelement.rs | 15 ++----- components/script/dom/htmliframeelement.rs | 2 +- components/script/dom/htmlimageelement.rs | 8 ++-- components/script/dom/htmlinputelement.rs | 16 ++------ components/script/dom/htmllinkelement.rs | 4 +- components/script/dom/mediaquerylist.rs | 2 +- components/script/dom/serviceworker.rs | 4 +- .../script/dom/serviceworkercontainer.rs | 2 +- .../script/dom/serviceworkerglobalscope.rs | 2 +- components/script/dom/websocket.rs | 4 +- components/script/dom/worker.rs | 2 +- 15 files changed, 58 insertions(+), 52 deletions(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 2728bc757fb..3878a8f23ee 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -606,7 +606,7 @@ impl Document { self.ready_state.set(state); - self.upcast::().fire_simple_event("readystatechange"); + self.upcast::().fire_event("readystatechange"); } /// Return whether scripting is enabled or not diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index f50d51dbb65..ca8d5c8c7ac 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -330,7 +330,7 @@ impl Runnable for EventRunnable { fn handler(self: Box) { 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) { let target = self.target.root(); - target.fire_simple_event(&*self.name); + target.fire_event(&*self.name); } } diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 51452c0fc53..5c65ec195a8 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -490,21 +490,42 @@ impl EventTarget { !self.handlers.borrow().is_empty() } - // https://html.spec.whatwg.org/multipage/#fire-a-simple-event - pub fn fire_simple_event(&self, name: &str) -> Root { - self.fire_event(name, EventBubbles::DoesNotBubble, - EventCancelable::NotCancelable) + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::DoesNotBubble, + EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_event(&self, name: &str, - bubbles: EventBubbles, - cancelable: EventCancelable) - -> Root { + pub fn fire_bubbling_event(&self, name: &str) -> Root { + self.fire_event_with_params(name, + EventBubbles::Bubbles, + EventCancelable::NotCancelable) + } + + // https://dom.spec.whatwg.org/#concept-event-fire + pub fn fire_cancelable_event(&self, name: &str) -> Root { + 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 { + 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 { let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable); - event.fire(self); - event } } diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs index 93dfef33c7c..b829dc79ee9 100644 --- a/components/script/dom/htmldetailselement.rs +++ b/components/script/dom/htmldetailselement.rs @@ -94,7 +94,7 @@ impl Runnable for DetailsNotificationRunnable { fn handler(self: Box) { let target = self.element.root(); if target.check_toggle_count(self.toggle_number) { - target.upcast::().fire_simple_event("toggle"); + target.upcast::().fire_event("toggle"); } } } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index fec0ec07946..8db261996b1 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -20,7 +20,6 @@ use dom::bindings::str::DOMString; use dom::blob::Blob; use dom::document::Document; use dom::element::Element; -use dom::event::{EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; use dom::file::File; use dom::globalscope::GlobalScope; @@ -305,16 +304,14 @@ impl HTMLFormElement { { if self.interactive_validation().is_err() { // TODO: Implement event handlers on all form control elements - self.upcast::().fire_simple_event("invalid"); + self.upcast::().fire_event("invalid"); return; } } // Step 5 if submit_method_flag == SubmittedFrom::NotFromForm { let event = self.upcast::() - .fire_event("submit", - EventBubbles::Bubbles, - EventCancelable::Cancelable); + .fire_bubbling_cancelable_event("submit"); if event.DefaultPrevented() { return; } @@ -484,9 +481,7 @@ impl HTMLFormElement { // Step 5-6 let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| { let event = field.as_event_target() - .fire_event("invalid", - EventBubbles::DoesNotBubble, - EventCancelable::Cancelable); + .fire_cancelable_event("invalid"); if !event.DefaultPrevented() { return Some(field); } None }).collect::>(); @@ -615,9 +610,7 @@ impl HTMLFormElement { } let event = self.upcast::() - .fire_event("reset", - EventBubbles::Bubbles, - EventCancelable::Cancelable); + .fire_bubbling_cancelable_event("reset"); if event.DefaultPrevented() { return; } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 73ef7c580d7..069765bb810 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -239,7 +239,7 @@ impl HTMLIFrameElement { // TODO Step 3 - set child document `mut iframe load` flag // Step 4 - self.upcast::().fire_simple_event("load"); + self.upcast::().fire_event("load"); let mut blocker = self.load_blocker.borrow_mut(); LoadBlocker::terminate(&mut blocker); diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 373e7ed8480..e5177b28730 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -105,12 +105,12 @@ impl Runnable for ImageResponseHandlerRunnable { // Fire image.onload if trigger_image_load { - element.upcast::().fire_simple_event("load"); + element.upcast::().fire_event("load"); } // Fire image.onerror if trigger_image_error { - element.upcast::().fire_simple_event("error"); + element.upcast::().fire_event("error"); } // Trigger reflow @@ -180,8 +180,8 @@ impl HTMLImageElement { // Step 11, substep 5 let img = self.img.root(); img.current_request.borrow_mut().source_url = Some(self.src.into()); - img.upcast::().fire_simple_event("error"); - img.upcast::().fire_simple_event("loadend"); + img.upcast::().fire_event("error"); + img.upcast::().fire_event("loadend"); } } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index f4a9a726d30..ebbff4bc1ec 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -849,12 +849,8 @@ impl HTMLInputElement { let filelist = FileList::new(&window, files); self.filelist.set(Some(&filelist)); - target.fire_event("input", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); - target.fire_event("change", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); + target.fire_bubbling_event("input"); + target.fire_bubbling_event("change"); } } } @@ -1290,12 +1286,8 @@ impl Activatable for HTMLInputElement { // https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior // Check if document owner is fully active let target = self.upcast::(); - target.fire_event("input", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); - target.fire_event("change", - EventBubbles::Bubbles, - EventCancelable::NotCancelable); + target.fire_bubbling_event("input"); + target.fire_bubbling_event("change"); }, InputType::InputFile => self.select_files(None), _ => () diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index f4cd1ae0718..2312918c751 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -325,7 +325,7 @@ impl FetchResponseListener for StylesheetContext { if let Some(ref meta) = self.metadata { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { } else { - self.elem.root().upcast::().fire_simple_event("error"); + self.elem.root().upcast::().fire_event("error"); } } } @@ -382,7 +382,7 @@ impl FetchResponseListener for StylesheetContext { let event = if successful { "load" } else { "error" }; - elem.upcast::().fire_simple_event(event); + elem.upcast::().fire_event(event); } } diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs index 30e510171b4..aef1c908e8a 100644 --- a/components/script/dom/mediaquerylist.rs +++ b/components/script/dom/mediaquerylist.rs @@ -142,7 +142,7 @@ impl WeakMediaQueryListVec { pub fn evaluate_and_report_changes(&self) { for mql in self.cell.borrow().iter() { if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() { - mql.root().unwrap().upcast::().fire_simple_event("change"); + mql.root().unwrap().upcast::().fire_event("change"); } } } diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs index 8f3686f0b0c..2ff3d218cb3 100644 --- a/components/script/dom/serviceworker.rs +++ b/components/script/dom/serviceworker.rs @@ -56,12 +56,12 @@ impl ServiceWorker { pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) { 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) { self.state.set(state); - self.upcast::().fire_simple_event("statechange"); + self.upcast::().fire_event("statechange"); } pub fn get_script_url(&self) -> Url { diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index a28440e5c42..6ad13fc317b 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -45,7 +45,7 @@ pub trait Controllable { impl Controllable for ServiceWorkerContainer { fn set_controller(&self, active_worker: &ServiceWorker) { self.controller.set(Some(active_worker)); - self.upcast::().fire_simple_event("controllerchange"); + self.upcast::().fire_event("controllerchange"); } } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index 021e93399b8..b9c3fb483ad 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -268,7 +268,7 @@ impl ServiceWorkerGlobalScope { // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event // 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 - self.upcast::().fire_simple_event("fetch"); + self.upcast::().fire_event("fetch"); let _ = mediator.response_chan.send(None); } } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 5914ff7ea89..c8999b52102 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -498,7 +498,7 @@ impl Runnable for ConnectionEstablishedTask { } // Step 6. - ws.upcast().fire_simple_event("open"); + ws.upcast().fire_event("open"); } } @@ -548,7 +548,7 @@ impl Runnable for CloseTask { // Step 2. if self.failed { - ws.upcast().fire_simple_event("error"); + ws.upcast().fire_event("error"); } // Step 3. diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 87cf1f3e55e..72f058c16f2 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -138,7 +138,7 @@ impl Worker { pub fn dispatch_simple_error(address: TrustedWorkerAddress) { let worker = address.root(); - worker.upcast().fire_simple_event("error"); + worker.upcast().fire_event("error"); } #[allow(unsafe_code)] From 80575c3d2e033e27bd4c222662e405f5714d1a4d Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Thu, 3 Nov 2016 15:46:00 -0400 Subject: [PATCH 2/3] Bump html5ever-atoms: 0.1.0 -> 0.1.1. https://github.com/servo/html5ever/pull/230 --- components/servo/Cargo.lock | 18 +++++++++--------- ports/cef/Cargo.lock | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index c2d56f2a254..59c55cd1ba3 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -971,7 +971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -984,7 +984,7 @@ dependencies = [ [[package]] name = "html5ever-atoms" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1169,7 +1169,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1985,7 +1985,7 @@ dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", "hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2041,7 +2041,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2337,7 +2337,7 @@ dependencies = [ "fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2373,7 +2373,7 @@ dependencies = [ "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2853,7 +2853,7 @@ name = "xml5ever" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2945,7 +2945,7 @@ dependencies = [ "checksum heartbeats-simple-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53c4b67617665d7f4172f381f9843c1bec6a4fccc9a9226529e5b1be40dc1301" "checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58" "checksum html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a2e00f17a864dfee00d41b46fda2a669e10e96bf71f8c712b3c88f4977188d7" -"checksum html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "860439a63e39a4d3506b9cff6107fa238f89edf7aee41ca5a055acb301a556a3" +"checksum html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "daefa106438c66af58309c84842b5db1df2733fe35849f39adde6fdf63583d40" "checksum httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46534074dbb80b070d60a5cb8ecadd8963a00a438ae1a95268850a7ef73b67ae" "checksum hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "eb27e8a3e8f17ac43ffa41bbda9cf5ad3f9f13ef66fa4873409d4902310275f7" "checksum hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "572d2168173019de312a050a24f2ad33ac2ac7895a2139fbf21ee6b6f470a24e" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 2ad2a845d5f..bf263059775 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -878,7 +878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -891,7 +891,7 @@ dependencies = [ [[package]] name = "html5ever-atoms" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1076,7 +1076,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1836,7 +1836,7 @@ dependencies = [ "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", "hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1892,7 +1892,7 @@ dependencies = [ "gfx_traits 0.0.1", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2221,7 +2221,7 @@ dependencies = [ "fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2711,7 +2711,7 @@ name = "xml5ever" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2797,7 +2797,7 @@ dependencies = [ "checksum heartbeats-simple-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53c4b67617665d7f4172f381f9843c1bec6a4fccc9a9226529e5b1be40dc1301" "checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58" "checksum html5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a2e00f17a864dfee00d41b46fda2a669e10e96bf71f8c712b3c88f4977188d7" -"checksum html5ever-atoms 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "860439a63e39a4d3506b9cff6107fa238f89edf7aee41ca5a055acb301a556a3" +"checksum html5ever-atoms 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "daefa106438c66af58309c84842b5db1df2733fe35849f39adde6fdf63583d40" "checksum httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46534074dbb80b070d60a5cb8ecadd8963a00a438ae1a95268850a7ef73b67ae" "checksum hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "eb27e8a3e8f17ac43ffa41bbda9cf5ad3f9f13ef66fa4873409d4902310275f7" "checksum hyper_serde 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "572d2168173019de312a050a24f2ad33ac2ac7895a2139fbf21ee6b6f470a24e" From f447040ea98d5a92f95d6dd3116939544441b5d8 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Wed, 2 Nov 2016 23:49:52 -0400 Subject: [PATCH 3/3] Migrate `EventTarget` event firing functions to use `Atom`s. This allows us to utilize more `atom` macros. --- components/atoms/static_atoms.txt | 4 ++++ components/script/dom/document.rs | 2 +- components/script/dom/event.rs | 6 ++++-- components/script/dom/eventtarget.rs | 12 ++++++------ components/script/dom/htmldetailselement.rs | 2 +- components/script/dom/htmlformelement.rs | 8 ++++---- components/script/dom/htmliframeelement.rs | 2 +- components/script/dom/htmlimageelement.rs | 8 ++++---- components/script/dom/htmlinputelement.rs | 8 ++++---- components/script/dom/htmllinkelement.rs | 4 ++-- components/script/dom/mediaquerylist.rs | 2 +- components/script/dom/serviceworker.rs | 5 +++-- components/script/dom/serviceworkercontainer.rs | 3 ++- components/script/dom/serviceworkerglobalscope.rs | 3 ++- components/script/dom/websocket.rs | 4 ++-- components/script/dom/worker.rs | 2 +- 16 files changed, 42 insertions(+), 33 deletions(-) diff --git a/components/atoms/static_atoms.txt b/components/atoms/static_atoms.txt index d050346177f..83cddbbf7e6 100644 --- a/components/atoms/static_atoms.txt +++ b/components/atoms/static_atoms.txt @@ -70,4 +70,8 @@ keydown abort beforescriptexecute afterscriptexecute +invalid +change +open +toggle diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 3878a8f23ee..11367b739c5 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -606,7 +606,7 @@ impl Document { self.ready_state.set(state); - self.upcast::().fire_event("readystatechange"); + self.upcast::().fire_event(atom!("readystatechange")); } /// Return whether scripting is enabled or not diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index ca8d5c8c7ac..96e1d3658cc 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -330,7 +330,9 @@ impl Runnable for EventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_event_with_params(&*self.name, self.bubbles, self.cancelable); + let bubbles = self.bubbles.clone(); + let cancelable = self.cancelable.clone(); + target.fire_event_with_params(self.name, bubbles, cancelable); } } @@ -345,6 +347,6 @@ impl Runnable for SimpleEventRunnable { fn handler(self: Box) { let target = self.target.root(); - target.fire_event(&*self.name); + target.fire_event(self.name); } } diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 5c65ec195a8..48ba920ad60 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -491,28 +491,28 @@ impl EventTarget { } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_event(&self, name: &str) -> Root { + pub fn fire_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::DoesNotBubble, EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_bubbling_event(&self, name: &str) -> Root { + pub fn fire_bubbling_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::Bubbles, EventCancelable::NotCancelable) } // https://dom.spec.whatwg.org/#concept-event-fire - pub fn fire_cancelable_event(&self, name: &str) -> Root { + pub fn fire_cancelable_event(&self, name: Atom) -> Root { 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 { + pub fn fire_bubbling_cancelable_event(&self, name: Atom) -> Root { self.fire_event_with_params(name, EventBubbles::Bubbles, EventCancelable::Cancelable) @@ -520,11 +520,11 @@ impl EventTarget { // https://dom.spec.whatwg.org/#concept-event-fire pub fn fire_event_with_params(&self, - name: &str, + name: Atom, bubbles: EventBubbles, cancelable: EventCancelable) -> Root { - let event = Event::new(&self.global(), Atom::from(name), bubbles, cancelable); + let event = Event::new(&self.global(), name, bubbles, cancelable); event.fire(self); event } diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs index b829dc79ee9..8df0f1a62fb 100644 --- a/components/script/dom/htmldetailselement.rs +++ b/components/script/dom/htmldetailselement.rs @@ -94,7 +94,7 @@ impl Runnable for DetailsNotificationRunnable { fn handler(self: Box) { let target = self.element.root(); if target.check_toggle_count(self.toggle_number) { - target.upcast::().fire_event("toggle"); + target.upcast::().fire_event(atom!("toggle")); } } } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 8db261996b1..4ecc6a44fa0 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -304,14 +304,14 @@ impl HTMLFormElement { { if self.interactive_validation().is_err() { // TODO: Implement event handlers on all form control elements - self.upcast::().fire_event("invalid"); + self.upcast::().fire_event(atom!("invalid")); return; } } // Step 5 if submit_method_flag == SubmittedFrom::NotFromForm { let event = self.upcast::() - .fire_bubbling_cancelable_event("submit"); + .fire_bubbling_cancelable_event(atom!("submit")); if event.DefaultPrevented() { return; } @@ -481,7 +481,7 @@ impl HTMLFormElement { // Step 5-6 let unhandled_invalid_controls = invalid_controls.into_iter().filter_map(|field| { let event = field.as_event_target() - .fire_cancelable_event("invalid"); + .fire_cancelable_event(atom!("invalid")); if !event.DefaultPrevented() { return Some(field); } None }).collect::>(); @@ -610,7 +610,7 @@ impl HTMLFormElement { } let event = self.upcast::() - .fire_bubbling_cancelable_event("reset"); + .fire_bubbling_cancelable_event(atom!("reset")); if event.DefaultPrevented() { return; } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 069765bb810..2c1ff2adb0d 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -239,7 +239,7 @@ impl HTMLIFrameElement { // TODO Step 3 - set child document `mut iframe load` flag // Step 4 - self.upcast::().fire_event("load"); + self.upcast::().fire_event(atom!("load")); let mut blocker = self.load_blocker.borrow_mut(); LoadBlocker::terminate(&mut blocker); diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index e5177b28730..e8a269c782c 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -105,12 +105,12 @@ impl Runnable for ImageResponseHandlerRunnable { // Fire image.onload if trigger_image_load { - element.upcast::().fire_event("load"); + element.upcast::().fire_event(atom!("load")); } // Fire image.onerror if trigger_image_error { - element.upcast::().fire_event("error"); + element.upcast::().fire_event(atom!("error")); } // Trigger reflow @@ -180,8 +180,8 @@ impl HTMLImageElement { // Step 11, substep 5 let img = self.img.root(); img.current_request.borrow_mut().source_url = Some(self.src.into()); - img.upcast::().fire_event("error"); - img.upcast::().fire_event("loadend"); + img.upcast::().fire_event(atom!("error")); + img.upcast::().fire_event(atom!("loadend")); } } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index ebbff4bc1ec..b599d4369dc 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -849,8 +849,8 @@ impl HTMLInputElement { let filelist = FileList::new(&window, files); self.filelist.set(Some(&filelist)); - target.fire_bubbling_event("input"); - target.fire_bubbling_event("change"); + target.fire_bubbling_event(atom!("input")); + target.fire_bubbling_event(atom!("change")); } } } @@ -1286,8 +1286,8 @@ impl Activatable for HTMLInputElement { // https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio):activation-behavior // Check if document owner is fully active let target = self.upcast::(); - target.fire_bubbling_event("input"); - target.fire_bubbling_event("change"); + target.fire_bubbling_event(atom!("input")); + target.fire_bubbling_event(atom!("change")); }, InputType::InputFile => self.select_files(None), _ => () diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 2312918c751..a7b274095c0 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -325,7 +325,7 @@ impl FetchResponseListener for StylesheetContext { if let Some(ref meta) = self.metadata { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { } else { - self.elem.root().upcast::().fire_event("error"); + self.elem.root().upcast::().fire_event(atom!("error")); } } } @@ -380,7 +380,7 @@ impl FetchResponseListener for StylesheetContext { document.finish_load(LoadType::Stylesheet(self.url.clone())); - let event = if successful { "load" } else { "error" }; + let event = if successful { atom!("load") } else { atom!("error") }; elem.upcast::().fire_event(event); } diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs index aef1c908e8a..c140f5f2c48 100644 --- a/components/script/dom/mediaquerylist.rs +++ b/components/script/dom/mediaquerylist.rs @@ -142,7 +142,7 @@ impl WeakMediaQueryListVec { pub fn evaluate_and_report_changes(&self) { for mql in self.cell.borrow().iter() { if let MediaQueryListMatchState::Changed(_) = mql.root().unwrap().evaluate_changes() { - mql.root().unwrap().upcast::().fire_event("change"); + mql.root().unwrap().upcast::().fire_event(atom!("change")); } } } diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs index 2ff3d218cb3..373ed38c761 100644 --- a/components/script/dom/serviceworker.rs +++ b/components/script/dom/serviceworker.rs @@ -18,6 +18,7 @@ use dom::globalscope::GlobalScope; use js::jsapi::{HandleValue, JSContext}; use script_thread::Runnable; use script_traits::{ScriptMsg, DOMMessage}; +use servo_atoms::Atom; use std::cell::Cell; use url::Url; @@ -56,12 +57,12 @@ impl ServiceWorker { pub fn dispatch_simple_error(address: TrustedServiceWorkerAddress) { let service_worker = address.root(); - service_worker.upcast().fire_event("error"); + service_worker.upcast().fire_event(atom!("error")); } pub fn set_transition_state(&self, state: ServiceWorkerState) { self.state.set(state); - self.upcast::().fire_event("statechange"); + self.upcast::().fire_event(Atom::from("statechange")); } pub fn get_script_url(&self) -> Url { diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index 6ad13fc317b..c83d859b4ce 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -15,6 +15,7 @@ use dom::promise::Promise; use dom::serviceworker::ServiceWorker; use dom::serviceworkerregistration::ServiceWorkerRegistration; use script_thread::ScriptThread; +use servo_atoms::Atom; use std::ascii::AsciiExt; use std::default::Default; use std::rc::Rc; @@ -45,7 +46,7 @@ pub trait Controllable { impl Controllable for ServiceWorkerContainer { fn set_controller(&self, active_worker: &ServiceWorker) { self.controller.set(Some(active_worker)); - self.upcast::().fire_event("controllerchange"); + self.upcast::().fire_event(Atom::from("controllerchange")); } } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index b9c3fb483ad..adf416d4fc3 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -28,6 +28,7 @@ use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as Req use rand::random; use script_runtime::{CommonScriptMsg, StackRootTLS, get_reports, new_rt_and_cx, ScriptChan}; use script_traits::{TimerEvent, WorkerGlobalScopeInit, ScopeThings, ServiceWorkerMsg, WorkerScriptLoadOrigin}; +use servo_atoms::Atom; use std::sync::mpsc::{Receiver, RecvError, Select, Sender, channel}; use std::thread; use std::time::Duration; @@ -268,7 +269,7 @@ impl ServiceWorkerGlobalScope { // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event // 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 - self.upcast::().fire_event("fetch"); + self.upcast::().fire_event(Atom::from("fetch")); let _ = mediator.response_chan.send(None); } } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index c8999b52102..dd49f62d247 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -498,7 +498,7 @@ impl Runnable for ConnectionEstablishedTask { } // Step 6. - ws.upcast().fire_event("open"); + ws.upcast().fire_event(atom!("open")); } } @@ -548,7 +548,7 @@ impl Runnable for CloseTask { // Step 2. if self.failed { - ws.upcast().fire_event("error"); + ws.upcast().fire_event(atom!("error")); } // Step 3. diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 72f058c16f2..42c0d1e553d 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -138,7 +138,7 @@ impl Worker { pub fn dispatch_simple_error(address: TrustedWorkerAddress) { let worker = address.root(); - worker.upcast().fire_event("error"); + worker.upcast().fire_event(atom!("error")); } #[allow(unsafe_code)]