aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/websocket.rs20
-rw-r--r--tests/wpt/metadata/MANIFEST.json11
-rw-r--r--tests/wpt/web-platform-tests/websockets/interfaces/WebSocket/url/resolve.html12
3 files changed, 32 insertions, 11 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 39c627b72bd..e676e9d8fcd 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -47,7 +47,7 @@ no_jsmanaged_fields!(Receiver<WebSocketStream>);
#[dom_struct]
pub struct WebSocket {
eventtarget: EventTarget,
- url: DOMString,
+ url: Url,
global: GlobalField,
ready_state: Cell<WebSocketRequestState>,
sender: RefCell<Option<Sender<WebSocketStream>>>,
@@ -101,7 +101,7 @@ fn parse_web_socket_url(url_str: &str) -> Fallible<(Url, String, u16, String, bo
}
impl WebSocket {
- pub fn new_inherited(global: GlobalRef, url: DOMString) -> WebSocket {
+ pub fn new_inherited(global: GlobalRef, url: Url) -> WebSocket {
WebSocket {
eventtarget: EventTarget::new_inherited(EventTargetTypeId::WebSocket),
url: url,
@@ -121,25 +121,25 @@ impl WebSocket {
}
pub fn new(global: GlobalRef, url: DOMString) -> Fallible<Root<WebSocket>> {
+ // Step 1.
+ // FIXME extract the right variables once Client::connect
+ // implementation is fixed to follow the RFC 6455 properly.
+ let (url, _, _, _, _) = try!(parse_web_socket_url(&url));
+
/*TODO: This constructor is only a prototype, it does not accomplish the specs
defined here:
http://html.spec.whatwg.org
- Item 1 is already satisfied.
The remaining 8 items must be satisfied.
TODO: This constructor should be responsible for spawning a thread for the
receive loop after ws.r().Open() - See comment
*/
- let ws = reflect_dom_object(box WebSocket::new_inherited(global, url),
+ let ws = reflect_dom_object(box WebSocket::new_inherited(global, url.clone()),
global,
WebSocketBinding::Wrap);
- // FIXME extract the right variables once Client::connect implementation is
- // fixed to follow the RFC 6455 properly
- let (parsed_url, _, _, _, _) = try!(parse_web_socket_url(&ws.r().url));
-
// TODO Client::connect does not conform to RFC 6455
// see https://github.com/cyderize/rust-websocket/issues/38
- let request = match Client::connect(parsed_url) {
+ let request = match Client::connect(url) {
Ok(request) => request,
Err(_) => {
let global_root = ws.r().global.root();
@@ -198,7 +198,7 @@ impl<'a> WebSocketMethods for &'a WebSocket {
event_handler!(error, GetOnerror, SetOnerror);
fn Url(self) -> DOMString {
- self.url.clone()
+ self.url.serialize()
}
fn ReadyState(self) -> u16 {
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index f90ffd4fb39..af4492b4578 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -26471,7 +26471,16 @@
},
"local_changes": {
"deleted": [],
- "items": {},
+ "items": {
+ "testharness": {
+ "websockets/interfaces/WebSocket/url/resolve.html": [
+ {
+ "path": "websockets/interfaces/WebSocket/url/resolve.html",
+ "url": "/websockets/interfaces/WebSocket/url/resolve.html"
+ }
+ ]
+ }
+ },
"reftest_nodes": {}
},
"reftest_nodes": {
diff --git a/tests/wpt/web-platform-tests/websockets/interfaces/WebSocket/url/resolve.html b/tests/wpt/web-platform-tests/websockets/interfaces/WebSocket/url/resolve.html
new file mode 100644
index 00000000000..7708b69c8b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/websockets/interfaces/WebSocket/url/resolve.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>WebSocket#url: resolving</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../../../constants.js?pipe=sub></script>
+<div id=log></div>
+<script>
+test(function() {
+ var ws = new WebSocket(SCHEME_DOMAIN_PORT + '/echo?foo%20bar baz');
+ assert_equals(ws.url, SCHEME_DOMAIN_PORT + '/echo?foo%20bar%20baz');
+});
+</script>