aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/task_source')
-rw-r--r--components/script/task_source/dom_manipulation.rs5
-rw-r--r--components/script/task_source/file_reading.rs1
-rw-r--r--components/script/task_source/mod.rs6
-rw-r--r--components/script/task_source/networking.rs2
-rw-r--r--components/script/task_source/performance_timeline.rs3
-rw-r--r--components/script/task_source/remote_event.rs1
-rw-r--r--components/script/task_source/user_interaction.rs3
-rw-r--r--components/script/task_source/websocket.rs37
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,
+ ))
+ }
+}