aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source/websocket.rs
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/websocket.rs
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/websocket.rs')
-rw-r--r--components/script/task_source/websocket.rs37
1 files changed, 37 insertions, 0 deletions
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,
+ ))
+ }
+}