aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Farwell <coreyf@rwell.org>2016-11-02 23:49:52 -0400
committerCorey Farwell <coreyf@rwell.org>2016-11-03 17:04:30 -0400
commitf447040ea98d5a92f95d6dd3116939544441b5d8 (patch)
tree5aad6d951310a4ef5d8271c01dab15fe5c80d518
parent80575c3d2e033e27bd4c222662e405f5714d1a4d (diff)
downloadservo-f447040ea98d5a92f95d6dd3116939544441b5d8.tar.gz
servo-f447040ea98d5a92f95d6dd3116939544441b5d8.zip
Migrate `EventTarget` event firing functions to use `Atom`s.
This allows us to utilize more `atom` macros.
-rw-r--r--components/atoms/static_atoms.txt4
-rw-r--r--components/script/dom/document.rs2
-rw-r--r--components/script/dom/event.rs6
-rw-r--r--components/script/dom/eventtarget.rs12
-rw-r--r--components/script/dom/htmldetailselement.rs2
-rw-r--r--components/script/dom/htmlformelement.rs8
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmlimageelement.rs8
-rw-r--r--components/script/dom/htmlinputelement.rs8
-rw-r--r--components/script/dom/htmllinkelement.rs4
-rw-r--r--components/script/dom/mediaquerylist.rs2
-rw-r--r--components/script/dom/serviceworker.rs5
-rw-r--r--components/script/dom/serviceworkercontainer.rs3
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs3
-rw-r--r--components/script/dom/websocket.rs4
-rw-r--r--components/script/dom/worker.rs2
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::<EventTarget>().fire_event("readystatechange");
+ self.upcast::<EventTarget>().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<EventRunnable>) {
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<SimpleEventRunnable>) {
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<Event> {
+ pub fn fire_event(&self, name: Atom) -> Root<Event> {
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<Event> {
+ pub fn fire_bubbling_event(&self, name: Atom) -> Root<Event> {
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<Event> {
+ pub fn fire_cancelable_event(&self, name: Atom) -> 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> {
+ pub fn fire_bubbling_cancelable_event(&self, name: Atom) -> Root<Event> {
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<Event> {
- 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<DetailsNotificationRunnable>) {
let target = self.element.root();
if target.check_toggle_count(self.toggle_number) {
- target.upcast::<EventTarget>().fire_event("toggle");
+ target.upcast::<EventTarget>().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::<EventTarget>().fire_event("invalid");
+ self.upcast::<EventTarget>().fire_event(atom!("invalid"));
return;
}
}
// Step 5
if submit_method_flag == SubmittedFrom::NotFromForm {
let event = self.upcast::<EventTarget>()
- .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::<Vec<FormSubmittableElement>>();
@@ -610,7 +610,7 @@ impl HTMLFormElement {
}
let event = self.upcast::<EventTarget>()
- .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::<EventTarget>().fire_event("load");
+ self.upcast::<EventTarget>().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::<EventTarget>().fire_event("load");
+ element.upcast::<EventTarget>().fire_event(atom!("load"));
}
// Fire image.onerror
if trigger_image_error {
- element.upcast::<EventTarget>().fire_event("error");
+ element.upcast::<EventTarget>().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::<EventTarget>().fire_event("error");
- img.upcast::<EventTarget>().fire_event("loadend");
+ img.upcast::<EventTarget>().fire_event(atom!("error"));
+ img.upcast::<EventTarget>().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::<EventTarget>();
- 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::<EventTarget>().fire_event("error");
+ self.elem.root().upcast::<EventTarget>().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::<EventTarget>().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::<EventTarget>().fire_event("change");
+ mql.root().unwrap().upcast::<EventTarget>().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::<EventTarget>().fire_event("statechange");
+ self.upcast::<EventTarget>().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::<EventTarget>().fire_event("controllerchange");
+ self.upcast::<EventTarget>().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::<EventTarget>().fire_event("fetch");
+ self.upcast::<EventTarget>().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)]