@@ -8,6 +8,7 @@ import { Emitter } from "../../common/emitter"
8
8
import { HttpCode , HttpError } from "../../common/http"
9
9
import { getFirstString } from "../../common/util"
10
10
import { isDevMode , rootPath , version } from "../constants"
11
+ import { Feature } from "../cli"
11
12
import { authenticated , ensureAuthenticated , redirect , replaceTemplates } from "../http"
12
13
import { getMediaMime , pathToFsPath } from "../util"
13
14
import { VscodeProvider } from "../vscode"
@@ -209,14 +210,21 @@ wsRouter.ws("/", ensureAuthenticated, async (req) => {
209
210
`Sec-WebSocket-Accept: ${ reply } ` ,
210
211
]
211
212
213
+ // See if the browser reports it supports web socket compression.
212
214
// TODO: Parse this header properly.
213
215
const extensions = req . headers [ "sec-websocket-extensions" ]
214
- const permessageDeflate = extensions ? extensions . includes ( "permessage-deflate" ) : false
215
- if ( permessageDeflate ) {
216
+ const isCompressionSupported = extensions ? extensions . includes ( "permessage-deflate" ) : false
217
+
218
+ // TODO: For now we only use compression if the user enables it.
219
+ const isCompressionEnabled = ! ! req . args . enable ?. includes ( Feature . PermessageDeflate )
220
+
221
+ const useCompression = isCompressionEnabled && isCompressionSupported
222
+ if ( useCompression ) {
223
+ // This response header tells the browser the server supports compression.
216
224
responseHeaders . push ( "Sec-WebSocket-Extensions: permessage-deflate; server_max_window_bits=15" )
217
225
}
218
226
219
227
req . ws . write ( responseHeaders . join ( "\r\n" ) + "\r\n\r\n" )
220
228
221
- await vscode . sendWebsocket ( req . ws , req . query , permessageDeflate )
229
+ await vscode . sendWebsocket ( req . ws , req . query , useCompression )
222
230
} )
0 commit comments