aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/websocket.rs28
-rw-r--r--tests/wpt/metadata/websockets/constructor/022.html.ini5
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-connecting.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-replace.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/constants/001.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/constants/002.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/constants/003.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/constants/004.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/001.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/002.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/003.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/004.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/006.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/007.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/008.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/events/009.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/001.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/002.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/send/002.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/url/001.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/url/002.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/url/003.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/url/004.html.ini3
-rw-r--r--tests/wpt/metadata/websockets/opening-handshake/001.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/security/001.html.ini3
27 files changed, 44 insertions, 71 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index effa8b54112..13423097cba 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -33,6 +33,7 @@ use websocket::stream::WebSocketStream;
use websocket::client::request::Url;
use websocket::Client;
use websocket::header::Origin;
+use websocket::result::WebSocketResult;
#[derive(JSTraceable, PartialEq, Copy, Clone)]
enum WebSocketRequestState {
@@ -101,6 +102,19 @@ fn parse_web_socket_url(url_str: &str) -> Fallible<(Url, String, u16, String, bo
Ok((parsed_url, host, port, resource, secure))
}
+/// *Establish a WebSocket Connection* as defined in RFC 6455.
+fn establish_a_websocket_connection(url: Url, origin: String)
+ -> WebSocketResult<(Sender<WebSocketStream>, Receiver<WebSocketStream>)> {
+ let mut request = try!(Client::connect(url));
+ request.headers.set(Origin(origin));
+
+ let response = try!(request.send());
+ try!(response.validate());
+
+ Ok(response.begin().split())
+}
+
+
impl WebSocket {
pub fn new_inherited(global: GlobalRef, url: Url) -> WebSocket {
WebSocket {
@@ -138,11 +152,11 @@ impl WebSocket {
global,
WebSocketBinding::Wrap);
- // TODO Client::connect does not conform to RFC 6455
- // see https://github.com/cyderize/rust-websocket/issues/38
- let mut request = match Client::connect(url) {
- Ok(request) => request,
- Err(_) => {
+ let channel = establish_a_websocket_connection(url, global.get_url().serialize());
+ let (temp_sender, temp_receiver) = match channel {
+ Ok(channel) => channel,
+ Err(e) => {
+ debug!("Failed to establish a WebSocket connection: {:?}", e);
let global_root = ws.r().global.root();
let address = Trusted::new(global_root.r().get_cx(), ws.r(), global_root.r().script_chan().clone());
let task = box WebSocketTaskHandler::new(address, WebSocketTask::Close);
@@ -150,11 +164,7 @@ impl WebSocket {
return Ok(ws);
}
};
- request.headers.set(Origin(global.get_url().serialize()));
- let response = request.send().unwrap();
- response.validate().unwrap();
- let (temp_sender, temp_receiver) = response.begin().split();
*ws.r().sender.borrow_mut() = Some(temp_sender);
*ws.r().receiver.borrow_mut() = Some(temp_receiver);
diff --git a/tests/wpt/metadata/websockets/constructor/022.html.ini b/tests/wpt/metadata/websockets/constructor/022.html.ini
index 975dd53c8ac..8cc8624b3a9 100644
--- a/tests/wpt/metadata/websockets/constructor/022.html.ini
+++ b/tests/wpt/metadata/websockets/constructor/022.html.ini
@@ -1,3 +1,6 @@
[022.html]
type: testharness
- expected: CRASH
+ expected: TIMEOUT
+ [WebSockets: protocol array]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.html.ini
index 977cd43a8c2..980ce5201dd 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.html.ini
@@ -1,3 +1,5 @@
[bufferedAmount-initial.html]
type: testharness
- expected: CRASH
+ [WebSockets: getting bufferedAmount]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.html.ini
index cff17b34408..69aec0c72f4 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.html.ini
@@ -1,3 +1,5 @@
[bufferedAmount-readonly.html]
type: testharness
- expected: CRASH
+ [WebSockets: setting bufferedAmount]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-connecting.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-connecting.html.ini
index 7e789067248..a181d51f56b 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-connecting.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-connecting.html.ini
@@ -1,3 +1,5 @@
[close-connecting.html]
type: testharness
- expected: CRASH
+ [WebSockets: close() when connecting]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-replace.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-replace.html.ini
deleted file mode 100644
index 7791be242c5..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/close/close-replace.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[close-replace.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/001.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/001.html.ini
deleted file mode 100644
index 67f5d9b0879..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[001.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/002.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/002.html.ini
deleted file mode 100644
index fe7c6057cbd..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[002.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/003.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/003.html.ini
deleted file mode 100644
index f2b01b122e4..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/003.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[003.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/004.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/004.html.ini
deleted file mode 100644
index 58468cab4ee..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/constants/004.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[004.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/001.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/001.html.ini
index 67f5d9b0879..406e60696e7 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/001.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/001.html.ini
@@ -1,3 +1,5 @@
[001.html]
type: testharness
- expected: CRASH
+ [WebSockets: getting on* 1]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/002.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/002.html.ini
deleted file mode 100644
index fe7c6057cbd..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[002.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/003.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/003.html.ini
deleted file mode 100644
index f2b01b122e4..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/003.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[003.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/004.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/004.html.ini
deleted file mode 100644
index 58468cab4ee..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/004.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[004.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/006.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/006.html.ini
index 016efd444be..1d8fe97b69b 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/006.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/006.html.ini
@@ -1,3 +1,5 @@
[006.html]
type: testharness
- expected: CRASH
+ [WebSockets: 'on*' in ws]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/007.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/007.html.ini
index 323bf776b2e..dcdd17dea05 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/007.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/007.html.ini
@@ -1,3 +1,5 @@
[007.html]
type: testharness
- expected: CRASH
+ [WebSockets: listening for events with onmessage]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/008.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/008.html.ini
deleted file mode 100644
index dc8d6d123e8..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/008.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[008.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/009.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/events/009.html.ini
deleted file mode 100644
index b4f74907aa9..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/events/009.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[009.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/001.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/001.html.ini
deleted file mode 100644
index 67f5d9b0879..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[001.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/002.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/002.html.ini
deleted file mode 100644
index fe7c6057cbd..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/readyState/002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[002.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/send/002.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/send/002.html.ini
deleted file mode 100644
index fe7c6057cbd..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/send/002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[002.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/001.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/001.html.ini
deleted file mode 100644
index 67f5d9b0879..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[001.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/002.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/002.html.ini
deleted file mode 100644
index fe7c6057cbd..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[002.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/003.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/003.html.ini
deleted file mode 100644
index f2b01b122e4..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/003.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[003.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/004.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/url/004.html.ini
deleted file mode 100644
index 58468cab4ee..00000000000
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/url/004.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[004.html]
- type: testharness
- expected: CRASH
diff --git a/tests/wpt/metadata/websockets/opening-handshake/001.html.ini b/tests/wpt/metadata/websockets/opening-handshake/001.html.ini
index 67f5d9b0879..42dc79e1c4f 100644
--- a/tests/wpt/metadata/websockets/opening-handshake/001.html.ini
+++ b/tests/wpt/metadata/websockets/opening-handshake/001.html.ini
@@ -1,3 +1,5 @@
[001.html]
type: testharness
- expected: CRASH
+ [WebSockets: invalid handshake]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/security/001.html.ini b/tests/wpt/metadata/websockets/security/001.html.ini
deleted file mode 100644
index 67f5d9b0879..00000000000
--- a/tests/wpt/metadata/websockets/security/001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[001.html]
- type: testharness
- expected: CRASH