Skip to content

Commit 067261c

Browse files
committed
sandbox - make shared process service available on startup
1 parent cad4c19 commit 067261c

File tree

15 files changed

+78
-44
lines changed

15 files changed

+78
-44
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,11 @@
211211
ipcMessagePort: {
212212

213213
/**
214-
* @param {string} channelRequest
215214
* @param {string} channelResponse
216215
* @param {string} requestNonce
217216
*/
218-
connect(channelRequest, channelResponse, requestNonce) {
219-
if (validateIPC(channelRequest) && validateIPC(channelResponse)) {
217+
acquire(channelResponse, requestNonce) {
218+
if (validateIPC(channelResponse)) {
220219
const responseListener = (/** @type {IpcRendererEvent} */ e, /** @type {string} */ responseNonce) => {
221220
// validate that the nonce from the response is the same
222221
// as when requested. and if so, use `postMessage` to
@@ -228,9 +227,8 @@
228227
}
229228
};
230229

231-
// request message port from main and await result
230+
// handle reply from main
232231
ipcRenderer.on(channelResponse, responseListener);
233-
ipcRenderer.send(channelRequest, requestNonce);
234232
}
235233
}
236234
},

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,15 @@ export interface ISandboxNodeProcess extends INodeProcess {
9494
export interface IpcMessagePort {
9595

9696
/**
97-
* Establish a connection via `MessagePort` to a target. The main process
98-
* will need to transfer the port over to the `channelResponse` after listening
99-
* to `channelRequest` with a payload of `requestNonce` so that the
100-
* source can correlate the response.
97+
* Acquire a `MessagePort`. The main process will transfer the port over to
98+
* the `responseChannel` with a payload of `requestNonce` so that the source can
99+
* correlate the response.
101100
*
102101
* The source should install a `window.on('message')` listener, ensuring `e.data`
103-
* matches `requestNonce`, `e.source` matches `window` and then receiving the
104-
* `MessagePort` via `e.ports[0]`.
102+
* matches `nonce`, `e.source` matches `window` and then receiving the `MessagePort`
103+
* via `e.ports[0]`.
105104
*/
106-
connect(channelRequest: string, channelResponse: string, requestNonce: string): void;
105+
acquire(responseChannel: string, nonce: string): void;
107106
}
108107

109108
export interface ISandboxContext {

src/vs/base/worker/workerMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
(<any>self).postMessage(msg, transfer);
9090
}, null);
9191

92-
self.onmessage = (e: MessageEvent) => messageHandler.onmessage(e.data);
92+
self.onmessage = (e: MessageEvent) => messageHandler.onmessage(e.data, e.ports);
9393
while (beforeReadyMessages.length > 0) {
9494
self.onmessage(beforeReadyMessages.shift()!);
9595
}

src/vs/code/electron-browser/sharedProcess/contrib/codeCacheCleaner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class CodeCacheCleaner extends Disposable {
3636
}
3737

3838
private async cleanUpCodeCaches(currentCodeCachePath: string): Promise<void> {
39-
this.logService.info('[code cache cleanup]: Starting to clean up old code cache folders.');
39+
this.logService.trace('[code cache cleanup]: Starting to clean up old code cache folders.');
4040

4141
try {
4242
const now = Date.now();
@@ -56,7 +56,7 @@ export class CodeCacheCleaner extends Disposable {
5656
const codeCacheEntryPath = join(codeCacheRootPath, codeCache);
5757
const codeCacheEntryStat = await Promises.stat(codeCacheEntryPath);
5858
if (codeCacheEntryStat.isDirectory() && (now - codeCacheEntryStat.mtime.getTime()) > this._DataMaxAge) {
59-
this.logService.info(`[code cache cleanup]: Removing code cache folder ${codeCache}.`);
59+
this.logService.trace(`[code cache cleanup]: Removing code cache folder ${codeCache}.`);
6060

6161
return Promises.rm(codeCacheEntryPath);
6262
}

src/vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class LanguagePackCachedDataCleaner extends Disposable {
5454
}
5555

5656
private async cleanUpLanguagePackCache(): Promise<void> {
57-
this.logService.info('[language pack cache cleanup]: Starting to clean up unused language packs.');
57+
this.logService.trace('[language pack cache cleanup]: Starting to clean up unused language packs.');
5858

5959
try {
6060
const installed: IStringDictionary<boolean> = Object.create(null);
@@ -74,11 +74,11 @@ export class LanguagePackCachedDataCleaner extends Disposable {
7474
const entries = await Promises.readdir(cacheDir);
7575
for (const entry of entries) {
7676
if (installed[entry]) {
77-
this.logService.info(`[language pack cache cleanup]: Skipping folder ${entry}. Language pack still in use.`);
77+
this.logService.trace(`[language pack cache cleanup]: Skipping folder ${entry}. Language pack still in use.`);
7878
continue;
7979
}
8080

81-
this.logService.info(`[language pack cache cleanup]: Removing unused language pack: ${entry}`);
81+
this.logService.trace(`[language pack cache cleanup]: Removing unused language pack: ${entry}`);
8282

8383
await Promises.rm(join(cacheDir, entry));
8484
}
@@ -95,7 +95,7 @@ export class LanguagePackCachedDataCleaner extends Disposable {
9595
const candidate = join(folder, entry);
9696
const stat = await Promises.stat(candidate);
9797
if (stat.isDirectory() && (now - stat.mtime.getTime()) > this._DataMaxAge) {
98-
this.logService.info(`[language pack cache cleanup]: Removing language pack cache folder: ${join(packEntry, entry)}`);
98+
this.logService.trace(`[language pack cache cleanup]: Removing language pack cache folder: ${join(packEntry, entry)}`);
9999

100100
await Promises.rm(candidate);
101101
}

src/vs/code/electron-browser/sharedProcess/contrib/logsDataCleaner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class LogsDataCleaner extends Disposable {
2626
}
2727

2828
private async cleanUpOldLogs(): Promise<void> {
29-
this.logService.info('[logs cleanup]: Starting to clean up old logs.');
29+
this.logService.trace('[logs cleanup]: Starting to clean up old logs.');
3030

3131
try {
3232
const currentLog = basename(this.environmentService.logsPath);
@@ -39,7 +39,7 @@ export class LogsDataCleaner extends Disposable {
3939
const sessionsToDelete = oldSessions.slice(0, Math.max(0, oldSessions.length - 9));
4040

4141
if (sessionsToDelete.length > 0) {
42-
this.logService.info(`[logs cleanup]: Removing log folders '${sessionsToDelete.join(', ')}'`);
42+
this.logService.trace(`[logs cleanup]: Removing log folders '${sessionsToDelete.join(', ')}'`);
4343

4444
await Promise.all(sessionsToDelete.map(sessionToDelete => Promises.rm(join(logsRoot, sessionToDelete))));
4545
}

src/vs/code/electron-browser/sharedProcess/contrib/storageDataCleaner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class StorageDataCleaner extends Disposable {
3131
}
3232

3333
private async cleanUpStorage(): Promise<void> {
34-
this.logService.info('[storage cleanup]: Starting to clean up storage folders.');
34+
this.logService.trace('[storage cleanup]: Starting to clean up storage folders.');
3535

3636
try {
3737

@@ -50,7 +50,7 @@ export class StorageDataCleaner extends Disposable {
5050
}
5151

5252
if (emptyWorkspaces.indexOf(storageFolder) === -1) {
53-
this.logService.info(`[storage cleanup]: Deleting storage folder ${storageFolder}.`);
53+
this.logService.trace(`[storage cleanup]: Deleting storage folder ${storageFolder}.`);
5454

5555
await Promises.rm(join(this.environmentService.workspaceStorageHome.fsPath, storageFolder));
5656
}

src/vs/platform/ipc/electron-sandbox/services.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,13 @@ export function registerMainProcessRemoteService<T>(id: ServiceIdentifier<T>, ch
7272
export const ISharedProcessService = createDecorator<ISharedProcessService>('sharedProcessService');
7373

7474
export interface ISharedProcessService {
75+
7576
readonly _serviceBrand: undefined;
77+
7678
getChannel(channelName: string): IChannel;
7779
registerChannel(channelName: string, channel: IServerChannel<string>): void;
80+
81+
notifyRestored(): void;
7882
}
7983

8084
class SharedProcessRemoteServiceStub<T> extends RemoteServiceStub<T> {

src/vs/workbench/electron-browser/desktop.main.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { DiskFileSystemProvider } from 'vs/platform/files/electron-browser/diskF
1313
import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider';
1414
import { INativeHostService } from 'vs/platform/native/electron-sandbox/native';
1515
import { SharedDesktopMain } from 'vs/workbench/electron-sandbox/shared.desktop.main';
16+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/services';
1617

1718
class DesktopMain extends SharedDesktopMain {
1819

@@ -23,7 +24,13 @@ class DesktopMain extends SharedDesktopMain {
2324
gracefulify(fs);
2425
}
2526

26-
protected registerFileSystemProviders(environmentService: INativeWorkbenchEnvironmentService, fileService: IFileService, logService: ILogService, nativeHostService: INativeHostService): void {
27+
protected registerFileSystemProviders(
28+
mainProcessService: IMainProcessService,
29+
environmentService: INativeWorkbenchEnvironmentService,
30+
fileService: IFileService,
31+
logService: ILogService,
32+
nativeHostService: INativeHostService
33+
): void {
2734

2835
// Local Files
2936
const diskFileSystemProvider = this._register(new DiskFileSystemProvider(logService, nativeHostService, { legacyWatcher: this.configuration.legacyWatcher }));

src/vs/workbench/electron-sandbox/desktop.main.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,22 @@ import { IFileService } from 'vs/platform/files/common/files';
1010
import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider';
1111
import { initFileSystem, simpleFileSystemProvider, simpleWorkspaceDir } from 'vs/workbench/electron-sandbox/sandbox.simpleservices';
1212
import { SharedDesktopMain } from 'vs/workbench/electron-sandbox/shared.desktop.main';
13+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/services';
14+
import { INativeHostService } from 'vs/platform/native/electron-sandbox/native';
1315

1416
class DesktopMain extends SharedDesktopMain {
1517

1618
constructor(configuration: INativeWorkbenchConfiguration) {
1719
super({ ...configuration, workspace: { id: configuration.workspace?.id ?? '4064f6ec-cb38-4ad0-af64-ee6467e63c82', uri: simpleWorkspaceDir } });
1820
}
1921

20-
protected registerFileSystemProviders(environmentService: INativeWorkbenchEnvironmentService, fileService: IFileService, logService: ILogService): Promise<void> {
22+
protected registerFileSystemProviders(
23+
mainProcessService: IMainProcessService,
24+
environmentService: INativeWorkbenchEnvironmentService,
25+
fileService: IFileService,
26+
logService: ILogService,
27+
nativeHostService: INativeHostService
28+
): Promise<void> {
2129

2230
// Local Files
2331
fileService.registerProvider(Schemas.file, simpleFileSystemProvider);

0 commit comments

Comments
 (0)