aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-06-11 05:58:56 -0600
committerbors-servo <metajack+bors@gmail.com>2015-06-11 05:58:56 -0600
commita3eb253bdce7ed4ad5bcc2c2e7af9cfe01826d99 (patch)
treec8386625dfb50406373e4b0fa7923fcaa984f2af /components/script/dom/websocket.rs
parent74ef31cfc4805d6dbeaa9e4769f0ceb14d124733 (diff)
parent877c369e0bc5db4286457be36d015eeb1f0ae2f2 (diff)
downloadservo-a3eb253bdce7ed4ad5bcc2c2e7af9cfe01826d99.tar.gz
servo-a3eb253bdce7ed4ad5bcc2c2e7af9cfe01826d99.zip
Auto merge of #6338 - servo:ws-connect, r=Ms2ger
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. Fixes #6086. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6338) <!-- Reviewable:end -->
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);