summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo K <crowlkats@toaxl.com>2021-08-09 10:45:59 +0200
committerGitHub <noreply@github.com>2021-08-09 10:45:59 +0200
commitf546f51698636e629f3c314cd73e2cf4f176b330 (patch)
tree8ab76f3de9bd0a872b8b248d5325b25edea69bd9
parent16ae4a0d5799c9a4ed776f32929f73b1063ae4e8 (diff)
fix(websocket): allow any close code for server (#11614)
-rw-r--r--cli/tests/unit/http_test.ts2
-rw-r--r--extensions/http/01_http.js3
-rw-r--r--extensions/websocket/01_websocket.js19
3 files changed, 15 insertions, 9 deletions
diff --git a/cli/tests/unit/http_test.ts b/cli/tests/unit/http_test.ts
index ffd29ff86..4cdd84902 100644
--- a/cli/tests/unit/http_test.ts
+++ b/cli/tests/unit/http_test.ts
@@ -646,7 +646,7 @@ unitTest({ perms: { net: true } }, async function httpServerWebSocket() {
socket.onerror = () => fail();
socket.onmessage = (m) => {
socket.send(m.data);
- socket.close();
+ socket.close(1001);
};
await respondWith(response);
break;
diff --git a/extensions/http/01_http.js b/extensions/http/01_http.js
index b245383d8..3f8bcb3a8 100644
--- a/extensions/http/01_http.js
+++ b/extensions/http/01_http.js
@@ -17,7 +17,7 @@
const { BadResource, Interrupted } = core;
const { ReadableStream } = window.__bootstrap.streams;
const abortSignal = window.__bootstrap.abortSignal;
- const { WebSocket, _rid, _readyState, _eventLoop, _protocol } =
+ const { WebSocket, _rid, _readyState, _eventLoop, _protocol, _server } =
window.__bootstrap.webSocket;
const {
ArrayPrototypeIncludes,
@@ -370,6 +370,7 @@
const socket = webidl.createBranded(WebSocket);
setEventTargetData(socket);
+ socket[_server] = true;
response[_ws] = socket;
return { response, socket };
diff --git a/extensions/websocket/01_websocket.js b/extensions/websocket/01_websocket.js
index 7caff579e..7af795197 100644
--- a/extensions/websocket/01_websocket.js
+++ b/extensions/websocket/01_websocket.js
@@ -125,6 +125,7 @@
const _binaryType = Symbol("[[binaryType]]");
const _bufferedAmount = Symbol("[[bufferedAmount]]");
const _eventLoop = Symbol("[[eventLoop]]");
+ const _server = Symbol("[[server]]");
class WebSocket extends EventTarget {
[_rid];
@@ -387,13 +388,16 @@
});
}
- if (
- code !== undefined && !(code === 1000 || (3000 <= code && code < 5000))
- ) {
- throw new DOMException(
- "The close code must be either 1000 or in the range of 3000 to 4999.",
- "InvalidAccessError",
- );
+ if (!this[_server]) {
+ if (
+ code !== undefined &&
+ !(code === 1000 || (3000 <= code && code < 5000))
+ ) {
+ throw new DOMException(
+ "The close code must be either 1000 or in the range of 3000 to 4999.",
+ "InvalidAccessError",
+ );
+ }
}
if (reason !== undefined && core.encode(reason).byteLength > 123) {
@@ -525,5 +529,6 @@
_readyState,
_eventLoop,
_protocol,
+ _server,
};
})(this);