From 5a05cec9659f8e0b6db1ab03b72f705a94784aa2 Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 10 Jun 2022 10:21:54 -0500 Subject: [PATCH 01/11] chore: update Code to 1.67 Was able to remove our changes to common/webview.ts since they are upstream now. Other than that no serious changes, just context diffs. --- lib/vscode | 2 +- patches/base-path.diff | 23 +++++++++----- patches/disable-builtin-ext-update.diff | 27 +++++++++-------- patches/disable-downloads.diff | 10 +++---- patches/display-language.diff | 10 +++---- patches/github-auth.diff | 6 ++-- patches/integration.diff | 8 ++--- patches/local-storage.diff | 8 ++--- patches/log-level.diff | 6 ++-- patches/logout.diff | 2 +- patches/marketplace.diff | 2 +- patches/proposed-api.diff | 4 +-- patches/proxy-uri.diff | 6 ++-- patches/service-worker.diff | 2 +- patches/sourcemaps.diff | 6 ++-- patches/telemetry.diff | 12 ++++---- patches/update-check.diff | 18 +++++------ patches/webview.diff | 40 +++---------------------- 18 files changed, 85 insertions(+), 107 deletions(-) diff --git a/lib/vscode b/lib/vscode index dfd34e8260c2..c3511e6c69bb 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit dfd34e8260c270da74b5c2d86d61aee4b6d56977 +Subproject commit c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5 diff --git a/patches/base-path.diff b/patches/base-path.diff index 95bb8388eb78..40d2f8cac937 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -159,11 +159,18 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -253,7 +253,10 @@ export class WebClientServer { +@@ -250,14 +250,10 @@ export class WebClientServer { return res.end(); } -- const remoteAuthority = req.headers.host; +- let originalHost = req.headers['x-original-host']; +- if (Array.isArray(originalHost)) { +- originalHost = originalHost[0]; +- } +- const remoteAuthority = originalHost || req.headers.host; +- if (!remoteAuthority) { +- return serveError(req, res, 400, `Bad request.`); +- } + // It is not possible to reliably detect the remote authority on the server + // in all cases. Set this to something invalid to make sure we catch code + // that is using this when it should not. @@ -171,7 +178,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts function escapeAttribute(value: string): string { return value.replace(/"/g, '"'); -@@ -275,6 +278,8 @@ export class WebClientServer { +@@ -279,6 +275,8 @@ export class WebClientServer { accessToken: this._environmentService.args['github-auth'], scopes: [['user:email'], ['repo']] } : undefined; @@ -180,7 +187,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const data = (await util.promisify(fs.readFile)(filePath)).toString() .replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({ remoteAuthority, -@@ -285,6 +290,7 @@ export class WebClientServer { +@@ -289,6 +287,7 @@ export class WebClientServer { folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']), workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), productConfiguration: >{ @@ -188,7 +195,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts codeServerVersion: this._productService.codeServerVersion, embedderIdentifier: 'server-distro', extensionsGallery: this._webExtensionResourceUrlTemplate ? { -@@ -297,7 +303,9 @@ export class WebClientServer { +@@ -301,7 +300,9 @@ export class WebClientServer { } : undefined } }))) @@ -199,7 +206,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const cspDirectives = [ 'default-src \'self\';', -@@ -376,3 +384,70 @@ export class WebClientServer { +@@ -380,3 +381,70 @@ export class WebClientServer { return res.end(data); } } @@ -286,7 +293,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -482,6 +482,7 @@ function doCreateUri(path: string, query +@@ -481,6 +481,7 @@ function doCreateUri(path: string, query }); } @@ -294,7 +301,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts return URI.parse(window.location.href).with({ path, query }); } -@@ -493,7 +494,7 @@ function doCreateUri(path: string, query +@@ -492,7 +493,7 @@ function doCreateUri(path: string, query if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 4cee1361abe8..c86cf07f03ea 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,17 +7,18 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -206,6 +206,9 @@ export class Extension implements IExten - if (!this.gallery || !this.local) { - return false; - } -+ if (this.type !== ExtensionType.User) { -+ return false; -+ } - if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) { - return false; - } -@@ -1057,6 +1060,10 @@ export class ExtensionsWorkbenchService +@@ -211,6 +211,10 @@ export class Extension implements IExten + if (this.type === ExtensionType.System && this.productService.quality === 'stable') { + return false; + } ++ // Do not update builtin extensions. ++ if (this.type !== ExtensionType.User) { ++ return false; ++ } + if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) { + return false; + } +@@ -1065,6 +1069,10 @@ export class ExtensionsWorkbenchService // Skip if check updates only for builtin extensions and current extension is not builtin. continue; } @@ -25,6 +26,6 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens + // Never update builtin extensions. + continue; + } - if (installed.isBuiltin && !installed.local?.identifier.uuid) { - // Skip if the builtin extension does not have Marketplace id + if (installed.isBuiltin && (!installed.local?.identifier.uuid || this.productService.quality !== 'stable')) { + // Skip if the builtin extension does not have Marketplace identifier or the current quality is not stable. continue; diff --git a/patches/disable-downloads.diff b/patches/disable-downloads.diff index 7568fcd0b6e5..41167e6be749 100644 --- a/patches/disable-downloads.diff +++ b/patches/disable-downloads.diff @@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts -@@ -215,6 +215,11 @@ export interface IWorkbenchConstructionO +@@ -238,6 +238,11 @@ export interface IWorkbenchConstructionO */ readonly userDataPath?: string @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts +++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts -@@ -30,6 +30,11 @@ export interface IBrowserWorkbenchEnviro +@@ -31,6 +31,11 @@ export interface IBrowserWorkbenchEnviro * Options used to configure the workbench. */ readonly options?: IWorkbenchConstructionOptions; @@ -40,7 +40,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi } export class BrowserWorkbenchEnvironmentService implements IBrowserWorkbenchEnvironmentService { -@@ -61,6 +66,13 @@ export class BrowserWorkbenchEnvironment +@@ -62,6 +67,13 @@ export class BrowserWorkbenchEnvironment return this.options.userDataPath; } @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -293,6 +293,7 @@ export class WebClientServer { +@@ -290,6 +290,7 @@ export class WebClientServer { logLevel: this._logService.getLevel(), }, userDataPath: this._environmentService.userDataPath, @@ -144,7 +144,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ThemeIcon } from 'vs/platform/theme/common/themeService'; -@@ -476,13 +476,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo +@@ -477,13 +477,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo id: DOWNLOAD_COMMAND_ID, title: DOWNLOAD_LABEL }, diff --git a/patches/display-language.diff b/patches/display-language.diff index aad709545fb5..cd47319cb7d6 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -6,7 +6,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts +++ code-server/lib/vscode/src/vs/server/node/serverServices.ts -@@ -192,6 +192,9 @@ export async function setupServerService +@@ -196,6 +196,9 @@ export async function setupServerService const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); socketServer.registerChannel('extensions', channel); @@ -20,7 +20,7 @@ Index: code-server/lib/vscode/src/vs/base/common/platform.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/platform.ts +++ code-server/lib/vscode/src/vs/base/common/platform.ts -@@ -84,6 +84,17 @@ if (typeof navigator === 'object' && !is +@@ -82,6 +82,17 @@ if (typeof navigator === 'object' && !is _isWeb = true; _locale = navigator.language; _language = _locale; @@ -176,7 +176,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const textMimeType = { '.html': 'text/html', -@@ -280,6 +281,8 @@ export class WebClientServer { +@@ -277,6 +278,8 @@ export class WebClientServer { } : undefined; const base = relativeRoot(getOriginalUrl(req)) const vscodeBase = relativePath(getOriginalUrl(req)) @@ -185,7 +185,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const data = (await util.promisify(fs.readFile)(filePath)).toString() .replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({ remoteAuthority, -@@ -309,7 +312,8 @@ export class WebClientServer { +@@ -306,7 +309,8 @@ export class WebClientServer { }))) .replace('{{WORKBENCH_AUTH_SESSION}}', () => authSessionInfo ? escapeAttribute(JSON.stringify(authSessionInfo)) : '') .replace(/{{BASE}}/g, base) @@ -252,7 +252,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.ts +++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts -@@ -112,6 +112,10 @@ registerSingleton(IDiagnosticsService, N +@@ -109,6 +109,10 @@ registerSingleton(IDiagnosticsService, N //#region --- workbench contributions diff --git a/patches/github-auth.diff b/patches/github-auth.diff index 53b98d0f422f..20ab57e42724 100644 --- a/patches/github-auth.diff +++ b/patches/github-auth.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainSe =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/credentials/node/credentialsMainService.ts +++ code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainService.ts -@@ -5,18 +5,32 @@ +@@ -5,9 +5,18 @@ import { InMemoryCredentialsProvider } from 'vs/platform/credentials/common/credentials'; import { ILogService } from 'vs/platform/log/common/log'; @@ -26,6 +26,8 @@ Index: code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainSe +} export class CredentialsWebMainService extends BaseCredentialsMainService { + // Since we fallback to the in-memory credentials provider, we do not need to surface any Keytar load errors +@@ -16,10 +25,15 @@ export class CredentialsWebMainService e constructor( @ILogService logService: ILogService, @@ -42,7 +44,7 @@ Index: code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainSe } // If the credentials service is running on the server, we add a suffix -server to differentiate from the location that the -@@ -45,4 +59,59 @@ export class CredentialsWebMainService e +@@ -48,4 +62,59 @@ export class CredentialsWebMainService e } return this._keytarCache; } diff --git a/patches/integration.diff b/patches/integration.diff index e8c1972383dd..f84dfe9fde16 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -185,10 +185,10 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts import { IWorkspace } from 'vs/workbench/services/host/browser/browserHostService'; import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess'; +import { CodeServerClient } from 'vs/workbench/browser/client'; + import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; + import { IProgressService } from 'vs/platform/progress/common/progress'; - export class BrowserMain extends Disposable { - -@@ -103,6 +104,9 @@ export class BrowserMain extends Disposa +@@ -105,6 +106,9 @@ export class BrowserMain extends Disposa // Startup const instantiationService = workbench.startup(); @@ -263,7 +263,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -285,6 +285,7 @@ export class WebClientServer { +@@ -289,6 +289,7 @@ export class WebClientServer { folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']), workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), productConfiguration: >{ diff --git a/patches/local-storage.diff b/patches/local-storage.diff index 744540bbfafd..105b0ab78a30 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -20,8 +20,8 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -292,6 +292,7 @@ export class WebClientServer { - enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined, +@@ -289,6 +289,7 @@ export class WebClientServer { + enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel(), }, + userDataPath: this._environmentService.userDataPath, @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts -@@ -210,6 +210,11 @@ export interface IWorkbenchConstructionO +@@ -233,6 +233,11 @@ export interface IWorkbenchConstructionO */ readonly configurationDefaults?: Record; @@ -48,7 +48,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts +++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts -@@ -52,7 +52,14 @@ export class BrowserWorkbenchEnvironment +@@ -53,7 +53,14 @@ export class BrowserWorkbenchEnvironment get logFile(): URI { return joinPath(this.logsHome, 'window.log'); } @memoize diff --git a/patches/log-level.diff b/patches/log-level.diff index 8b4f125b5d43..d45181ef1b6b 100644 --- a/patches/log-level.diff +++ b/patches/log-level.diff @@ -7,13 +7,13 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -288,7 +288,10 @@ export class WebClientServer { +@@ -285,7 +285,10 @@ export class WebClientServer { remoteAuthority, webviewEndpoint: vscodeBase + '/static/out/vs/workbench/contrib/webview/browser/pre', _wrapWebWorkerExtHostInIframe, -- developmentOptions: { enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined }, +- developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined }, + developmentOptions: { -+ enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined, ++ enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, + logLevel: this._logService.getLevel(), + }, settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined, diff --git a/patches/logout.diff b/patches/logout.diff index 1a8d0f00567b..c6b0fa19f8e8 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -40,7 +40,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -293,6 +293,7 @@ export class WebClientServer { +@@ -290,6 +290,7 @@ export class WebClientServer { productConfiguration: >{ rootEndpoint: base, updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, diff --git a/patches/marketplace.diff b/patches/marketplace.diff index d6e799756320..716ea33d1977 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -293,14 +293,14 @@ export class WebClientServer { +@@ -290,14 +290,14 @@ export class WebClientServer { rootEndpoint: base, codeServerVersion: this._productService.codeServerVersion, embedderIdentifier: 'server-distro', diff --git a/patches/proposed-api.diff b/patches/proposed-api.diff index ebd5deb57569..ecf085d0c4a5 100644 --- a/patches/proposed-api.diff +++ b/patches/proposed-api.diff @@ -9,7 +9,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/abstra =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts +++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts -@@ -1471,7 +1471,7 @@ class ProposedApiController { +@@ -1447,7 +1447,7 @@ class ProposedApiController { this._envEnabledExtensions = new Set((_environmentService.extensionEnabledProposedApi ?? []).map(id => ExtensionIdentifier.toKey(id))); @@ -22,7 +22,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts +++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts -@@ -163,10 +163,7 @@ export interface IExtensionHost { +@@ -359,10 +359,7 @@ function extensionDescriptionArrayToMap( } export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean { diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index b153b20df00d..936e75a160a4 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -68,7 +68,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -294,6 +294,7 @@ export class WebClientServer { +@@ -291,6 +291,7 @@ export class WebClientServer { rootEndpoint: base, updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, logoutEndpoint: this._environmentService.args['auth'] ? base + '/logout' : undefined, @@ -80,7 +80,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.main.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.main.ts -@@ -179,7 +179,7 @@ export class BrowserMain extends Disposa +@@ -189,7 +189,7 @@ export class BrowserMain extends Disposa // Remote const connectionToken = environmentService.options.connectionToken || getCookieValue(connectionTokenCookieName); @@ -93,7 +93,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalE =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts -@@ -388,7 +388,7 @@ export function createTerminalEnvironmen +@@ -388,7 +388,7 @@ export async function createTerminalEnvi // Sanitize the environment, removing any undesirable VS Code and Electron environment // variables diff --git a/patches/service-worker.diff b/patches/service-worker.diff index db2bacd22ef1..554277a34ae3 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -21,7 +21,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -304,6 +304,10 @@ export class WebClientServer { +@@ -301,6 +301,10 @@ export class WebClientServer { proxyEndpointTemplate: base + '/proxy/{{port}}', codeServerVersion: this._productService.codeServerVersion, embedderIdentifier: 'server-distro', diff --git a/patches/sourcemaps.diff b/patches/sourcemaps.diff index 03502650c23b..d0c75ce82cb6 100644 --- a/patches/sourcemaps.diff +++ b/patches/sourcemaps.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js =================================================================== --- code-server.orig/lib/vscode/build/gulpfile.reh.js +++ code-server/lib/vscode/build/gulpfile.reh.js -@@ -191,8 +191,7 @@ function packageTask(type, platform, arc +@@ -193,8 +193,7 @@ function packageTask(type, platform, arc const src = gulp.src(sourceFolderName + '/**', { base: '.' }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) @@ -20,7 +20,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; const isUIExtension = (manifest) => { -@@ -231,9 +230,9 @@ function packageTask(type, platform, arc +@@ -233,9 +232,9 @@ function packageTask(type, platform, arc .map(name => `.build/extensions/${name}/**`); const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js let version = packageJson.version; const quality = product.quality; -@@ -368,7 +367,7 @@ function tweakProductForServerWeb(produc +@@ -370,7 +369,7 @@ function tweakProductForServerWeb(produc const minifyTask = task.define(`minify-vscode-${type}`, task.series( optimizeTask, util.rimraf(`out-vscode-${type}-min`), diff --git a/patches/telemetry.diff b/patches/telemetry.diff index 2d0feabac82b..e1b7dfa1e3d1 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -4,15 +4,15 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts +++ code-server/lib/vscode/src/vs/server/node/serverServices.ts -@@ -68,6 +68,7 @@ import { REMOTE_TERMINAL_CHANNEL_NAME } - import { RemoteExtensionLogFileName } from 'vs/workbench/services/remote/common/remoteAgentService'; - import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from 'vs/workbench/services/remote/common/remoteFileSystemProviderClient'; +@@ -70,6 +70,7 @@ import { REMOTE_FILE_SYSTEM_CHANNEL_NAME import { ExtensionHostStatusService, IExtensionHostStatusService } from 'vs/server/node/extensionHostStatusService'; + import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; + import { ExtensionsScannerService } from 'vs/server/node/extensionsScannerService'; +import { TelemetryClient } from "vs/server/node/telemetryClient"; const eventPrefix = 'monacoworkbench'; -@@ -120,7 +121,11 @@ export async function setupServerService +@@ -122,7 +123,11 @@ export async function setupServerService let appInsightsAppender: ITelemetryAppender = NullAppender; const machineId = await getMachineId(); if (supportsTelemetry(productService, environmentService)) { @@ -169,7 +169,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -304,6 +304,7 @@ export class WebClientServer { +@@ -301,6 +301,7 @@ export class WebClientServer { logoutEndpoint: this._environmentService.args['auth'] ? base + '/logout' : undefined, proxyEndpointTemplate: base + '/proxy/{{port}}', codeServerVersion: this._productService.codeServerVersion, @@ -181,7 +181,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/teleme =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts +++ code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts -@@ -119,16 +119,19 @@ export class TelemetryService extends Di +@@ -120,16 +120,19 @@ export class TelemetryService extends Di ) { super(); diff --git a/patches/update-check.diff b/patches/update-check.diff index c36871094f81..fbaabc0775a8 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -19,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; - + export class CodeServerClient extends Disposable { constructor ( + @ILogService private logService: ILogService, @@ -98,14 +98,14 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts readonly codeServerVersion?: string readonly rootEndpoint?: string + readonly updateEndpoint?: string - + readonly version: string; readonly date?: string; Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -292,6 +292,7 @@ export class WebClientServer { +@@ -289,6 +289,7 @@ export class WebClientServer { workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), productConfiguration: >{ rootEndpoint: base, @@ -119,19 +119,19 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts @@ -11,6 +11,8 @@ import { refineServiceDecorator } from ' import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; - + export const serverOptions: OptionDescriptions = { + /* ----- code-server ----- */ + 'disable-update-check': { type: 'boolean' }, - + /* ----- server setup ----- */ - + @@ -88,6 +90,8 @@ export const serverOptions: OptionDescri }; - + export interface ServerParsedArgs { + /* ----- code-server ----- */ + 'disable-update-check'?: boolean; - + /* ----- server setup ----- */ - + diff --git a/patches/webview.diff b/patches/webview.diff index c04847e1bf88..b90881d22e76 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -24,59 +24,27 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts +++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts -@@ -179,7 +179,7 @@ export class BrowserWorkbenchEnvironment +@@ -183,7 +183,7 @@ export class BrowserWorkbenchEnvironment @memoize get webviewExternalEndpoint(): string { - const endpoint = this.options.webviewEndpoint + const endpoint = (this.options.webviewEndpoint && new URL(this.options.webviewEndpoint, window.location.toString()).toString()) || this.productService.webviewContentExternalBaseUrlTemplate - || 'https://{{uuid}}.vscode-webview.net/{{quality}}/{{commit}}/out/vs/workbench/contrib/webview/browser/pre/'; + || 'https://{{uuid}}.vscode-cdn.net/{{quality}}/{{commit}}/out/vs/workbench/contrib/webview/browser/pre/'; Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -283,6 +283,7 @@ export class WebClientServer { +@@ -280,6 +280,7 @@ export class WebClientServer { const data = (await util.promisify(fs.readFile)(filePath)).toString() .replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({ remoteAuthority, + webviewEndpoint: vscodeBase + '/static/out/vs/workbench/contrib/webview/browser/pre', _wrapWebWorkerExtHostInIframe, - developmentOptions: { enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined }, + developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined }, settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined, -Index: code-server/lib/vscode/src/vs/workbench/common/webview.ts -=================================================================== ---- code-server.orig/lib/vscode/src/vs/workbench/common/webview.ts -+++ code-server/lib/vscode/src/vs/workbench/common/webview.ts -@@ -22,7 +22,7 @@ export const webviewResourceBaseHost = ' - - export const webviewRootResourceAuthority = `vscode-resource.${webviewResourceBaseHost}`; - --export const webviewGenericCspSource = `https://*.${webviewResourceBaseHost}`; -+export const webviewGenericCspSource = `'self' https://*.${webviewResourceBaseHost}`; - - /** - * Construct a uri that can load resources inside a webview -Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js -=================================================================== ---- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js -+++ code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js -@@ -188,9 +188,11 @@ sw.addEventListener('fetch', (event) => - } - } - -- // If we're making a request against the remote authority, we want to go -- // back through VS Code itself so that we are authenticated properly -- if (requestUrl.host === remoteAuthority) { -+ // If we're making a request against the remote authority, we want to go back -+ // through VS Code itself so that we are authenticated properly. If the -+ // service worker is hosted on the same origin we will have cookies and -+ // authentication will not be an issue. -+ if (requestUrl.origin !== sw.origin && requestUrl.host === remoteAuthority) { - switch (event.request.method) { - case 'GET': - case 'HEAD': Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js From 1b69cfdb10fb42a8fa3e14bb411a48b57ed9325c Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 13 Jun 2022 12:32:55 -0500 Subject: [PATCH 02/11] chore: update Code to 1.68 - Upstream moved the web socket endpoint so change the Express route from / to *. That will let web sockets work at any endpoint. - Everything in the workbench config is basically the same but de-indented (upstream extracted it into a separate object which resulted in a de-indent), the ordering is slightly different, and instead of vscodeBase we now need vscodeBase + this._staticRoute since everything is served from a sub-path now. - Move manifest link back to the root since that is where we host our manifest. - Change RemoteAuthoritiesImpl to use the same path building method as in other places (+ instead of using URI.parse/join). - Use existing host/port in RemoteAuthoritiesImpl and BrowserSocketFactory instead of patching them to use window.location (these are set from window.location to begin with so it should be the same result but with less patching). - Since BrowserSocketFactory includes a sub-path now (endpoints were changed upstream to serve from /quality/commit instead of from the root) the patch there has changed to prepend the base to that path (instead of using the base directly). - The workbench HTML now natively supports a base URL in the form of WORKBENCH_WEB_BASE_URL so no need for VS_BASE patches there anymore. - Upstream added type="image/x-icon" so I did as well. - Move the language patch to the end of the series so it is easier to eventually remove. - Remove the existing NLS config in favor of one that supports extensions. - Upstream deleted webview main.js and inlined it into the HTML so move that code (the parent origin check) into both those HTML files (index.html and index-no-csp.html). - The remaining diff is from changes to the surrounding context or a line was changed slightly by upstream (for example renamed files or new arguments like to the remote authority resolver). --- lib/vscode | 2 +- patches/base-path.diff | 164 ++++++++--------------- patches/connection-type.diff | 9 +- patches/disable-builtin-ext-update.diff | 8 +- patches/disable-downloads.diff | 26 ++-- patches/display-language.diff | 168 ++++++++++++------------ patches/integration.diff | 56 ++++---- patches/local-storage.diff | 18 +-- patches/log-level.diff | 24 ++-- patches/logout.diff | 16 +-- patches/marketplace.diff | 38 +++--- patches/proposed-api.diff | 2 +- patches/proxy-uri.diff | 36 ++--- patches/series | 2 +- patches/service-worker.diff | 22 ++-- patches/sourcemaps.diff | 6 +- patches/telemetry.diff | 28 ++-- patches/update-check.diff | 16 +-- patches/webview.diff | 59 ++++++--- src/node/routes/vscode.ts | 2 +- test/unit/node/routes/vscode.test.ts | 4 +- 21 files changed, 340 insertions(+), 366 deletions(-) diff --git a/lib/vscode b/lib/vscode index c3511e6c69bb..ab220b2e1999 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5 +Subproject commit ab220b2e1999b89a136945c92675b283a2d9666d diff --git a/patches/base-path.diff b/patches/base-path.diff index 40d2f8cac937..bf16984651c9 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -10,16 +10,14 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/network.ts +++ code-server/lib/vscode/src/vs/base/common/network.ts -@@ -151,8 +151,10 @@ class RemoteAuthoritiesImpl { - } +@@ -157,7 +157,9 @@ class RemoteAuthoritiesImpl { return URI.from({ scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource, -- authority: `${host}:${port}`, -- path: `/vscode-remote-resource`, -+ authority: platform.isWeb ? window.location.host : `${host}:${port}`, + authority: `${host}:${port}`, +- path: this._remoteResourcesPath, + path: platform.isWeb -+ ? URI.joinPath(URI.parse(window.location.href), `/vscode-remote-resource`).path -+ : `/vscode-remote-resource`, ++ ? (window.location.pathname + "/" + this._remoteResourcesPath).replace(/\/\/+/g, "/") ++ : this._remoteResourcesPath, query }); } @@ -38,40 +36,28 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench-dev.html -@@ -27,23 +27,26 @@ +@@ -27,9 +27,9 @@ - -- +- - + -+ ++ + - - - -- -- -+ -+ +@@ -39,7 +39,7 @@ + + -- -+ -+ - -- -- -- -+ -+ -+ - Index: code-server/lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts +++ code-server/lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts -@@ -274,7 +274,7 @@ export class BrowserSocketFactory implem +@@ -274,6 +274,7 @@ export class BrowserSocketFactory implem - connect(host: string, port: number, query: string, debugLabel: string, callback: IConnectCallback): void { + connect(host: string, port: number, path: string, query: string, debugLabel: string, callback: IConnectCallback): void { const webSocketSchema = (/^https:/.test(window.location.href) ? 'wss' : 'ws'); -- const socket = this._webSocketFactory.create(`${webSocketSchema}://${/:/.test(host) ? `[${host}]` : host}:${port}/?${query}&skipWebSocketFrames=false`, debugLabel); -+ const socket = this._webSocketFactory.create(`${webSocketSchema}://${window.location.host}${window.location.pathname}?${query}&skipWebSocketFrames=false`, debugLabel); ++ path = (window.location.pathname + "/" + path).replace(/\/\/+/g, "/") + const socket = this._webSocketFactory.create(`${webSocketSchema}://${/:/.test(host) ? `[${host}]` : host}:${port}${path}?${query}&skipWebSocketFrames=false`, debugLabel); const errorListener = socket.onError((err) => callback(err, undefined)); socket.onOpen(() => { - errorListener.dispose(); -@@ -282,6 +282,3 @@ export class BrowserSocketFactory implem +@@ -282,6 +283,3 @@ export class BrowserSocketFactory implem }); } } @@ -159,7 +109,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -250,14 +250,10 @@ export class WebClientServer { +@@ -267,14 +267,10 @@ export class WebClientServer { return res.end(); } @@ -176,37 +126,39 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + // that is using this when it should not. + const remoteAuthority = 'remote'; - function escapeAttribute(value: string): string { - return value.replace(/"/g, '"'); -@@ -279,6 +275,8 @@ export class WebClientServer { - accessToken: this._environmentService.args['github-auth'], + function asJSON(value: unknown): string { + return JSON.stringify(value).replace(/"/g, '"'); +@@ -297,6 +293,8 @@ export class WebClientServer { scopes: [['user:email'], ['repo']] } : undefined; + + const base = relativeRoot(getOriginalUrl(req)) + const vscodeBase = relativePath(getOriginalUrl(req)) - const data = (await util.promisify(fs.readFile)(filePath)).toString() - .replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({ - remoteAuthority, -@@ -289,6 +287,7 @@ export class WebClientServer { - folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']), - workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), - productConfiguration: >{ -+ rootEndpoint: base, - codeServerVersion: this._productService.codeServerVersion, - embedderIdentifier: 'server-distro', - extensionsGallery: this._webExtensionResourceUrlTemplate ? { -@@ -301,7 +300,9 @@ export class WebClientServer { - } : undefined - } - }))) -- .replace('{{WORKBENCH_AUTH_SESSION}}', () => authSessionInfo ? escapeAttribute(JSON.stringify(authSessionInfo)) : ''); -+ .replace('{{WORKBENCH_AUTH_SESSION}}', () => authSessionInfo ? escapeAttribute(JSON.stringify(authSessionInfo)) : '') -+ .replace(/{{BASE}}/g, base) -+ .replace(/{{VS_BASE}}/g, vscodeBase); - const cspDirectives = [ - 'default-src \'self\';', -@@ -380,3 +381,70 @@ export class WebClientServer { + const workbenchWebConfiguration = { + remoteAuthority, +@@ -308,6 +306,7 @@ export class WebClientServer { + workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), + productConfiguration: >{ + codeServerVersion: this._productService.codeServerVersion, ++ rootEndpoint: base, + embedderIdentifier: 'server-distro', + extensionsGallery: this._webExtensionResourceUrlTemplate ? { + ...this._productService.extensionsGallery, +@@ -328,8 +327,10 @@ export class WebClientServer { + const values: { [key: string]: string } = { + WORKBENCH_WEB_CONFIGURATION: asJSON(workbenchWebConfiguration), + WORKBENCH_AUTH_SESSION: authSessionInfo ? asJSON(authSessionInfo) : '', +- WORKBENCH_WEB_BASE_URL: this._staticRoute, +- WORKBENCH_NLS_BASE_URL: nlsBaseUrl ? `${nlsBaseUrl}${this._productService.commit}/${this._productService.version}/` : '', ++ WORKBENCH_WEB_BASE_URL: vscodeBase + this._staticRoute, ++ WORKBENCH_NLS_BASE_URL: vscodeBase + (nlsBaseUrl ? `${nlsBaseUrl}${this._productService.commit}/${this._productService.version}/` : ''), ++ BASE: base, ++ VS_BASE: vscodeBase, + }; + + +@@ -419,3 +420,70 @@ export class WebClientServer { return res.end(data); } } @@ -293,7 +245,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -481,6 +481,7 @@ function doCreateUri(path: string, query +@@ -485,6 +485,7 @@ function doCreateUri(path: string, query }); } @@ -301,12 +253,12 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts return URI.parse(window.location.href).with({ path, query }); } -@@ -492,7 +493,7 @@ function doCreateUri(path: string, query +@@ -496,7 +497,7 @@ function doCreateUri(path: string, query if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } -- const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents; workspaceUri?: UriComponents } = JSON.parse(configElementAttribute); -+ const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = { ...JSON.parse(configElementAttribute), remoteAuthority: location.host } +- const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents; workspaceUri?: UriComponents; callbackRoute: string } = JSON.parse(configElementAttribute); ++ const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents; workspaceUri?: UriComponents; callbackRoute: string } = { ...JSON.parse(configElementAttribute), remoteAuthority: location.host } // Create workbench create(document.body, { @@ -319,10 +271,10 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensionResourceLoader/ import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; -import { RemoteAuthorities } from 'vs/base/common/network'; + import { getRemoteServerRootPath } from 'vs/platform/remote/common/remoteHosts'; export const WEB_EXTENSION_RESOURCE_END_POINT = 'web-extension-resource'; - -@@ -72,7 +71,7 @@ export abstract class AbstractExtensionR +@@ -75,7 +74,7 @@ export abstract class AbstractExtensionR public getExtensionGalleryResourceURL(galleryExtension: { publisher: string; name: string; version: string }, path?: string): URI | undefined { if (this._extensionGalleryResourceUrlTemplate) { const uri = URI.parse(format2(this._extensionGalleryResourceUrlTemplate, { publisher: galleryExtension.publisher, name: galleryExtension.name, version: galleryExtension.version, path: 'extension' })); diff --git a/patches/connection-type.diff b/patches/connection-type.diff index 050715c90ff5..7ea29cd0764f 100644 --- a/patches/connection-type.diff +++ b/patches/connection-type.diff @@ -14,12 +14,13 @@ Index: code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnectio =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts +++ code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts -@@ -231,7 +231,7 @@ async function connectToRemoteExtensionH - +@@ -233,7 +233,8 @@ async function connectToRemoteExtensionH + let socket: ISocket; try { -- socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, `reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken); -+ socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, `type=${connectionTypeToString(connectionType)}&reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken); +- socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, getRemoteServerRootPath(options), `reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken); ++ ++ socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, getRemoteServerRootPath(options), `type=${connectionTypeToString(connectionType)}&reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken); } catch (error) { options.logService.error(`${logPrefix} socketFactory.connect() failed or timed out. Error:`); options.logService.error(error); diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index c86cf07f03ea..cbfd77406428 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -211,6 +211,10 @@ export class Extension implements IExten +@@ -234,6 +234,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) { return false; } -@@ -1065,6 +1069,10 @@ export class ExtensionsWorkbenchService +@@ -1088,6 +1092,10 @@ export class ExtensionsWorkbenchService // Skip if check updates only for builtin extensions and current extension is not builtin. continue; } @@ -26,6 +26,6 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens + // Never update builtin extensions. + continue; + } - if (installed.isBuiltin && (!installed.local?.identifier.uuid || this.productService.quality !== 'stable')) { - // Skip if the builtin extension does not have Marketplace identifier or the current quality is not stable. + if (installed.isBuiltin && (!installed.local?.identifier.uuid || (!isWeb && this.productService.quality === 'stable'))) { + // Skip checking updates for a builtin extension if it does not has Marketplace identifier or the current product is VS Code Desktop stable. continue; diff --git a/patches/disable-downloads.diff b/patches/disable-downloads.diff index 41167e6be749..b5f7dc7233e9 100644 --- a/patches/disable-downloads.diff +++ b/patches/disable-downloads.diff @@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts -@@ -238,6 +238,11 @@ export interface IWorkbenchConstructionO +@@ -250,6 +250,11 @@ export interface IWorkbenchConstructionO */ readonly userDataPath?: string @@ -58,18 +58,18 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -15,6 +15,7 @@ export const serverOptions: OptionDescri +@@ -14,6 +14,7 @@ export const serverOptions: OptionDescri + /* ----- code-server ----- */ 'disable-update-check': { type: 'boolean' }, 'auth': { type: 'string' }, - 'locale': { type: 'string' }, + 'disable-file-downloads': { type: 'boolean' }, /* ----- server setup ----- */ -@@ -96,6 +97,7 @@ export interface ServerParsedArgs { +@@ -94,6 +95,7 @@ export interface ServerParsedArgs { + /* ----- code-server ----- */ 'disable-update-check'?: boolean; 'auth'?: string - 'locale'?: string + 'disable-file-downloads'?: boolean; /* ----- server setup ----- */ @@ -78,14 +78,14 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -290,6 +290,7 @@ export class WebClientServer { - logLevel: this._logService.getLevel(), - }, - userDataPath: this._environmentService.userDataPath, -+ isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], - settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined, - enableWorkspaceTrust: !this._environmentService.args['disable-workspace-trust'], - folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']), +@@ -300,6 +300,7 @@ export class WebClientServer { + remoteAuthority, + webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', + userDataPath: this._environmentService.userDataPath, ++ isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], + _wrapWebWorkerExtHostInIframe, + developmentOptions: { + enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts diff --git a/patches/display-language.diff b/patches/display-language.diff index cd47319cb7d6..609f5986f58a 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -1,17 +1,28 @@ Add display language support -This likely needs tweaking if we want to upstream. +We can remove this once upstream supports all language packs. + +1. Proxies language packs to the service on the backend. +2. NLS configuration is embedded into the HTML for the browser to pick up. This + code to generate this configuration is copied from the native portion. +3. Remove navigator.language default since that will prevent the argv file from + being created if you are changing the language to whatever your browser + default happens to be. +4. Move the argv.json file to the server instead of in-browser storage. This is + where the current locale is stored and currently the server needs to be able + to read it. +5. Add the locale flag. Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts +++ code-server/lib/vscode/src/vs/server/node/serverServices.ts -@@ -196,6 +196,9 @@ export async function setupServerService +@@ -202,6 +202,9 @@ export async function setupServerService const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); socketServer.registerChannel('extensions', channel); -+ const localizationsChannel = ProxyChannel.fromService(accessor.get(ILocalizationsService)); -+ socketServer.registerChannel('localizations', localizationsChannel); ++ const languagePackChannel = ProxyChannel.fromService(accessor.get(ILanguagePackService)); ++ socketServer.registerChannel('languagePacks', languagePackChannel); + const encryptionChannel = ProxyChannel.fromService(accessor.get(IEncryptionMainService)); socketServer.registerChannel('encryption', encryptionChannel); @@ -20,9 +31,12 @@ Index: code-server/lib/vscode/src/vs/base/common/platform.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/platform.ts +++ code-server/lib/vscode/src/vs/base/common/platform.ts -@@ -82,6 +82,17 @@ if (typeof navigator === 'object' && !is +@@ -80,8 +80,19 @@ if (typeof navigator === 'object' && !is + _isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0; + _isLinux = _userAgent.indexOf('Linux') >= 0; _isWeb = true; - _locale = navigator.language; +- _locale = navigator.language; ++ _locale = LANGUAGE_DEFAULT; _language = _locale; + + const el = typeof document !== 'undefined' && document.getElementById('vscode-remote-nls-configuration'); @@ -51,22 +65,32 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.html + - -@@ -38,6 +41,27 @@ - - - -