aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-06-16 01:47:10 -0600
committerbors-servo <metajack+bors@gmail.com>2015-06-16 01:47:10 -0600
commita5d76e4b2c6ae8e2db82fc5156ad1bebf7961f80 (patch)
treeaee9a394c74ffa21e23d98ff9a23f093a877a9ce /components/script/dom/websocket.rs
parent4435e6f42a1b57a3e6a0cfbb1033525fef5db174 (diff)
parent7781f331d3407a895f1dadeeff3a74ad0c7f5ca8 (diff)
downloadservo-a5d76e4b2c6ae8e2db82fc5156ad1bebf7961f80.tar.gz
servo-a5d76e4b2c6ae8e2db82fc5156ad1bebf7961f80.zip
Auto merge of #6397 - servo:ws-connect, r=Ms2ger
Make an early return when the WebSocket connection fails in the constructor. Also let the WebSocket connection to be closed when the connection could not be established. Fixes #6082.
Diffstat (limited to 'components/script/dom/websocket.rs')
-rw-r--r--components/script/dom/websocket.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index c0c6a624862..9272346d416 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -141,7 +141,16 @@ impl WebSocket {
// TODO Client::connect does not conform to RFC 6455
// see https://github.com/cyderize/rust-websocket/issues/38
- let request = Client::connect(parsed_url).unwrap();
+ let request = match Client::connect(parsed_url) {
+ Ok(request) => request,
+ Err(_) => {
+ let global_root = ws_root.global.root();
+ let address = Trusted::new(global_root.r().get_cx(), ws_root, global_root.r().script_chan().clone());
+ let task = box WebSocketTaskHandler::new(address, WebSocketTask::Close);
+ global_root.r().script_chan().send(ScriptMsg::RunnableMsg(task)).unwrap();
+ return Ok(Temporary::from_rooted(ws_root));
+ }
+ };
let response = request.send().unwrap();
response.validate().unwrap();
ws_root.ready_state.set(WebSocketRequestState::Open);