diff options
Diffstat (limited to 'components/script/task_source')
-rw-r--r-- | components/script/task_source/dom_manipulation.rs | 5 | ||||
-rw-r--r-- | components/script/task_source/file_reading.rs | 1 | ||||
-rw-r--r-- | components/script/task_source/mod.rs | 6 | ||||
-rw-r--r-- | components/script/task_source/networking.rs | 2 | ||||
-rw-r--r-- | components/script/task_source/performance_timeline.rs | 3 | ||||
-rw-r--r-- | components/script/task_source/remote_event.rs | 1 | ||||
-rw-r--r-- | components/script/task_source/user_interaction.rs | 3 | ||||
-rw-r--r-- | components/script/task_source/websocket.rs | 37 |
8 files changed, 52 insertions, 6 deletions
diff --git a/components/script/task_source/dom_manipulation.rs b/components/script/task_source/dom_manipulation.rs index 03b2d85a945..f184aa3d828 100644 --- a/components/script/task_source/dom_manipulation.rs +++ b/components/script/task_source/dom_manipulation.rs @@ -27,7 +27,7 @@ impl fmt::Debug for DOMManipulationTaskSource { } impl TaskSource for DOMManipulationTaskSource { - const NAME: TaskSourceName = TaskSourceName::DOMManipulation; + const NAME: TaskSourceName = TaskSourceName::DOMManipulation; fn queue_with_canceller<T>( &self, @@ -40,7 +40,8 @@ impl TaskSource for DOMManipulationTaskSource { let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( ScriptThreadEventCategory::ScriptEvent, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + DOMManipulationTaskSource::NAME, )); self.0.send(msg).map_err(|_| ()) } diff --git a/components/script/task_source/file_reading.rs b/components/script/task_source/file_reading.rs index 8fd3a143eff..f8ca38a0c30 100644 --- a/components/script/task_source/file_reading.rs +++ b/components/script/task_source/file_reading.rs @@ -34,6 +34,7 @@ impl TaskSource for FileReadingTaskSource { ScriptThreadEventCategory::FileRead, Box::new(canceller.wrap_task(task)), Some(self.1), + FileReadingTaskSource::NAME, )) } } diff --git a/components/script/task_source/mod.rs b/components/script/task_source/mod.rs index 23fb3e9ca8f..4dbf0a61c37 100644 --- a/components/script/task_source/mod.rs +++ b/components/script/task_source/mod.rs @@ -10,6 +10,7 @@ pub mod networking; pub mod performance_timeline; pub mod remote_event; pub mod user_interaction; +pub mod websocket; use dom::globalscope::GlobalScope; use enum_iterator::IntoEnumIterator; @@ -20,7 +21,7 @@ use task::{TaskCanceller, TaskOnce}; // Note: When adding a task source, update this enum. // Note: The HistoryTraversalTaskSource is not part of this, // because it doesn't implement TaskSource. -#[derive(Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)] +#[derive(Clone, Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)] pub enum TaskSourceName { DOMManipulation, FileReading, @@ -28,7 +29,8 @@ pub enum TaskSourceName { Networking, PerformanceTimeline, UserInteraction, - RemoteEvent + RemoteEvent, + Websocket, } impl TaskSourceName { diff --git a/components/script/task_source/networking.rs b/components/script/task_source/networking.rs index 9058f9653e4..9ecbea9c80d 100644 --- a/components/script/task_source/networking.rs +++ b/components/script/task_source/networking.rs @@ -31,6 +31,7 @@ impl TaskSource for NetworkingTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(canceller.wrap_task(task)), Some(self.1), + NetworkingTaskSource::NAME, )) } } @@ -46,6 +47,7 @@ impl NetworkingTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(task), Some(self.1), + NetworkingTaskSource::NAME, )) } } diff --git a/components/script/task_source/performance_timeline.rs b/components/script/task_source/performance_timeline.rs index 05591bbe71b..6191db7600a 100644 --- a/components/script/task_source/performance_timeline.rs +++ b/components/script/task_source/performance_timeline.rs @@ -44,7 +44,8 @@ impl TaskSource for PerformanceTimelineTaskSource { let msg = CommonScriptMsg::Task( ScriptThreadEventCategory::PerformanceTimelineTask, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + PerformanceTimelineTaskSource::NAME, ); self.0.send(msg).map_err(|_| ()) } diff --git a/components/script/task_source/remote_event.rs b/components/script/task_source/remote_event.rs index 2d8428cddbf..97e33977e6f 100644 --- a/components/script/task_source/remote_event.rs +++ b/components/script/task_source/remote_event.rs @@ -31,6 +31,7 @@ impl TaskSource for RemoteEventTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(canceller.wrap_task(task)), Some(self.1), + RemoteEventTaskSource::NAME, )) } } diff --git a/components/script/task_source/user_interaction.rs b/components/script/task_source/user_interaction.rs index 2ace44f1093..2beaee95731 100644 --- a/components/script/task_source/user_interaction.rs +++ b/components/script/task_source/user_interaction.rs @@ -40,7 +40,8 @@ impl TaskSource for UserInteractionTaskSource { let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( ScriptThreadEventCategory::InputEvent, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + UserInteractionTaskSource::NAME, )); self.0.send(msg).map_err(|_| ()) } diff --git a/components/script/task_source/websocket.rs b/components/script/task_source/websocket.rs new file mode 100644 index 00000000000..fbf28aeeb92 --- /dev/null +++ b/components/script/task_source/websocket.rs @@ -0,0 +1,37 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use msg::constellation_msg::PipelineId; +use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory}; +use task::{TaskCanceller, TaskOnce}; +use task_source::{TaskSource, TaskSourceName}; + +#[derive(JSTraceable)] +pub struct WebsocketTaskSource(pub Box<ScriptChan + Send + 'static>, pub PipelineId); + +impl Clone for WebsocketTaskSource { + fn clone(&self) -> WebsocketTaskSource { + WebsocketTaskSource(self.0.clone(), self.1.clone()) + } +} + +impl TaskSource for WebsocketTaskSource { + const NAME: TaskSourceName = TaskSourceName::Websocket; + + fn queue_with_canceller<T>( + &self, + task: T, + canceller: &TaskCanceller, + ) -> Result<(), ()> + where + T: TaskOnce + 'static, + { + self.0.send(CommonScriptMsg::Task( + ScriptThreadEventCategory::NetworkEvent, + Box::new(canceller.wrap_task(task)), + Some(self.1), + WebsocketTaskSource::NAME, + )) + } +} |