Skip to content

Commit

Permalink
Fixed definition of Close and Send in WebSocket.webidl and updated im…
Browse files Browse the repository at this point in the history
…plementation in websocket.rs.
  • Loading branch information
pauldfaria committed May 20, 2015
1 parent c51e9f0 commit 66e9b33
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 8 deletions.
6 changes: 3 additions & 3 deletions components/script/dom/webidls/WebSocket.webidl
Expand Up @@ -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);
Expand Down
11 changes: 6 additions & 5 deletions components/script/dom/websocket.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -153,7 +154,7 @@ impl<'a> WebSocketMethods for JSRef<'a, WebSocket> {
self.ready_state.get() as u16
}

fn Send(self, data: Option<DOMString>)-> Fallible<()>{
fn Send(self, data: Option<USVString>)-> 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 -
Expand All @@ -168,19 +169,19 @@ 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<u16>, reason: Option<DOMString>) -> Fallible<()>{
fn Close(self, code: Option<u16>, reason: Option<USVString>) -> 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) {
return Err(Error::InvalidAccess);
}
}
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);
}
}
Expand All @@ -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);
Expand Down
@@ -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
@@ -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
@@ -1,3 +1,5 @@
[006.html]
type: testharness
expected: TIMEOUT
[WebSockets: send() with unpaired surrogate when readyState is OPEN]
expected: TIMEOUT

0 comments on commit 66e9b33

Please sign in to comment.