aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source
diff options
context:
space:
mode:
authorAgustin Chiappe Berrini <jnieve@gmail.com>2018-09-08 17:01:27 -0400
committerAgustin Chiappe Berrini <jnieve@gmail.com>2018-09-08 17:01:27 -0400
commit5dd6e21c2e7e1c35a2a4a57812126e28a4b58599 (patch)
tree5c98fbf6599a4d3ea28f8f37f9c9d2cdd44b9610 /components/script/task_source
parentf7630dad87da33449ce05b5e7a9ef6f747e9531d (diff)
downloadservo-5dd6e21c2e7e1c35a2a4a57812126e28a4b58599.tar.gz
servo-5dd6e21c2e7e1c35a2a4a57812126e28a4b58599.zip
Add Websocket task source
According to the doc: https://html.spec.whatwg.org/multipage/web-sockets.html#network The task source for all tasks queued in the websocket section are the websocket task source, so this commit also updates those references to use the appropriate one.
Diffstat (limited to 'components/script/task_source')
-rw-r--r--components/script/task_source/mod.rs4
-rw-r--r--components/script/task_source/websocket.rs37
2 files changed, 40 insertions, 1 deletions
diff --git a/components/script/task_source/mod.rs b/components/script/task_source/mod.rs
index b64f4b2b991..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;
@@ -28,7 +29,8 @@ pub enum TaskSourceName {
Networking,
PerformanceTimeline,
UserInteraction,
- RemoteEvent
+ RemoteEvent,
+ Websocket,
}
impl TaskSourceName {
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,
+ ))
+ }
+}