Skip to content

Commit c86de79

Browse files
author
Benjamin Pasero
committed
sandbox - move main process service into electron-sandbox
1 parent 7f34cb5 commit c86de79

20 files changed

Lines changed: 73 additions & 91 deletions

File tree

src/vs/code/electron-browser/issue/issueReporterMain.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ import { isRemoteDiagnosticError, SystemInfo } from 'vs/platform/diagnostics/com
2727
import { EnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/node/environmentService';
2828
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
2929
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
30-
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
31-
import { MainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
30+
import { IMainProcessService, MainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
3231
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
3332
import { ISettingsSearchIssueReporterData, IssueReporterData, IssueReporterExtensionData, IssueReporterFeatures, IssueReporterStyles, IssueType } from 'vs/platform/issue/common/issue';
3433
import { getLogLevel, ILogService } from 'vs/platform/log/common/log';

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import { NodeCachedDataCleaner } from 'vs/code/electron-browser/sharedProcess/co
4040
import { LanguagePackCachedDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner';
4141
import { StorageDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/storageDataCleaner';
4242
import { LogsDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/logsDataCleaner';
43-
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
43+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
4444
import { SpdLogService } from 'vs/platform/log/node/spdlogService';
4545
import { DiagnosticsService, IDiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsService';
4646
import { DiagnosticsChannel } from 'vs/platform/diagnostics/node/diagnosticsIpc';
@@ -65,7 +65,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
6565
import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
6666
import { UserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSyncEnablementService';
6767
import { IAuthenticationTokenService, AuthenticationTokenService } from 'vs/platform/authentication/common/authentication';
68-
import { AuthenticationTokenServiceChannel } from 'vs/platform/authentication/common/authenticationIpc';
68+
import { AuthenticationTokenServiceChannel } from 'vs/platform/authentication/electron-browser/authenticationIpc';
6969
import { UserDataSyncBackupStoreService } from 'vs/platform/userDataSync/common/userDataSyncBackupStoreService';
7070
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
7171
import { ExtensionTipsService } from 'vs/platform/extensionManagement/node/extensionTipsService';

src/vs/code/electron-main/app.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { IProcessEnvironment, isWindows, isMacintosh } from 'vs/base/common/plat
88
import { WindowsMainService } from 'vs/platform/windows/electron-main/windowsMainService';
99
import { IWindowOpenable } from 'vs/platform/windows/common/windows';
1010
import { OpenContext } from 'vs/platform/windows/node/window';
11-
import { ActiveWindowManager } from 'vs/code/electron-main/windows';
1211
import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
1312
import { getShellEnvironment } from 'vs/code/node/shellEnv';
1413
import { IUpdateService } from 'vs/platform/update/common/update';
@@ -36,7 +35,7 @@ import { getDelayedChannel, StaticRouter, createChannelReceiver } from 'vs/base/
3635
import product from 'vs/platform/product/common/product';
3736
import { ProxyAuthHandler } from 'vs/code/electron-main/auth';
3837
import { Disposable } from 'vs/base/common/lifecycle';
39-
import { IWindowsMainService, ICodeWindow } from 'vs/platform/windows/electron-main/windows';
38+
import { IWindowsMainService, ICodeWindow, ActiveWindowManager } from 'vs/platform/windows/electron-main/windows';
4039
import { URI } from 'vs/base/common/uri';
4140
import { hasWorkspaceFileExtension, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces';
4241
import { WorkspacesService } from 'vs/platform/workspaces/electron-main/workspacesService';

src/vs/code/electron-main/windows.ts

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

src/vs/platform/authentication/common/authenticationIpc.ts renamed to src/vs/platform/authentication/electron-browser/authenticationIpc.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { IServerChannel } from 'vs/base/parts/ipc/common/ipc';
77
import { Event } from 'vs/base/common/event';
88
import { IAuthenticationTokenService } from 'vs/platform/authentication/common/authentication';
99

10-
1110
export class AuthenticationTokenServiceChannel implements IServerChannel {
1211
constructor(private readonly service: IAuthenticationTokenService) { }
1312

src/vs/platform/driver/electron-browser/driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { IDisposable, toDisposable } from 'vs/base/common/lifecycle';
77
import { WindowDriverChannel, WindowDriverRegistryChannelClient } from 'vs/platform/driver/node/driver';
88
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
9-
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
9+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
1010
import { remote } from 'electron';
1111
import { timeout } from 'vs/base/common/async';
1212
import { BaseWindowDriver } from 'vs/platform/driver/browser/baseDriver';

src/vs/platform/ipc/common/mainProcessService.ts

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

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,21 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
76
import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc';
87
import { Client } from 'vs/base/parts/ipc/electron-sandbox/ipc.electron-sandbox';
98
import { Disposable } from 'vs/base/common/lifecycle';
9+
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
10+
11+
export const IMainProcessService = createDecorator<IMainProcessService>('mainProcessService');
12+
13+
export interface IMainProcessService {
14+
15+
_serviceBrand: undefined;
16+
17+
getChannel(channelName: string): IChannel;
18+
19+
registerChannel(channelName: string, channel: IServerChannel<string>): void;
20+
}
1021

1122
export class MainProcessService extends Disposable implements IMainProcessService {
1223

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

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import { IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
1313
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1414
import { URI } from 'vs/base/common/uri';
1515
import { Rectangle, BrowserWindow } from 'electron';
16-
import { IDisposable } from 'vs/base/common/lifecycle';
16+
import { IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
17+
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
18+
import { IElectronMainService } from 'vs/platform/electron/electron-main/electronMainService';
1719

1820
export interface IWindowState {
1921
width?: number;
@@ -141,3 +143,45 @@ export interface IOpenConfiguration extends IBaseOpenConfiguration {
141143
}
142144

143145
export interface IOpenEmptyConfiguration extends IBaseOpenConfiguration { }
146+
147+
export class ActiveWindowManager extends Disposable {
148+
149+
private readonly disposables = this._register(new DisposableStore());
150+
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
151+
152+
private activeWindowId: number | undefined;
153+
154+
constructor(@IElectronMainService electronService: IElectronMainService) {
155+
super();
156+
157+
// remember last active window id upon events
158+
const onActiveWindowChange = Event.latch(Event.any(electronService.onWindowOpen, electronService.onWindowFocus));
159+
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
160+
161+
// resolve current active window
162+
this.firstActiveWindowIdPromise = createCancelablePromise(() => electronService.getActiveWindowId(-1));
163+
(async () => {
164+
try {
165+
const windowId = await this.firstActiveWindowIdPromise;
166+
this.activeWindowId = (typeof this.activeWindowId === 'number') ? this.activeWindowId : windowId;
167+
} finally {
168+
this.firstActiveWindowIdPromise = undefined;
169+
}
170+
})();
171+
}
172+
173+
private setActiveWindow(windowId: number | undefined) {
174+
if (this.firstActiveWindowIdPromise) {
175+
this.firstActiveWindowIdPromise.cancel();
176+
this.firstActiveWindowIdPromise = undefined;
177+
}
178+
179+
this.activeWindowId = windowId;
180+
}
181+
182+
async getActiveClientId(): Promise<string | undefined> {
183+
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
184+
185+
return `window:${id}`;
186+
}
187+
}

src/vs/workbench/contrib/debug/electron-sandbox/extensionHostDebugService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
77
import { IExtensionHostDebugService } from 'vs/platform/debug/common/extensionHostDebug';
8-
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
8+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
99
import { ExtensionHostDebugChannelClient, ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
1010

1111
export class ExtensionHostDebugService extends ExtensionHostDebugChannelClient {

0 commit comments

Comments
 (0)