Skip to content

Commit 1406472

Browse files
committed
sandbox - move extension management service into electron-sandbox
1 parent 70e95ce commit 1406472

10 files changed

Lines changed: 56 additions & 67 deletions

File tree

src/vs/base/common/hash.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export function hash(obj: any): number {
1212
return doHash(obj, 0);
1313
}
1414

15-
1615
export function doHash(obj: any, hashVal: number): number {
1716
switch (typeof obj) {
1817
case 'object':

src/vs/platform/environment/common/environment.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export interface INativeEnvironmentService extends IEnvironmentService {
9595
appRoot: string;
9696
userHome: URI;
9797
appSettingsHome: URI;
98+
tmpDir: URI;
9899
userDataPath: string;
99100
machineSettingsResource: URI;
100101
backupHome: string;

src/vs/platform/environment/node/environmentService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ export class EnvironmentService implements INativeEnvironmentService {
4444
@memoize
4545
get appSettingsHome(): URI { return URI.file(path.join(this.userDataPath, 'User')); }
4646

47+
@memoize
48+
get tmpDir(): URI { return URI.file(os.tmpdir()); }
49+
4750
@memoize
4851
get userRoamingDataHome(): URI { return this.appSettingsHome; }
4952

src/vs/platform/extensionManagement/node/extensionManagementService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { ExtensionsManifestCache } from 'vs/platform/extensionManagement/node/ex
3434
import { toErrorMessage } from 'vs/base/common/errorMessage';
3535
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
3636
import { isEngineValid } from 'vs/platform/extensions/common/extensionValidator';
37-
import { tmpdir } from 'os';
37+
import { joinPath } from 'vs/base/common/resources';
3838
import { generateUuid } from 'vs/base/common/uuid';
3939
import { IDownloadService } from 'vs/platform/download/common/download';
4040
import { optional, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -83,7 +83,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
8383
onDidUninstallExtension: Event<DidUninstallExtensionEvent> = this._onDidUninstallExtension.event;
8484

8585
constructor(
86-
@IEnvironmentService environmentService: INativeEnvironmentService,
86+
@IEnvironmentService private readonly environmentService: INativeEnvironmentService,
8787
@IExtensionGalleryService private readonly galleryService: IExtensionGalleryService,
8888
@ILogService private readonly logService: ILogService,
8989
@optional(IDownloadService) private downloadService: IDownloadService,
@@ -107,7 +107,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
107107
async zip(extension: ILocalExtension): Promise<URI> {
108108
this.logService.trace('ExtensionManagementService#zip', extension.identifier.id);
109109
const files = await this.collectFiles(extension);
110-
const location = await zip(path.join(tmpdir(), generateUuid()), files);
110+
const location = await zip(joinPath(this.environmentService.tmpDir, generateUuid()).fsPath, files);
111111
return URI.file(location);
112112
}
113113

@@ -217,7 +217,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
217217
throw new Error('Download service is not available');
218218
}
219219

220-
const downloadedLocation = URI.file(path.join(tmpdir(), generateUuid()));
220+
const downloadedLocation = joinPath(this.environmentService.tmpDir, generateUuid());
221221
await this.downloadService.download(vsix, downloadedLocation);
222222
return downloadedLocation;
223223
}

src/vs/platform/telemetry/node/telemetry.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
76
import { readdirSync } from 'vs/base/node/pfs';
87
import { statSync, readFileSync } from 'fs';
98
import { join } from 'vs/base/common/path';
@@ -43,4 +42,4 @@ export function buildTelemetryMessage(appRoot: string, extensionsPath?: string):
4342
contents = readFileSync(join(appRoot, 'telemetry-extensions.json')).toString();
4443
mergeTelemetry(contents, 'vscode-extensions');
4544
return JSON.stringify(mergedTelemetry, null, 4);
46-
}
45+
}

src/vs/workbench/electron-sandbox/sandbox.simpleservices.ts

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { IAddressProvider, ISocketFactory } from 'vs/platform/remote/common/remo
2020
import { IRemoteAgentEnvironment } from 'vs/platform/remote/common/remoteAgentEnvironment';
2121
import { ITelemetryData, ITelemetryInfo, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
2222
import { BrowserSocketFactory } from 'vs/platform/remote/browser/browserSocketFactory';
23-
import { ExtensionIdentifier, ExtensionType, IExtension, IExtensionDescription, IExtensionManifest } from 'vs/platform/extensions/common/extensions';
23+
import { ExtensionIdentifier, IExtension, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
2424
import { SimpleConfigurationService as BaseSimpleConfigurationService } from 'vs/editor/standalone/browser/simpleServices';
2525
import { InMemoryStorageService } from 'vs/platform/storage/common/storage';
2626
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
@@ -54,7 +54,7 @@ import { LinkedMap } from 'vs/base/common/map';
5454
import { IWorkspace, IWorkspaceContextService, IWorkspaceFolder, WorkbenchState, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
5555
import { CustomTask, ContributedTask, InMemoryTask, TaskRunSource, ConfiguringTask, TaskIdentifier, TaskSorter } from 'vs/workbench/contrib/tasks/common/tasks';
5656
import { TaskSystemInfo } from 'vs/workbench/contrib/tasks/common/taskSystem';
57-
import { IExtensionManagementService, ILocalExtension, IGalleryExtension, IReportedExtension, IGalleryMetadata, IExtensionIdentifier, IExtensionTipsService, IConfigBasedExtensionTip, IExecutableBasedExtensionTip, IWorkspaceTips } from 'vs/platform/extensionManagement/common/extensionManagement';
57+
import { IExtensionTipsService, IConfigBasedExtensionTip, IExecutableBasedExtensionTip, IWorkspaceTips } from 'vs/platform/extensionManagement/common/extensionManagement';
5858
import { IWorkspaceTagsService, Tags } from 'vs/workbench/contrib/tags/common/workspaceTags';
5959
import { AsbtractOutputChannelModelService, IOutputChannelModelService } from 'vs/workbench/services/output/common/outputChannelModel';
6060
import { Color, RGBA } from 'vs/base/common/color';
@@ -91,6 +91,7 @@ export class SimpleWorkbenchEnvironmentService implements INativeWorkbenchEnviro
9191
get serviceMachineIdResource(): URI { return joinPath(this.userRoamingDataHome, 'machineid'); }
9292
get userDataSyncLogResource(): URI { return joinPath(this.userRoamingDataHome, 'syncLog'); }
9393
get userDataSyncHome(): URI { return joinPath(this.userRoamingDataHome, 'syncHome'); }
94+
get tmpDir(): URI { return joinPath(this.userRoamingDataHome, 'tmp'); }
9495
get backupWorkspaceHome(): URI { return joinPath(this.userRoamingDataHome, 'Backups', 'workspace'); }
9596

9697
options?: IWorkbenchConstructionOptions | undefined;
@@ -838,35 +839,6 @@ registerSingleton(ITaskService, SimpleTaskService);
838839
//#endregion
839840

840841

841-
//#region Extension Management
842-
843-
class SimpleExtensionManagementService implements IExtensionManagementService {
844-
845-
declare readonly _serviceBrand: undefined;
846-
847-
onInstallExtension = Event.None;
848-
onDidInstallExtension = Event.None;
849-
onUninstallExtension = Event.None;
850-
onDidUninstallExtension = Event.None;
851-
852-
async zip(extension: ILocalExtension): Promise<URI> { throw new Error('Method not implemented.'); }
853-
async unzip(zipLocation: URI): Promise<IExtensionIdentifier> { throw new Error('Method not implemented.'); }
854-
async getManifest(vsix: URI): Promise<IExtensionManifest> { throw new Error('Method not implemented.'); }
855-
async install(vsix: URI, isMachineScoped?: boolean): Promise<ILocalExtension> { throw new Error('Method not implemented.'); }
856-
async canInstall(extension: IGalleryExtension): Promise<boolean> { throw new Error('Method not implemented.'); }
857-
async installFromGallery(extension: IGalleryExtension, isMachineScoped?: boolean): Promise<ILocalExtension> { throw new Error('Method not implemented.'); }
858-
async uninstall(extension: ILocalExtension, force?: boolean): Promise<void> { }
859-
async reinstallFromGallery(extension: ILocalExtension): Promise<void> { }
860-
async getInstalled(type?: ExtensionType): Promise<ILocalExtension[]> { return []; }
861-
async getExtensionsReport(): Promise<IReportedExtension[]> { return []; }
862-
async updateMetadata(local: ILocalExtension, metadata: IGalleryMetadata): Promise<ILocalExtension> { throw new Error('Method not implemented.'); }
863-
}
864-
865-
registerSingleton(IExtensionManagementService, SimpleExtensionManagementService);
866-
867-
//#endregion
868-
869-
870842
//#region Extension Tips
871843

872844
class SimpleExtensionTipsService implements IExtensionTipsService {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { generateUuid } from 'vs/base/common/uuid';
7+
import { ILocalExtension, IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
8+
import { URI } from 'vs/base/common/uri';
9+
import { ExtensionManagementService as BaseExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagementService';
10+
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
11+
import { IExtensionManagementServer, IExtensionManagementServerService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
12+
import { Schemas } from 'vs/base/common/network';
13+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
14+
import { IDownloadService } from 'vs/platform/download/common/download';
15+
import { IProductService } from 'vs/platform/product/common/productService';
16+
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
17+
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService';
18+
import { joinPath } from 'vs/base/common/resources';
19+
20+
export class ExtensionManagementService extends BaseExtensionManagementService {
21+
22+
constructor(
23+
@IExtensionManagementServerService extensionManagementServerService: IExtensionManagementServerService,
24+
@IExtensionGalleryService extensionGalleryService: IExtensionGalleryService,
25+
@IConfigurationService configurationService: IConfigurationService,
26+
@IProductService productService: IProductService,
27+
@IDownloadService downloadService: IDownloadService,
28+
@IWorkbenchEnvironmentService private readonly environmentService: INativeWorkbenchEnvironmentService
29+
) {
30+
super(extensionManagementServerService, extensionGalleryService, configurationService, productService, downloadService);
31+
}
32+
33+
protected async installVSIX(vsix: URI, server: IExtensionManagementServer): Promise<ILocalExtension> {
34+
if (vsix.scheme === Schemas.vscodeRemote && server === this.extensionManagementServerService.localExtensionManagementServer) {
35+
const downloadedLocation = joinPath(this.environmentService.tmpDir, generateUuid());
36+
await this.downloadService.download(vsix, downloadedLocation);
37+
vsix = downloadedLocation;
38+
}
39+
return server.extensionManagementService.install(vsix);
40+
}
41+
}
42+
43+
registerSingleton(IExtensionManagementService, ExtensionManagementService);

src/vs/workbench/services/extensionManagement/node/extensionManagementService.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/vs/workbench/workbench.desktop.main.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import 'vs/workbench/services/extensionManagement/electron-browser/extensionMana
4545
import 'vs/workbench/services/extensionManagement/electron-browser/extensionTipsService';
4646
import 'vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl';
4747
import 'vs/workbench/services/telemetry/electron-browser/telemetryService';
48-
import 'vs/workbench/services/extensionManagement/node/extensionManagementService';
4948
import 'vs/workbench/services/backup/node/backupFileService';
5049
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncMachinesService';
5150
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncService';

src/vs/workbench/workbench.sandbox.main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import 'vs/workbench/services/configurationResolver/electron-sandbox/configurati
3939
import 'vs/workbench/services/accessibility/electron-sandbox/accessibilityService';
4040
import 'vs/workbench/services/path/electron-sandbox/pathService';
4141
import 'vs/workbench/services/themes/electron-sandbox/nativeHostColorSchemeService';
42+
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService';
4243

4344
//#endregion
4445

0 commit comments

Comments
 (0)