From 877c369e0bc5db4286457be36d015eeb1f0ae2f2 Mon Sep 17 00:00:00 2001 From: Jinwoo Song Date: Sat, 16 May 2015 14:48:27 +0900 Subject: WebSocket constructor should not panic Make an early return when the WebSocket connection fails in the constructor. Also let the WebSockect connection to be closed when the connection could not be established. Fixes #6082. --- components/script/dom/websocket.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'components/script/dom/websocket.rs') 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); -- cgit v1.2.3