diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-02-01 18:06:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-01 18:06:11 +0100 |
commit | 8176a4d1663529fb8aeebf7734c4994fa1d583f4 (patch) | |
tree | 94c7d6eb2679e641f59cf78640340f5b7af0022e /ext/websocket/01_websocket.js | |
parent | abf89f8c4675ed78c992fafd6d758bf4bfca8a1a (diff) |
refactor: primordials for instanceof (#13527)
Diffstat (limited to 'ext/websocket/01_websocket.js')
-rw-r--r-- | ext/websocket/01_websocket.js | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js index d04d7dab3..2c6337eef 100644 --- a/ext/websocket/01_websocket.js +++ b/ext/websocket/01_websocket.js @@ -10,29 +10,31 @@ const { HTTP_TOKEN_CODE_POINT_RE } = window.__bootstrap.infra; const { DOMException } = window.__bootstrap.domException; const { defineEventHandler } = window.__bootstrap.event; - const { Blob } = globalThis.__bootstrap.file; + const { Blob, BlobPrototype } = globalThis.__bootstrap.file; const { - ArrayBuffer, + ArrayBufferPrototype, ArrayBufferIsView, ArrayPrototypeJoin, + ArrayPrototypeMap, + ArrayPrototypeSome, DataView, ErrorPrototypeToString, + ObjectDefineProperties, + ObjectPrototypeIsPrototypeOf, + PromisePrototypeThen, + RegExpPrototypeTest, Set, - Symbol, String, - StringPrototypeToLowerCase, StringPrototypeEndsWith, - RegExpPrototypeTest, - ObjectDefineProperties, - ArrayPrototypeMap, - ArrayPrototypeSome, - PromisePrototypeThen, + StringPrototypeToLowerCase, + Symbol, + SymbolIterator, } = window.__bootstrap.primordials; webidl.converters["sequence<DOMString> or DOMString"] = (V, opts) => { // Union for (sequence<DOMString> or DOMString) if (webidl.type(V) === "Object" && V !== null) { - if (V[Symbol.iterator] !== undefined) { + if (V[SymbolIterator] !== undefined) { return webidl.converters["sequence<DOMString>"](V, opts); } } @@ -41,12 +43,15 @@ webidl.converters["WebSocketSend"] = (V, opts) => { // Union for (Blob or ArrayBufferView or ArrayBuffer or USVString) - if (V instanceof Blob) { + if (ObjectPrototypeIsPrototypeOf(BlobPrototype, V)) { return webidl.converters["Blob"](V, opts); } if (typeof V === "object") { // TODO(littledivy): use primordial for SharedArrayBuffer - if (V instanceof ArrayBuffer || V instanceof SharedArrayBuffer) { + if ( + ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, V) || + ObjectPrototypeIsPrototypeOf(SharedArrayBuffer.prototype, V) + ) { return webidl.converters["ArrayBuffer"](V, opts); } if (ArrayBufferIsView(V)) { @@ -79,52 +84,52 @@ [_readyState] = CONNECTING; get readyState() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_readyState]; } get CONNECTING() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return CONNECTING; } get OPEN() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return OPEN; } get CLOSING() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return CLOSING; } get CLOSED() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return CLOSED; } [_extensions] = ""; get extensions() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_extensions]; } [_protocol] = ""; get protocol() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_protocol]; } [_url] = ""; get url() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_url]; } [_binaryType] = "blob"; get binaryType() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_binaryType]; } set binaryType(value) { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); value = webidl.converters.DOMString(value, { prefix: "Failed to set 'binaryType' on 'WebSocket'", }); @@ -135,7 +140,7 @@ [_bufferedAmount] = 0; get bufferedAmount() { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); return this[_bufferedAmount]; } @@ -267,7 +272,7 @@ } send(data) { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); const prefix = "Failed to execute 'send' on 'WebSocket'"; webidl.requiredArguments(arguments.length, 1, { @@ -295,14 +300,14 @@ ); }; - if (data instanceof Blob) { + if (ObjectPrototypeIsPrototypeOf(BlobPrototype, data)) { PromisePrototypeThen( data.slice().arrayBuffer(), (ab) => sendTypedArray(new DataView(ab)), ); } else if (ArrayBufferIsView(data)) { sendTypedArray(data); - } else if (data instanceof ArrayBuffer) { + } else if (ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, data)) { sendTypedArray(new DataView(data)); } else { const string = String(data); @@ -321,7 +326,7 @@ } close(code = undefined, reason = undefined) { - webidl.assertBranded(this, WebSocket); + webidl.assertBranded(this, WebSocketPrototype); const prefix = "Failed to execute 'close' on 'WebSocket'"; if (code !== undefined) { @@ -514,6 +519,7 @@ defineEventHandler(WebSocket.prototype, "open"); webidl.configurePrototype(WebSocket); + const WebSocketPrototype = WebSocket.prototype; window.__bootstrap.webSocket = { WebSocket, |