@@ -229,7 +229,7 @@ index 2c64061da7..c0ef8faedd 100644
229
229
// Do nothing. If we can't read the file we have no
230
230
// language pack config.
231
231
diff --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
233
233
--- a/src/vs/code/browser/workbench/workbench.ts
234
234
+++ b/src/vs/code/browser/workbench/workbench.ts
235
235
@@ -12,6 +12,8 @@ import { request } from 'vs/base/parts/request/browser/request';
@@ -281,10 +281,12 @@ index ef926bf4fa..db460bf2b6 100644
281
281
// Revive static extension locations
282
282
if (Array.isArray(config.staticExtensions)) {
283
283
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;
285
287
let workspace: IWorkspace;
286
- let payload = Object.create(null);
287
-
288
+ - let payload = Object.create(null);
289
+ -
288
290
- const query = new URL(document.location.href).searchParams;
289
291
- query.forEach((value, key) => {
290
292
- switch (key) {
@@ -313,10 +315,10 @@ index ef926bf4fa..db460bf2b6 100644
313
315
- break;
314
316
- }
315
317
- });
316
- -
318
+ + let payload = config.workspaceProvider?.payload || Object.create(null);
319
+
317
320
// If no workspace is provided through the URL, check for config attribute from server
318
321
if (!foundWorkspace) {
319
- if (config.folderUri) {
320
322
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
321
323
index aa44ee75d7..884887a6a3 100644
322
324
--- a/src/vs/platform/environment/common/environment.ts
@@ -1131,10 +1133,10 @@ index 0000000000..56331ff1fc
1131
1133
+ require('../../bootstrap-amd').load('vs/server/entry');
1132
1134
diff --git a/src/vs/server/ipc.d.ts b/src/vs/server/ipc.d.ts
1133
1135
new file mode 100644
1134
- index 0000000000..cb4d3a6afe
1136
+ index 0000000000..d4771351de
1135
1137
--- /dev/null
1136
1138
+++ b/src/vs/server/ipc.d.ts
1137
- @@ -0,0 +1,113 @@
1139
+ @@ -0,0 +1,116 @@
1138
1140
+ /**
1139
1141
+ * External interfaces for integration into code-server over IPC. No vs imports
1140
1142
+ * should be made in this file.
@@ -1231,6 +1233,9 @@ index 0000000000..cb4d3a6afe
1231
1233
+ readonly folderUri?: UriComponents;
1232
1234
+ readonly workspaceUri?: UriComponents;
1233
1235
+ readonly logLevel?: number;
1236
+ + readonly workspaceProvider?: {
1237
+ + payload: [["userDataPath", string]];
1238
+ + };
1234
1239
+ };
1235
1240
+ readonly remoteUserDataUri: UriComponents;
1236
1241
+ readonly productConfiguration: {
@@ -2321,10 +2326,10 @@ index 0000000000..3c74512192
2321
2326
+ }
2322
2327
diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
2323
2328
new file mode 100644
2324
- index 0000000000..52311bf756
2329
+ index 0000000000..d1f14654cf
2325
2330
--- /dev/null
2326
2331
+++ b/src/vs/server/node/server.ts
2327
- @@ -0,0 +1,269 @@
2332
+ @@ -0,0 +1,272 @@
2328
2333
+ import * as net from 'net';
2329
2334
+ import * as path from 'path';
2330
2335
+ import { Emitter } from 'vs/base/common/event';
@@ -2422,6 +2427,9 @@ index 0000000000..52311bf756
2422
2427
+ folderUri: startPath && !startPath.workspace ? parseUrl(startPath.url) : undefined,
2423
2428
+ remoteAuthority: options.remoteAuthority,
2424
2429
+ logLevel: getLogLevel(environment),
2430
+ + workspaceProvider: {
2431
+ + payload: [["userDataPath", environment.userDataPath]],
2432
+ + },
2425
2433
+ },
2426
2434
+ remoteUserDataUri: transformer.transformOutgoing(URI.file(environment.userDataPath)),
2427
2435
+ productConfiguration: product,
@@ -3000,10 +3008,18 @@ index b378daa5a0..8d7b1b16df 100644
3000
3008
console.error('Could not rewrite csp');
3001
3009
}
3002
3010
diff --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
3004
3012
--- a/src/vs/workbench/services/environment/browser/environmentService.ts
3005
3013
+++ 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
3007
3023
3008
3024
@memoize
3009
3025
get webviewExternalEndpoint(): string {
@@ -3014,8 +3030,45 @@ index f878c3de3d..8d8f0dc3c3 100644
3014
3030
}
3015
3031
3016
3032
@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')); }
3019
3072
execPath!: string;
3020
3073
3021
3074
+ extraExtensionPaths!: string[];
@@ -3047,6 +3100,19 @@ index 5b6a15e820..0f93c896e2 100644
3047
3100
remoteEnv.extensions = remoteEnv.extensions.filter(extension => this._isEnabled(extension) && !canExecuteOnWeb(extension, this._productService, this._configService));
3048
3101
this._checkEnableProposedApi(remoteEnv.extensions);
3049
3102
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,
3050
3116
diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
3051
3117
index 9e8352ac88..22a2d296f9 100644
3052
3118
--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts
0 commit comments