aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/websocket.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/websocket.rs')
-rw-r--r--components/script/dom/websocket.rs26
1 files changed, 21 insertions, 5 deletions
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index d96ee00311d..59763c44a83 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -126,6 +126,24 @@ const BLOCKED_PORTS_LIST: &'static [u16] = &[
6000, // x11
];
+// Close codes defined in https://tools.ietf.org/html/rfc6455#section-7.4.1
+// Names are from https://github.com/mozilla/gecko-dev/blob/master/netwerk/protocol/websocket/nsIWebSocketChannel.idl
+#[allow(dead_code)]
+mod close_code {
+ pub const NORMAL: u16 = 1000;
+ pub const GOING_AWAY: u16 = 1001;
+ pub const PROTOCOL_ERROR: u16 = 1002;
+ pub const UNSUPPORTED_DATATYPE: u16 = 1003;
+ pub const NO_STATUS: u16 = 1005;
+ pub const ABNORMAL: u16 = 1006;
+ pub const INVALID_PAYLOAD: u16 = 1007;
+ pub const POLICY_VIOLATION: u16 = 1008;
+ pub const TOO_LARGE: u16 = 1009;
+ pub const EXTENSION_MISSING: u16 = 1010;
+ pub const INTERNAL_ERROR: u16 = 1011;
+ pub const TLS_FAILED: u16 = 1015;
+}
+
#[dom_struct]
pub struct WebSocket {
eventtarget: EventTarget,
@@ -426,8 +444,8 @@ impl WebSocketMethods for WebSocket {
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) {
+ //Fail if the supplied code isn't normal and isn't reserved for libraries, frameworks, and applications
+ if code != close_code::NORMAL && (code < 3000 || code > 4999) {
return Err(Error::InvalidAccess);
}
}
@@ -450,9 +468,7 @@ impl WebSocketMethods for WebSocket {
WebSocketRequestState::Open => {
//Closing handshake not started - still in open
//Start the closing by setting the code and reason if they exist
- if let Some(code) = code {
- self.code.set(code);
- }
+ self.code.set(code.unwrap_or(close_code::NO_STATUS));
if let Some(reason) = reason {
*self.reason.borrow_mut() = reason.0;
}