Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A couple improvements to `EventTarget` event firing. #14036

Merged
merged 3 commits into from Nov 4, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

Migrate `EventTarget` event firing functions to use `Atom`s.

This allows us to utilize more `atom` macros.
  • Loading branch information
frewsxcv committed Nov 3, 2016
commit f447040ea98d5a92f95d6dd3116939544441b5d8
@@ -70,4 +70,8 @@ keydown
abort
beforescriptexecute
afterscriptexecute
invalid
change
open
toggle

@@ -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
@@ -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();

This comment has been minimized.

@Ms2ger

Ms2ger Nov 4, 2016

Contributor

What's this about?

This comment has been minimized.

@nox

nox Nov 4, 2016

Member

Oops, filed #14062.

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);
}
}
@@ -491,40 +491,40 @@ 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)
}

// 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
}
@@ -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"));
}
}
}
@@ -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;
}
@@ -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);
@@ -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"));
}
}

@@ -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),
_ => ()
@@ -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);
}
@@ -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"));
}
}
}
@@ -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 {
@@ -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"));
}
}

@@ -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);
}
}
@@ -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.
@@ -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)]
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.