From 66e9b33a527b10f1f775f2f0aeab34a07150ecda Mon Sep 17 00:00:00 2001 From: Paul Faria Date: Sat, 16 May 2015 14:10:10 -0400 Subject: [PATCH] Fixed definition of Close and Send in WebSocket.webidl and updated implementation in websocket.rs. --- components/script/dom/webidls/WebSocket.webidl | 6 +++--- components/script/dom/websocket.rs | 11 ++++++----- .../Close-reason-unpaired-surrogates.htm.ini | 2 ++ .../websockets/Send-Unpaired-Surrogates.htm.ini | 4 ++++ .../websockets/interfaces/WebSocket/send/006.html.ini | 2 ++ 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/components/script/dom/webidls/WebSocket.webidl b/components/script/dom/webidls/WebSocket.webidl index 6067ca30c4f7..3fd2fcd403df 100644 --- a/components/script/dom/webidls/WebSocket.webidl +++ b/components/script/dom/webidls/WebSocket.webidl @@ -21,13 +21,13 @@ interface WebSocket : EventTarget { attribute EventHandler onclose; //readonly attribute DOMString extensions; //readonly attribute DOMString protocol; - //[Throws] void close([Clamp] optional unsigned short code, optional DOMString reason); //Clamp doesn't work - [Throws] void close(optional unsigned short code, optional DOMString reason); //No clamp version - works + //[Throws] void close([Clamp] optional unsigned short code, optional USVString reason); //Clamp doesn't work + [Throws] void close(optional unsigned short code, optional USVString reason); //No clamp version - works //messaging //attribute EventHandler onmessage; //attribute BinaryType binaryType; - [Throws] void send(optional DOMString data); + [Throws] void send(optional USVString data); //void send(Blob data); //void send(ArrayBuffer data); //void send(ArrayBufferView data); diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 75c868b50db8..c9061457a811 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -14,6 +14,7 @@ use dom::bindings::error::Error::Syntax; use dom::bindings::global::{GlobalField, GlobalRef}; use dom::bindings::js::{Temporary, JSRef, Rootable}; use dom::bindings::refcounted::Trusted; +use dom::bindings::str::USVString; use dom::bindings::trace::JSTraceable; use dom::bindings::utils::reflect_dom_object; use dom::closeevent::CloseEvent; @@ -153,7 +154,7 @@ impl<'a> WebSocketMethods for JSRef<'a, WebSocket> { self.ready_state.get() as u16 } - fn Send(self, data: Option)-> Fallible<()>{ + fn Send(self, data: Option)-> Fallible<()>{ /*TODO: This is not up to spec see http://html.spec.whatwg.org/multipage/comms.html search for "If argument is a string" TODO: Need to buffer data TODO: bufferedAmount attribute returns the size of the buffer in bytes - @@ -168,11 +169,11 @@ impl<'a> WebSocketMethods for JSRef<'a, WebSocket> { let _ = my_sender.send_message(Message::Close(None)); return Ok(()); } - let _ = my_sender.send_message(Message::Text(data.unwrap())); + let _ = my_sender.send_message(Message::Text(data.unwrap().0)); return Ok(()) } - fn Close(self, code: Option, reason: Option) -> Fallible<()>{ + fn Close(self, code: Option, reason: Option) -> Fallible<()>{ if let Some(code) = code { //Check code is NOT 1000 NOR in the range of 3000-4999 (inclusive) if code != 1000 && (code < 3000 || code > 4999) { @@ -180,7 +181,7 @@ impl<'a> WebSocketMethods for JSRef<'a, WebSocket> { } } if let Some(ref reason) = reason { - if reason.as_bytes().len() > 123 { //reason cannot be larger than 123 bytes + if reason.0.as_bytes().len() > 123 { //reason cannot be larger than 123 bytes return Err(Error::Syntax); } } @@ -205,7 +206,7 @@ impl<'a> WebSocketMethods for JSRef<'a, WebSocket> { self.code.set(code); } if let Some(reason) = reason { - *self.reason.borrow_mut() = reason; + *self.reason.borrow_mut() = reason.0; } self.ready_state.set(WebSocketRequestState::Closing); self.sendCloseFrame.set(true); diff --git a/tests/wpt/metadata/websockets/Close-reason-unpaired-surrogates.htm.ini b/tests/wpt/metadata/websockets/Close-reason-unpaired-surrogates.htm.ini index 562ee256ea00..d2ce371b39f0 100644 --- a/tests/wpt/metadata/websockets/Close-reason-unpaired-surrogates.htm.ini +++ b/tests/wpt/metadata/websockets/Close-reason-unpaired-surrogates.htm.ini @@ -1,3 +1,5 @@ [Close-reason-unpaired-surrogates.htm] type: testharness expected: TIMEOUT + [W3C WebSocket API - Create WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get closed] + expected: NOTRUN diff --git a/tests/wpt/metadata/websockets/Send-Unpaired-Surrogates.htm.ini b/tests/wpt/metadata/websockets/Send-Unpaired-Surrogates.htm.ini index b46ddc67b95b..265e9aa90932 100644 --- a/tests/wpt/metadata/websockets/Send-Unpaired-Surrogates.htm.ini +++ b/tests/wpt/metadata/websockets/Send-Unpaired-Surrogates.htm.ini @@ -1,3 +1,7 @@ [Send-Unpaired-Surrogates.htm] type: testharness expected: TIMEOUT + [W3C WebSocket API - Send unpaired surrogates on a WebSocket - Message should be received] + expected: NOTRUN + [W3C WebSocket API - Send unpaired surrogates on a WebSocket - Connection should be closed] + expected: NOTRUN diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/send/006.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/send/006.html.ini index 9701e26d8e92..7a904fb67324 100644 --- a/tests/wpt/metadata/websockets/interfaces/WebSocket/send/006.html.ini +++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/send/006.html.ini @@ -1,3 +1,5 @@ [006.html] type: testharness expected: TIMEOUT + [WebSockets: send() with unpaired surrogate when readyState is OPEN] + expected: TIMEOUT