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 -->
This commit is contained in:
bors-servo 2015-06-11 05:58:56 -06:00
commit a3eb253bdc
25 changed files with 557 additions and 41 deletions

View file

@ -141,7 +141,16 @@ impl WebSocket {
// TODO Client::connect does not conform to RFC 6455 // TODO Client::connect does not conform to RFC 6455
// see https://github.com/cyderize/rust-websocket/issues/38 // 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(); let response = request.send().unwrap();
response.validate().unwrap(); response.validate().unwrap();
ws_root.ready_state.set(WebSocketRequestState::Open); ws_root.ready_state.set(WebSocketRequestState::Open);

View file

@ -1,3 +1,6 @@
[progress.html] [progress.html]
type: testharness type: testharness
expected: TIMEOUT expected: TIMEOUT
[W3C WebSocket API - Create WebSocket - Pass a URL with a non ws/wss scheme - SYNTAX_ERR is thrown]
expected: FAIL

View file

@ -1,3 +1,5 @@
[Create-Secure-blocked-port.htm] [Create-Secure-blocked-port.htm]
type: testharness type: testharness
expected: TIMEOUT [W3C WebSocket API - Create Secure WebSocket - Pass a URL with a blocked port - SECURITY_ERR should be thrown]
expected: FAIL

View file

@ -1,3 +1,485 @@
[004.html] [004.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: new WebSocket(url, invalid protocol)]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 1]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 2]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 3]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 4]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 5]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 6]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 7]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 8]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 9]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 10]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 11]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 12]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 13]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 14]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 15]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 16]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 17]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 18]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 19]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 20]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 21]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 22]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 23]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 24]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 25]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 26]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 27]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 28]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 29]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 30]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 31]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 32]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 33]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 34]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 35]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 36]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 37]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 38]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 39]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 40]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 41]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 42]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 43]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 44]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 45]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 46]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 47]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 48]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 49]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 50]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 51]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 52]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 53]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 54]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 55]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 56]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 57]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 58]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 59]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 60]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 61]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 62]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 63]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 64]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 65]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 66]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 67]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 68]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 69]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 70]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 71]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 72]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 73]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 74]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 75]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 76]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 77]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 78]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 79]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 80]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 81]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 82]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 83]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 84]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 85]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 86]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 87]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 88]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 89]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 90]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 91]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 92]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 93]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 94]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 95]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 96]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 97]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 98]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 99]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 100]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 101]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 102]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 103]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 104]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 105]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 106]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 107]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 108]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 109]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 110]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 111]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 112]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 113]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 114]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 115]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 116]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 117]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 118]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 119]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 120]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 121]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 122]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 123]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 124]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 125]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 126]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 127]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 128]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 129]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 130]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 131]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 132]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 133]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 134]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 135]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 136]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 137]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 138]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 139]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 140]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 141]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 142]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 143]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 144]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 145]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 146]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 147]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 148]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 149]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 150]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 151]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 152]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 153]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 154]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 155]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 156]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 157]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 158]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 159]
expected: FAIL
[WebSockets: new WebSocket(url, invalid protocol) 160]
expected: FAIL

View file

@ -1,3 +0,0 @@
[005.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +1,5 @@
[007.html] [007.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: new WebSocket(url, null char)]
expected: FAIL

View file

@ -1,3 +0,0 @@
[008.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[017.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +1,5 @@
[021.html] [021.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: Same sub protocol twice]
expected: FAIL

View file

@ -1,3 +0,0 @@
[bufferedAmount-defineProperty-getter.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[bufferedAmount-defineProperty-setter.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +1,5 @@
[010.html] [010.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: setting event handlers to undefined 3]
expected: FAIL

View file

@ -1,3 +1,5 @@
[011.html] [011.html]
type: testharness type: testharness
expected: TIMEOUT [onmessage]
expected: FAIL

View file

@ -1,3 +1,5 @@
[012.html] [012.html]
type: testharness type: testharness
expected: TIMEOUT [onmessage]
expected: FAIL

View file

@ -1,3 +1,11 @@
[013.html] [013.html]
type: testharness type: testharness
expected: TIMEOUT [onclose]
expected: FAIL
[onopen]
expected: FAIL
[onerror]
expected: FAIL

View file

@ -1,3 +0,0 @@
[014.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +1,6 @@
[020.html] [020.html]
type: testharness type: testharness
expected: TIMEOUT expected: TIMEOUT
[WebSockets: error events]
expected: TIMEOUT

View file

@ -1,3 +1,5 @@
[001.html] [001.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: getting extensions in connecting]
expected: FAIL

View file

@ -1,3 +1,5 @@
[protocol-initial.html] [protocol-initial.html]
type: testharness type: testharness
expected: TIMEOUT [WebSockets: getting protocol in connecting]
expected: FAIL

View file

@ -1,3 +0,0 @@
[004.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[005.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[005.html]
type: testharness
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[006.html]
type: testharness
expected: TIMEOUT

View file

@ -539,6 +539,12 @@
"url": "/_mozilla/mozilla/union.html" "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": [ "mozilla/window.html": [
{ {
"path": "mozilla/window.html", "path": "mozilla/window.html",

View file

@ -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>