aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
authorJinwoo Song <jinwoo7.song@samsung.com>2015-05-16 14:48:27 +0900
committerMs2ger <ms2ger@gmail.com>2015-06-16 09:45:42 +0200
commit7781f331d3407a895f1dadeeff3a74ad0c7f5ca8 (patch)
treeaee9a394c74ffa21e23d98ff9a23f093a877a9ce /components/script/dom/websocket.rs
parent4435e6f42a1b57a3e6a0cfbb1033525fef5db174 (diff)
downloadservo-7781f331d3407a895f1dadeeff3a74ad0c7f5ca8.tar.gz
servo-7781f331d3407a895f1dadeeff3a74ad0c7f5ca8.zip
WebSocket constructor should not panic
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);