diff options
-rw-r--r-- | components/script/dom/websocket.rs | 20 | ||||
-rw-r--r-- | tests/wpt/metadata/MANIFEST.json | 11 | ||||
-rw-r--r-- | tests/wpt/web-platform-tests/websockets/interfaces/WebSocket/url/resolve.html | 12 |
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> |