diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-06-16 01:47:10 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-06-16 01:47:10 -0600 |
commit | a5d76e4b2c6ae8e2db82fc5156ad1bebf7961f80 (patch) | |
tree | aee9a394c74ffa21e23d98ff9a23f093a877a9ce | |
parent | 4435e6f42a1b57a3e6a0cfbb1033525fef5db174 (diff) | |
parent | 7781f331d3407a895f1dadeeff3a74ad0c7f5ca8 (diff) | |
download | servo-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.
15 files changed, 48 insertions, 28 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); diff --git a/tests/wpt/metadata/FileAPI/progress.html.ini b/tests/wpt/metadata/FileAPI/progress.html.ini index 4a68bc13c80..bd0857516f7 100644 --- a/tests/wpt/metadata/FileAPI/progress.html.ini +++ b/tests/wpt/metadata/FileAPI/progress.html.ini @@ -1,3 +1,6 @@ [progress.html] type: testharness expected: TIMEOUT + [W3C WebSocket API - Create WebSocket - Pass a URL with a non ws/wss scheme - SYNTAX_ERR is thrown] + expected: FAIL + diff --git a/tests/wpt/metadata/websockets/Create-Secure-blocked-port.htm.ini b/tests/wpt/metadata/websockets/Create-Secure-blocked-port.htm.ini index 3b3e39e8b69..f06483f7ead 100644 --- a/tests/wpt/metadata/websockets/Create-Secure-blocked-port.htm.ini +++ b/tests/wpt/metadata/websockets/Create-Secure-blocked-port.htm.ini @@ -1,3 +1,5 @@ [Create-Secure-blocked-port.htm] type: testharness - expected: CRASH + [W3C WebSocket API - Create Secure WebSocket - Pass a URL with a blocked port - SECURITY_ERR should be thrown] + expected: FAIL + diff --git a/tests/wpt/metadata/websockets/constructor/008.html.ini b/tests/wpt/metadata/websockets/constructor/008.html.ini deleted file mode 100644 index dc8d6d123e8..00000000000 --- a/tests/wpt/metadata/websockets/constructor/008.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[008.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/constructor/017.html.ini b/tests/wpt/metadata/websockets/constructor/017.html.ini deleted file mode 100644 index 2e28d320587..00000000000 --- a/tests/wpt/metadata/websockets/constructor/017.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[017.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/constructor/021.html.ini b/tests/wpt/metadata/websockets/constructor/021.html.ini index f80c6711af2..450a75a3112 100644 --- a/tests/wpt/metadata/websockets/constructor/021.html.ini +++ b/tests/wpt/metadata/websockets/constructor/021.html.ini @@ -1,3 +1,5 @@ [021.html] type: testharness - expected: CRASH + [WebSockets: Same sub protocol twice] + expected: FAIL + diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-getter.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-getter.html.ini deleted file mode 100644 index baf752b0c55..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-getter.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[bufferedAmount-defineProperty-getter.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini deleted file mode 100644 index f1f2f87f79f..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[bufferedAmount-defineProperty-setter.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/020.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/020.html.ini index 3d080960f3d..e12d8871a89 100644 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/020.html.ini +++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/020.html.ini @@ -1,3 +1,6 @@ [020.html] type: testharness - expected: CRASH + expected: TIMEOUT + [WebSockets: error events] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/004.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/004.html.ini deleted file mode 100644 index 58468cab4ee..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/004.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[004.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/005.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/005.html.ini deleted file mode 100644 index 3c0649a3bd8..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/005.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[005.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/005.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/005.html.ini deleted file mode 100644 index 3c0649a3bd8..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/005.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[005.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/006.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/006.html.ini deleted file mode 100644 index 016efd444be..00000000000 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/006.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[006.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 86b5ac0f31e..097dfd3a42c 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -539,6 +539,12 @@ "url": "/_mozilla/mozilla/union.html" } ], + "mozilla/websocket_connection_fail.html": [ + { + "path": "mozilla/websocket_connection_fail.html", + "url": "/_mozilla/mozilla/websocket_connection_fail.html" + } + ], "mozilla/window.html": [ { "path": "mozilla/window.html", diff --git a/tests/wpt/mozilla/tests/mozilla/websocket_connection_fail.html b/tests/wpt/mozilla/tests/mozilla/websocket_connection_fail.html new file mode 100644 index 00000000000..95c56636d53 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/websocket_connection_fail.html @@ -0,0 +1,19 @@ +<html> +<head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script> +async_test(function() { + var onclose = 0; + var ws = new WebSocket("ws://wrong_url"); + + ws.onclose = this.step_func_done(function(ev) { + onclose++; + assert_equals(onclose, 1); + }); +}); +</script> +</body> +</html> |