@@ -229,7 +229,7 @@ index 2c64061da7..c0ef8faedd 100644
229229 // Do nothing. If we can't read the file we have no
230230 // language pack config.
231231diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
232- index ef926bf4fa..db460bf2b6 100644
232+ index ef926bf4fa..64efcc463c 100644
233233--- a/src/vs/code/browser/workbench/workbench.ts
234234+++ b/src/vs/code/browser/workbench/workbench.ts
235235@@ -12,6 +12,8 @@ import { request } from 'vs/base/parts/request/browser/request';
@@ -281,10 +281,12 @@ index ef926bf4fa..db460bf2b6 100644
281281 // Revive static extension locations
282282 if (Array.isArray(config.staticExtensions)) {
283283 config.staticExtensions.forEach(extension => {
284- @@ -298,35 +318,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
284+ @@ -296,36 +316,7 @@ class WorkspaceProvider implements IWorkspaceProvider {
285+ // Find workspace to open and payload
286+ let foundWorkspace = false;
285287 let workspace: IWorkspace;
286- let payload = Object.create(null);
287-
288+ - let payload = Object.create(null);
289+ -
288290- const query = new URL(document.location.href).searchParams;
289291- query.forEach((value, key) => {
290292- switch (key) {
@@ -313,10 +315,10 @@ index ef926bf4fa..db460bf2b6 100644
313315- break;
314316- }
315317- });
316- -
318+ + let payload = config.workspaceProvider?.payload || Object.create(null);
319+
317320 // If no workspace is provided through the URL, check for config attribute from server
318321 if (!foundWorkspace) {
319- if (config.folderUri) {
320322diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
321323index aa44ee75d7..884887a6a3 100644
322324--- a/src/vs/platform/environment/common/environment.ts
@@ -1131,10 +1133,10 @@ index 0000000000..56331ff1fc
11311133+ require('../../bootstrap-amd').load('vs/server/entry');
11321134diff --git a/src/vs/server/ipc.d.ts b/src/vs/server/ipc.d.ts
11331135new file mode 100644
1134- index 0000000000..cb4d3a6afe
1136+ index 0000000000..d4771351de
11351137--- /dev/null
11361138+++ b/src/vs/server/ipc.d.ts
1137- @@ -0,0 +1,113 @@
1139+ @@ -0,0 +1,116 @@
11381140+ /**
11391141+ * External interfaces for integration into code-server over IPC. No vs imports
11401142+ * should be made in this file.
@@ -1231,6 +1233,9 @@ index 0000000000..cb4d3a6afe
12311233+ readonly folderUri?: UriComponents;
12321234+ readonly workspaceUri?: UriComponents;
12331235+ readonly logLevel?: number;
1236+ + readonly workspaceProvider?: {
1237+ + payload: [["userDataPath", string]];
1238+ + };
12341239+ };
12351240+ readonly remoteUserDataUri: UriComponents;
12361241+ readonly productConfiguration: {
@@ -2321,10 +2326,10 @@ index 0000000000..3c74512192
23212326+ }
23222327diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
23232328new file mode 100644
2324- index 0000000000..52311bf756
2329+ index 0000000000..d1f14654cf
23252330--- /dev/null
23262331+++ b/src/vs/server/node/server.ts
2327- @@ -0,0 +1,269 @@
2332+ @@ -0,0 +1,272 @@
23282333+ import * as net from 'net';
23292334+ import * as path from 'path';
23302335+ import { Emitter } from 'vs/base/common/event';
@@ -2422,6 +2427,9 @@ index 0000000000..52311bf756
24222427+ folderUri: startPath && !startPath.workspace ? parseUrl(startPath.url) : undefined,
24232428+ remoteAuthority: options.remoteAuthority,
24242429+ logLevel: getLogLevel(environment),
2430+ + workspaceProvider: {
2431+ + payload: [["userDataPath", environment.userDataPath]],
2432+ + },
24252433+ },
24262434+ remoteUserDataUri: transformer.transformOutgoing(URI.file(environment.userDataPath)),
24272435+ productConfiguration: product,
@@ -3000,10 +3008,18 @@ index b378daa5a0..8d7b1b16df 100644
30003008 console.error('Could not rewrite csp');
30013009 }
30023010diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts
3003- index f878c3de3d..8d8f0dc3c3 100644
3011+ index f878c3de3d..ad6fb4606a 100644
30043012--- a/src/vs/workbench/services/environment/browser/environmentService.ts
30053013+++ b/src/vs/workbench/services/environment/browser/environmentService.ts
3006- @@ -166,8 +166,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3014+ @@ -13,6 +13,7 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/
3015+ import { IWorkbenchConstructionOptions } from 'vs/workbench/workbench.web.api';
3016+ import product from 'vs/platform/product/common/product';
3017+ import { memoize } from 'vs/base/common/decorators';
3018+ + import * as paths from 'vs/base/common/path';
3019+
3020+ export class BrowserWindowConfiguration implements IWindowConfiguration {
3021+
3022+ @@ -166,8 +167,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
30073023
30083024 @memoize
30093025 get webviewExternalEndpoint(): string {
@@ -3014,8 +3030,45 @@ index f878c3de3d..8d8f0dc3c3 100644
30143030 }
30153031
30163032 @memoize
3017- @@ -263,5 +263,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3018- appSettingsHome!: URI;
3033+ @@ -246,22 +247,38 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3034+ driverHandle?: string;
3035+ driverVerbose!: boolean;
3036+
3037+ - installSourcePath!: string;
3038+ + @memoize
3039+ + get installSourcePath(): string { return paths.join(this.userDataPath, 'installSource'); }
3040+
3041+ builtinExtensionsPath!: string;
3042+
3043+ - globalStorageHome!: string;
3044+ - workspaceStorageHome!: string;
3045+ + @memoize
3046+ + get globalStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'globalStorage'); }
3047+ + @memoize
3048+ + get workspaceStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'workspaceStorage'); }
3049+
3050+ - backupWorkspacesPath!: string;
3051+ + @memoize
3052+ + get backupWorkspacesPath(): string { return paths.join(this.backupHome.fsPath, 'workspaces.json'); }
3053+
3054+ - machineSettingsResource!: URI;
3055+ + @memoize
3056+ + get machineSettingsResource(): URI { return joinPath(URI.file(paths.join(this.userDataPath, 'Machine')), 'settings.json'); }
3057+
3058+ userHome!: string;
3059+ - userDataPath!: string;
3060+ + @memoize
3061+ + get userDataPath(): string {
3062+ + const dataPath = this.payload?.get("userDataPath");
3063+ + if (!dataPath) {
3064+ + throw new Error("userDataPath was not provided to environment service");
3065+ + }
3066+ + return dataPath;
3067+ + }
3068+ appRoot!: string;
3069+ - appSettingsHome!: URI;
3070+ + @memoize
3071+ + get appSettingsHome(): URI { return URI.file(paths.join(this.userDataPath, 'User')); }
30193072 execPath!: string;
30203073
30213074+ extraExtensionPaths!: string[];
@@ -3047,6 +3100,19 @@ index 5b6a15e820..0f93c896e2 100644
30473100 remoteEnv.extensions = remoteEnv.extensions.filter(extension => this._isEnabled(extension) && !canExecuteOnWeb(extension, this._productService, this._configService));
30483101 this._checkEnableProposedApi(remoteEnv.extensions);
30493102
3103+ diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3104+ index 5e09934624..d70f8b5364 100644
3105+ --- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3106+ +++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3107+ @@ -142,7 +142,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter {
3108+ appLanguage: platform.language,
3109+ extensionDevelopmentLocationURI: this._environmentService.extensionDevelopmentLocationURI,
3110+ extensionTestsLocationURI: this._environmentService.extensionTestsLocationURI,
3111+ - globalStorageHome: URI.parse('fake:globalStorageHome'), //todo@joh URI.file(this._environmentService.globalStorageHome),
3112+ + globalStorageHome: URI.file(this._environmentService.globalStorageHome),
3113+ userHome: URI.parse('fake:userHome'), //todo@joh URI.file(this._environmentService.userHome),
3114+ webviewResourceRoot: this._environmentService.webviewResourceRoot,
3115+ webviewCspSource: this._environmentService.webviewCspSource,
30503116diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
30513117index 9e8352ac88..22a2d296f9 100644
30523118--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts
0 commit comments