diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/event.rs | 38 | ||||
-rw-r--r-- | components/script/dom/htmldetailselement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlformelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 8 | ||||
-rw-r--r-- | components/script/dom/storage.rs | 2 |
6 files changed, 44 insertions, 10 deletions
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index 9174fa2cb3d..da7664e0e19 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -8,9 +8,11 @@ use dom::bindings::codegen::Bindings::EventBinding::{EventConstants, EventMethod use dom::bindings::error::Fallible; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, MutNullableHeap, Root}; +use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::eventtarget::EventTarget; +use script_thread::Runnable; use std::cell::Cell; use std::default::Default; use string_cache::Atom; @@ -26,7 +28,7 @@ pub enum EventPhase { Bubbling = EventConstants::BUBBLING_PHASE, } -#[derive(PartialEq, HeapSizeOf)] +#[derive(PartialEq, HeapSizeOf, Copy, Clone)] pub enum EventBubbles { Bubbles, DoesNotBubble @@ -50,7 +52,7 @@ impl From<bool> for EventBubbles { } } -#[derive(PartialEq, HeapSizeOf)] +#[derive(PartialEq, HeapSizeOf, Copy, Clone)] pub enum EventCancelable { Cancelable, NotCancelable @@ -297,3 +299,35 @@ impl Event { target.dispatch_event(self) } } + +// https://dom.spec.whatwg.org/#concept-event-fire +pub struct EventRunnable { + pub target: Trusted<EventTarget>, + pub name: Atom, + pub bubbles: EventBubbles, + pub cancelable: EventCancelable, +} + +impl Runnable for EventRunnable { + fn name(&self) -> &'static str { "EventRunnable" } + + fn handler(self: Box<EventRunnable>) { + let target = self.target.root(); + target.fire_event(&*self.name, self.bubbles, self.cancelable); + } +} + +// https://html.spec.whatwg.org/multipage/#fire-a-simple-event +pub struct SimpleEventRunnable { + pub target: Trusted<EventTarget>, + pub name: Atom, +} + +impl Runnable for SimpleEventRunnable { + fn name(&self) -> &'static str { "SimpleEventRunnable" } + + fn handler(self: Box<SimpleEventRunnable>) { + let target = self.target.root(); + target.fire_simple_event(&*self.name); + } +} diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs index f8fc6545f8d..4b9d5146b95 100644 --- a/components/script/dom/htmldetailselement.rs +++ b/components/script/dom/htmldetailselement.rs @@ -79,7 +79,7 @@ impl VirtualMethods for HTMLDetailsElement { element: details, toggle_number: counter }; - let _ = task_source.queue(DOMManipulationTask::Runnable(runnable)); + let _ = task_source.queue(DOMManipulationTask(runnable)); } } } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 18c30a9d86c..4cd367d5032 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -484,7 +484,7 @@ impl HTMLFormElement { }; // Step 3 - window.dom_manipulation_task_source().queue(DOMManipulationTask::Runnable(nav)).unwrap(); + window.dom_manipulation_task_source().queue(DOMManipulationTask(nav)).unwrap(); } /// Interactively validate the constraints of form elements diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 8c28b1e8c8d..110138134c5 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -185,7 +185,7 @@ impl HTMLImageElement { src: src.into(), }); let task = window.dom_manipulation_task_source(); - let _ = task.queue(DOMManipulationTask::Runnable(runnable)); + let _ = task.queue(DOMManipulationTask(runnable)); } } } diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index b38f796e57c..3c9a4665303 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -242,7 +242,7 @@ impl HTMLMediaElement { elem: Trusted::new(self), }; let win = window_from_node(self); - let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask::Runnable(box task)); + let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask(box task)); } // https://html.spec.whatwg.org/multipage/#internal-pause-steps step 2.2 @@ -266,13 +266,13 @@ impl HTMLMediaElement { elem: Trusted::new(self), }; let win = window_from_node(self); - let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask::Runnable(box task)); + let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask(box task)); } fn queue_fire_simple_event(&self, type_: &'static str) { let win = window_from_node(self); let task = FireSimpleEventTask::new(self, type_); - let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask::Runnable(box task)); + let _ = win.dom_manipulation_task_source().queue(DOMManipulationTask(box task)); } fn fire_simple_event(&self, type_: &str) { @@ -499,7 +499,7 @@ impl HTMLMediaElement { fn queue_dedicated_media_source_failure_steps(&self) { let _ = window_from_node(self).dom_manipulation_task_source().queue( - DOMManipulationTask::Runnable(box DedicatedMediaSourceFailureTask::new(self))); + DOMManipulationTask(box DedicatedMediaSourceFailureTask::new(self))); } // https://html.spec.whatwg.org/multipage/#dedicated-media-source-failure-steps diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs index d927c5ba213..d44f9684027 100644 --- a/components/script/dom/storage.rs +++ b/components/script/dom/storage.rs @@ -161,7 +161,7 @@ impl Storage { let global_ref = global_root.r(); let task_source = global_ref.as_window().dom_manipulation_task_source(); let trusted_storage = Trusted::new(self); - task_source.queue(DOMManipulationTask::Runnable( + task_source.queue(DOMManipulationTask( box StorageEventRunnable::new(trusted_storage, key, old_value, new_value))).unwrap(); } } |