22
33const { webidl } = require ( '../fetch/webidl' )
44const { URLSerializer } = require ( '../fetch/data-url' )
5- const { getGlobalOrigin } = require ( '../fetch/global ' )
5+ const { environmentSettingsObject } = require ( '../fetch/util ' )
66const { staticPropertyDescriptors, states, sentCloseFrameState, opcodes, emptyBuffer } = require ( './constants' )
77const {
88 kWebSocketURL,
@@ -29,6 +29,8 @@ const { kEnumerableProperty, isBlobLike } = require('../../core/util')
2929const { getGlobalDispatcher } = require ( '../../global' )
3030const { types } = require ( 'node:util' )
3131
32+ const FastBuffer = Buffer [ Symbol . species ]
33+
3234let experimentalWarned = false
3335
3436// https://websockets.spec.whatwg.org/#interface-definition
@@ -67,7 +69,7 @@ class WebSocket extends EventTarget {
6769 protocols = options . protocols
6870
6971 // 1. Let baseURL be this's relevant settings object's API base URL.
70- const baseURL = getGlobalOrigin ( )
72+ const baseURL = environmentSettingsObject . settingsObject . baseUrl
7173
7274 // 1. Let urlRecord be the result of applying the URL parser to url with baseURL.
7375 let urlRecord
@@ -323,7 +325,7 @@ class WebSocket extends EventTarget {
323325 // increase the bufferedAmount attribute by the length of the
324326 // ArrayBuffer in bytes.
325327
326- const value = Buffer . from ( data )
328+ const value = new FastBuffer ( data )
327329 const frame = new WebsocketFrameSend ( value )
328330 const buffer = frame . createFrame ( opcodes . BINARY )
329331
@@ -344,7 +346,7 @@ class WebSocket extends EventTarget {
344346 // not throw an exception must increase the bufferedAmount attribute
345347 // by the length of data’s buffer in bytes.
346348
347- const ab = Buffer . from ( data , data . byteOffset , data . byteLength )
349+ const ab = new FastBuffer ( data , data . byteOffset , data . byteLength )
348350
349351 const frame = new WebsocketFrameSend ( ab )
350352 const buffer = frame . createFrame ( opcodes . BINARY )
@@ -368,7 +370,7 @@ class WebSocket extends EventTarget {
368370 const frame = new WebsocketFrameSend ( )
369371
370372 data . arrayBuffer ( ) . then ( ( ab ) => {
371- const value = Buffer . from ( ab )
373+ const value = new FastBuffer ( ab )
372374 frame . frameData = value
373375 const buffer = frame . createFrame ( opcodes . BINARY )
374376
@@ -505,9 +507,7 @@ class WebSocket extends EventTarget {
505507 set binaryType ( type ) {
506508 webidl . brandCheck ( this , WebSocket )
507509
508- if ( type !== 'blob' && type !== 'arraybuffer' ) {
509- this [ kBinaryType ] = 'blob'
510- } else {
510+ if ( type === 'blob' || type === 'arraybuffer' ) {
511511 this [ kBinaryType ] = type
512512 }
513513 }
@@ -644,7 +644,10 @@ webidl.converters.WebSocketSendData = function (V) {
644644 }
645645 }
646646
647- return webidl . converters . USVString ( V )
647+ // This is done with `Buffer.from`.
648+ // "To convert a string into a scalar value string, replace any surrogates
649+ // with U+FFFD."
650+ return webidl . converters . DOMString ( V )
648651}
649652
650653module . exports = {
0 commit comments