aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2015-07-15 15:29:09 +0200
committerMs2ger <ms2ger@gmail.com>2015-07-22 20:28:13 +0200
commit56c660d4de9d9a077f3d28348e29bda0b3ac0ae6 (patch)
tree8d3ef74123950463944e8eaa863cc3baf01175db /components/script/dom/websocket.rs
parent3f69eadc0d55b2f065d59dae84baeac45a0bdc8e (diff)
downloadservo-56c660d4de9d9a077f3d28348e29bda0b3ac0ae6.tar.gz
servo-56c660d4de9d9a077f3d28348e29bda0b3ac0ae6.zip
Split up WebSocketTaskHandler.
There's no real reason to have internal dynamic dispatch inside a trait object.
Diffstat (limited to 'components/script/dom/websocket.rs')
-rw-r--r--components/script/dom/websocket.rs54
1 files changed, 17 insertions, 37 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 6b97352f65b..2632d7838c5 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -142,7 +142,9 @@ impl WebSocket {
debug!("Failed to establish a WebSocket connection: {:?}", e);
let global_root = ws.r().global.root();
let address = Trusted::new(global_root.r().get_cx(), ws.r(), global_root.r().script_chan().clone());
- let task = box WebSocketTaskHandler::new(address, WebSocketTask::Close);
+ let task = box CloseTask {
+ addr: address,
+ };
global_root.r().script_chan().send(ScriptMsg::RunnableMsg(task)).unwrap();
return Ok(ws);
}
@@ -155,7 +157,9 @@ impl WebSocket {
let global_root = ws.r().global.root();
let addr: Trusted<WebSocket> =
Trusted::new(global_root.r().get_cx(), ws.r(), global_root.r().script_chan().clone());
- let open_task = box WebSocketTaskHandler::new(addr, WebSocketTask::ConnectionEstablished);
+ let open_task = box ConnectionEstablishedTask {
+ addr: addr,
+ };
global_root.r().script_chan().send(ScriptMsg::RunnableMsg(open_task)).unwrap();
//TODO: Spawn thread here for receive loop
/*TODO: Add receive loop here and make new thread run this
@@ -273,29 +277,13 @@ impl<'a> WebSocketMethods for &'a WebSocket {
}
-pub enum WebSocketTask {
- /// Task queued when *the WebSocket connection is established*.
- ConnectionEstablished,
- Close,
-}
-
-pub struct WebSocketTaskHandler {
+/// Task queued when *the WebSocket connection is established*.
+struct ConnectionEstablishedTask {
addr: Trusted<WebSocket>,
- task: WebSocketTask,
}
-impl WebSocketTaskHandler {
- pub fn new(addr: Trusted<WebSocket>, task: WebSocketTask) -> WebSocketTaskHandler {
- WebSocketTaskHandler {
- addr: addr,
- task: task,
- }
- }
-
- fn connection_established(&self) {
- /*TODO: Items 1, 3, 4, & 5 under "WebSocket connection is established" as specified here:
- https://html.spec.whatwg.org/multipage/#feedback-from-the-protocol
- */
+impl Runnable for ConnectionEstablishedTask {
+ fn handler(self: Box<Self>) {
let ws = self.addr.root();
// Step 1: Protocols.
@@ -314,8 +302,14 @@ impl WebSocketTaskHandler {
EventCancelable::NotCancelable);
event.fire(EventTargetCast::from_ref(ws.r()));
}
+}
- fn dispatch_close(&self) {
+struct CloseTask {
+ addr: Trusted<WebSocket>,
+}
+
+impl Runnable for CloseTask {
+ fn handler(self: Box<Self>) {
let ws = self.addr.root();
let ws = ws.r();
let global = ws.global.root();
@@ -350,17 +344,3 @@ impl WebSocketTaskHandler {
event.fire(target);
}
}
-
-impl Runnable for WebSocketTaskHandler {
- fn handler(self: Box<WebSocketTaskHandler>) {
- match self.task {
- WebSocketTask::ConnectionEstablished => {
- self.connection_established();
- }
- WebSocketTask::Close => {
- self.dispatch_close();
- }
- }
- }
-}
-