diff options
author | Agustin Chiappe Berrini <jnieve@gmail.com> | 2018-09-08 17:01:27 -0400 |
---|---|---|
committer | Agustin Chiappe Berrini <jnieve@gmail.com> | 2018-09-08 17:01:27 -0400 |
commit | 5dd6e21c2e7e1c35a2a4a57812126e28a4b58599 (patch) | |
tree | 5c98fbf6599a4d3ea28f8f37f9c9d2cdd44b9610 /components/script/task_source/websocket.rs | |
parent | f7630dad87da33449ce05b5e7a9ef6f747e9531d (diff) | |
download | servo-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.rs | 37 |
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, + )) + } +} |