Skip to content

Commit 4e729bb

Browse files
author
Benjamin Pasero
committed
sandbox - move dialog service into electron-sandbox
1 parent 1c78037 commit 4e729bb

11 files changed

Lines changed: 32 additions & 59 deletions

File tree

src/vs/base/parts/sandbox/electron-browser/preload.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
process: {
9494
platform: process.platform,
9595
env: process.env,
96+
versions: process.versions,
9697
_whenEnvResolved: undefined,
9798
get whenEnvResolved() {
9899
if (!this._whenEnvResolved) {

src/vs/base/parts/sandbox/electron-sandbox/globals.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ export const process = (window as any).vscode.process as {
9494
* A listener on the process. Only a small subset of listener types are allowed.
9595
*/
9696
on: (type: string, callback: Function) => void;
97+
98+
/**
99+
* A list of versions for the current node.js/electron configuration.
100+
*/
101+
versions: { [key: string]: string | undefined };
97102
};
98103

99104
export const context = (window as any).vscode.context as {

src/vs/platform/dialogs/electron-browser/dialogIpc.ts

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

src/vs/platform/electron/common/electron.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import { IOpenedWindow, IWindowOpenable, IOpenEmptyWindowOptions, IOpenWindowOpt
99
import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs';
1010
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1111

12+
export interface IOSProperties {
13+
type: string;
14+
release: string;
15+
arch: string;
16+
platform: string;
17+
}
18+
1219
export interface ICommonElectronService {
1320

1421
readonly _serviceBrand: undefined;
@@ -73,6 +80,7 @@ export interface ICommonElectronService {
7380
moveItemToTrash(fullPath: string, deleteOnFail?: boolean): Promise<boolean>;
7481
isAdmin(): Promise<boolean>;
7582
getTotalMem(): Promise<number>;
83+
getOS(): Promise<IOSProperties>;
7684

7785
// Process
7886
killProcess(pid: number, code: string): Promise<void>;

src/vs/platform/electron/electron-main/electronMainService.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifec
1111
import { IOpenedWindow, IOpenWindowOptions, IWindowOpenable, IOpenEmptyWindowOptions } from 'vs/platform/windows/common/windows';
1212
import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs';
1313
import { isMacintosh, isWindows, isRootUser } from 'vs/base/common/platform';
14-
import { ICommonElectronService } from 'vs/platform/electron/common/electron';
14+
import { ICommonElectronService, IOSProperties } from 'vs/platform/electron/common/electron';
1515
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1616
import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment';
1717
import { AddFirstParameterToFunctions } from 'vs/base/common/types';
@@ -21,7 +21,7 @@ import { URI } from 'vs/base/common/uri';
2121
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
2222
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
2323
import { MouseInputEvent } from 'vs/base/parts/sandbox/common/electronTypes';
24-
import { totalmem } from 'os';
24+
import { arch, totalmem, release, platform, type } from 'os';
2525

2626
export interface IElectronMainService extends AddFirstParameterToFunctions<ICommonElectronService, Promise<unknown> /* only methods, not events */, number | undefined /* window ID */> { }
2727

@@ -315,6 +315,15 @@ export class ElectronMainService implements IElectronMainService {
315315
return totalmem();
316316
}
317317

318+
async getOS(): Promise<IOSProperties> {
319+
return {
320+
arch: arch(),
321+
platform: platform(),
322+
release: release(),
323+
type: type()
324+
};
325+
}
326+
318327
//#endregion
319328

320329

src/vs/workbench/contrib/remote/electron-browser/remote.contribution.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import { ICommandService } from 'vs/platform/commands/common/commands';
1717
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
1818
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
1919
import { ILogService } from 'vs/platform/log/common/log';
20-
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
21-
import { DialogChannel } from 'vs/platform/dialogs/electron-browser/dialogIpc';
2220
import { DownloadServiceChannel } from 'vs/platform/download/common/downloadIpc';
2321
import { LoggerChannel } from 'vs/platform/log/common/logIpc';
2422
import { ipcRenderer } from 'vs/base/parts/sandbox/electron-sandbox/globals';
@@ -38,12 +36,10 @@ class RemoteChannelsContribution implements IWorkbenchContribution {
3836
constructor(
3937
@ILogService logService: ILogService,
4038
@IRemoteAgentService remoteAgentService: IRemoteAgentService,
41-
@IDialogService dialogService: IDialogService,
4239
@IDownloadService downloadService: IDownloadService
4340
) {
4441
const connection = remoteAgentService.getConnection();
4542
if (connection) {
46-
connection.registerChannel('dialog', new DialogChannel(dialogService));
4743
connection.registerChannel('download', new DownloadServiceChannel(downloadService));
4844
connection.registerChannel('logger', new LoggerChannel(logService));
4945
}

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

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ import { ChordKeybinding, ResolvedKeybinding, SimpleKeybinding } from 'vs/base/c
3636
import { ScanCodeBinding } from 'vs/base/common/scanCode';
3737
import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding';
3838
import { isWindows, OS } from 'vs/base/common/platform';
39-
import { IConfirmation, IConfirmationResult, IDialogOptions, IDialogService, IShowResult } from 'vs/platform/dialogs/common/dialogs';
40-
import Severity from 'vs/base/common/severity';
4139
import { IWebviewService, WebviewContentOptions, WebviewElement, WebviewExtensionDescription, WebviewIcons, WebviewOptions, WebviewOverlay } from 'vs/workbench/contrib/webview/browser/webview';
4240
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
4341
import { AbstractTextFileService } from 'vs/workbench/services/textfile/browser/textFileService';
@@ -506,22 +504,6 @@ registerSingleton(IKeymapService, SimpleKeymapService);
506504
//#endregion
507505

508506

509-
//#region Dialog
510-
511-
class SimpleDialogService implements IDialogService {
512-
513-
declare readonly _serviceBrand: undefined;
514-
515-
async confirm(confirmation: IConfirmation): Promise<IConfirmationResult> { return { confirmed: false }; }
516-
async show(severity: Severity, message: string, buttons: string[], options?: IDialogOptions): Promise<IShowResult> { return { choice: 1 }; }
517-
async about(): Promise<void> { }
518-
}
519-
520-
registerSingleton(IDialogService, SimpleDialogService);
521-
522-
//#endregion
523-
524-
525507
//#region Webview
526508

527509
class SimpleWebviewService implements IWebviewService {

src/vs/workbench/services/dialogs/electron-browser/dialogService.ts renamed to src/vs/workbench/services/dialogs/electron-sandbox/dialogService.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as nls from 'vs/nls';
7-
import * as os from 'os';
87
import Severity from 'vs/base/common/severity';
98
import { isLinux, isWindows } from 'vs/base/common/platform';
109
import { mnemonicButtonLabel } from 'vs/base/common/labels';
1110
import { IDialogService, IConfirmation, IConfirmationResult, IDialogOptions, IShowResult } from 'vs/platform/dialogs/common/dialogs';
1211
import { DialogService as HTMLDialogService } from 'vs/workbench/services/dialogs/browser/dialogService';
1312
import { ILogService } from 'vs/platform/log/common/log';
1413
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
15-
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
16-
import { DialogChannel } from 'vs/platform/dialogs/electron-browser/dialogIpc';
1714
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1815
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
1916
import { IThemeService } from 'vs/platform/theme/common/themeService';
@@ -23,6 +20,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
2320
import { IElectronService } from 'vs/platform/electron/electron-sandbox/electron';
2421
import { MessageBoxOptions } from 'vs/base/parts/sandbox/common/electronTypes';
2522
import { fromNow } from 'vs/base/common/date';
23+
import { process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
2624

2725
interface IMassagedMessageBoxOptions {
2826

@@ -51,14 +49,13 @@ export class DialogService implements IDialogService {
5149
@ILogService logService: ILogService,
5250
@ILayoutService layoutService: ILayoutService,
5351
@IThemeService themeService: IThemeService,
54-
@ISharedProcessService sharedProcessService: ISharedProcessService,
5552
@IKeybindingService keybindingService: IKeybindingService,
5653
@IProductService productService: IProductService,
5754
@IClipboardService clipboardService: IClipboardService,
5855
@IElectronService electronService: IElectronService
5956
) {
6057
this.customImpl = new HTMLDialogService(logService, layoutService, themeService, keybindingService, productService, clipboardService);
61-
this.nativeImpl = new NativeDialogService(logService, sharedProcessService, electronService, productService, clipboardService);
58+
this.nativeImpl = new NativeDialogService(logService, electronService, productService, clipboardService);
6259
}
6360

6461
private get useCustomDialog(): boolean {
@@ -92,12 +89,10 @@ class NativeDialogService implements IDialogService {
9289

9390
constructor(
9491
@ILogService private readonly logService: ILogService,
95-
@ISharedProcessService sharedProcessService: ISharedProcessService,
9692
@IElectronService private readonly electronService: IElectronService,
9793
@IProductService private readonly productService: IProductService,
9894
@IClipboardService private readonly clipboardService: IClipboardService
9995
) {
100-
sharedProcessService.registerChannel('dialog', new DialogChannel(this));
10196
}
10297

10398
async confirm(confirmation: IConfirmation): Promise<IConfirmationResult> {
@@ -217,6 +212,7 @@ class NativeDialogService implements IDialogService {
217212
}
218213

219214
const isSnap = process.platform === 'linux' && process.env.SNAP && process.env.SNAP_REVISION;
215+
const os = await this.electronService.getOS();
220216

221217
const detailString = (useAgo: boolean): string => {
222218
return nls.localize('aboutDetail',
@@ -228,7 +224,7 @@ class NativeDialogService implements IDialogService {
228224
process.versions['chrome'],
229225
process.versions['node'],
230226
process.versions['v8'],
231-
`${os.type()} ${os.arch()} ${os.release()}${isSnap ? ' snap' : ''}`
227+
`${os.type} ${os.arch} ${os.release}${isSnap ? ' snap' : ''}`
232228
);
233229
};
234230

src/vs/workbench/test/electron-browser/workbenchTestServices.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { TestContextService } from 'vs/workbench/test/common/workbenchTestServic
4040
import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity';
4141
import { MouseInputEvent } from 'vs/base/parts/sandbox/common/electronTypes';
4242
import { IModeService } from 'vs/editor/common/services/modeService';
43+
import { IOSProperties } from 'vs/platform/electron/common/electron';
4344

4445
export const TestWorkbenchConfiguration: INativeWorkbenchConfiguration = {
4546
windowId: 0,
@@ -195,6 +196,7 @@ export class TestElectronService implements IElectronService {
195196
async setRepresentedFilename(path: string): Promise<void> { }
196197
async isAdmin(): Promise<boolean> { return false; }
197198
async getTotalMem(): Promise<number> { return 0; }
199+
async getOS(): Promise<IOSProperties> { return Object.create(null); }
198200
async killProcess(): Promise<void> { }
199201
async setDocumentEdited(edited: boolean): Promise<void> { }
200202
async openExternal(url: string): Promise<boolean> { return false; }

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import 'vs/workbench/services/textMate/electron-browser/textMateService';
3939
import 'vs/workbench/services/search/electron-browser/searchService';
4040
import 'vs/workbench/services/output/electron-browser/outputChannelModelService';
4141
import 'vs/workbench/services/textfile/electron-browser/nativeTextFileService';
42-
import 'vs/workbench/services/dialogs/electron-browser/dialogService';
4342
import 'vs/workbench/services/keybinding/electron-browser/nativeKeymapService';
4443
import 'vs/workbench/services/extensions/electron-browser/extensionService';
4544
import 'vs/workbench/services/extensionManagement/electron-browser/extensionManagementServerService';

0 commit comments

Comments
 (0)