diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-07-11 22:21:45 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-07-11 22:21:45 -0600 |
commit | afc0ccb48d03cfacec06b9c6d6be3626b46ff793 (patch) | |
tree | 9bd3647f9650386dcb6e36a902dc938d1e07eb95 /components/script/task_source | |
parent | 9b01a4cc97af29b81f92a403992d0498d4290f4f (diff) | |
download | servo-afc0ccb48d03cfacec06b9c6d6be3626b46ff793.tar.gz servo-afc0ccb48d03cfacec06b9c6d6be3626b46ff793.zip |
Add event runnables
Make tasks a wrapper over runnables
Diffstat (limited to 'components/script/task_source')
-rw-r--r-- | components/script/task_source/dom_manipulation.rs | 45 | ||||
-rw-r--r-- | components/script/task_source/user_interaction.rs | 37 |
2 files changed, 33 insertions, 49 deletions
diff --git a/components/script/task_source/dom_manipulation.rs b/components/script/task_source/dom_manipulation.rs index a1c06f2c09e..3cb08055446 100644 --- a/components/script/task_source/dom_manipulation.rs +++ b/components/script/task_source/dom_manipulation.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::refcounted::Trusted; -use dom::event::{EventBubbles, EventCancelable}; +use dom::event::{EventBubbles, EventCancelable, EventRunnable, SimpleEventRunnable}; use dom::eventtarget::EventTarget; use script_thread::{MainThreadScriptMsg, Runnable, ScriptThread}; use std::result::Result; @@ -27,44 +27,31 @@ impl DOMManipulationTaskSource { bubbles: EventBubbles, cancelable: EventCancelable) { let target = Trusted::new(target); - let _ = self.0.send(MainThreadScriptMsg::DOMManipulation(DOMManipulationTask::FireEvent( - target, name, bubbles, cancelable))); + let runnable = box EventRunnable { + target: target, + name: name, + bubbles: bubbles, + cancelable: cancelable, + }; + let _ = self.queue(DOMManipulationTask(runnable)); } pub fn queue_simple_event(&self, target: &EventTarget, name: Atom) { let target = Trusted::new(target); - let _ = self.0.send(MainThreadScriptMsg::DOMManipulation(DOMManipulationTask::FireSimpleEvent( - target, name))); + let runnable = box SimpleEventRunnable { + target: target, + name: name, + }; + let _ = self.queue(DOMManipulationTask(runnable)); } } -pub enum DOMManipulationTask { - // https://dom.spec.whatwg.org/#concept-event-fire - FireEvent(Trusted<EventTarget>, Atom, EventBubbles, EventCancelable), - // https://html.spec.whatwg.org/multipage/#fire-a-simple-event - FireSimpleEvent(Trusted<EventTarget>, Atom), - - Runnable(Box<Runnable + Send>), -} +pub struct DOMManipulationTask(pub Box<Runnable + Send>); impl DOMManipulationTask { pub fn handle_task(self, script_thread: &ScriptThread) { - use self::DOMManipulationTask::*; - - match self { - FireEvent(element, name, bubbles, cancelable) => { - let target = element.root(); - target.fire_event(&*name, bubbles, cancelable); - } - FireSimpleEvent(element, name) => { - let target = element.root(); - target.fire_simple_event(&*name); - } - Runnable(runnable) => { - if !runnable.is_cancelled() { - runnable.main_thread_handler(script_thread); - } - } + if !self.0.is_cancelled() { + self.0.main_thread_handler(script_thread); } } } diff --git a/components/script/task_source/user_interaction.rs b/components/script/task_source/user_interaction.rs index 24dd59af222..afdb7a34d29 100644 --- a/components/script/task_source/user_interaction.rs +++ b/components/script/task_source/user_interaction.rs @@ -3,9 +3,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::refcounted::Trusted; -use dom::event::{EventBubbles, EventCancelable}; +use dom::event::{EventBubbles, EventCancelable, EventRunnable}; use dom::eventtarget::EventTarget; -use script_thread::MainThreadScriptMsg; +use script_thread::{MainThreadScriptMsg, Runnable, ScriptThread}; use std::result::Result; use std::sync::mpsc::Sender; use string_cache::Atom; @@ -22,30 +22,27 @@ impl TaskSource<UserInteractionTask> for UserInteractionTaskSource { impl UserInteractionTaskSource { pub fn queue_event(&self, - target: &EventTarget, - name: Atom, - bubbles: EventBubbles, - cancelable: EventCancelable) { + target: &EventTarget, + name: Atom, + bubbles: EventBubbles, + cancelable: EventCancelable) { let target = Trusted::new(target); - let _ = self.0.send(MainThreadScriptMsg::UserInteraction(UserInteractionTask::FireEvent( - target, name, bubbles, cancelable))); + let runnable = box EventRunnable { + target: target, + name: name, + bubbles: bubbles, + cancelable: cancelable, + }; + let _ = self.queue(UserInteractionTask(runnable)); } } -pub enum UserInteractionTask { - // https://dom.spec.whatwg.org/#concept-event-fire - FireEvent(Trusted<EventTarget>, Atom, EventBubbles, EventCancelable), -} +pub struct UserInteractionTask(pub Box<Runnable + Send>); impl UserInteractionTask { - pub fn handle_task(self) { - use self::UserInteractionTask::*; - - match self { - FireEvent(element, name, bubbles, cancelable) => { - let target = element.root(); - target.fire_event(&*name, bubbles, cancelable); - } + pub fn handle_task(self, script_thread: &ScriptThread) { + if !self.0.is_cancelled() { + self.0.main_thread_handler(script_thread); } } } |