mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
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.
This commit is contained in:
parent
f7630dad87
commit
5dd6e21c2e
7 changed files with 82 additions and 13 deletions
|
@ -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 {
|
||||
|
|
37
components/script/task_source/websocket.rs
Normal file
37
components/script/task_source/websocket.rs
Normal file
|
@ -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,
|
||||
))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue