Skip to content

Commit 8e99945

Browse files
author
Benjamin Pasero
committed
debt - get rid of windows service
1 parent a036c0f commit 8e99945

9 files changed

Lines changed: 49 additions & 140 deletions

File tree

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

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
import { app, ipcMain as ipc, systemPreferences, shell, Event, contentTracing, protocol, powerMonitor, IpcMainEvent } from 'electron';
77
import { IProcessEnvironment, isWindows, isMacintosh } from 'vs/base/common/platform';
88
import { WindowsManager } from 'vs/code/electron-main/windows';
9-
import { IWindowsService, OpenContext, IWindowOpenable } from 'vs/platform/windows/common/windows';
9+
import { OpenContext, IWindowOpenable } from 'vs/platform/windows/common/windows';
1010
import { ActiveWindowManager } from 'vs/platform/windows/node/windows';
11-
import { WindowsChannel } from 'vs/platform/windows/common/windowsIpc';
12-
import { LegacyWindowsMainService } from 'vs/platform/windows/electron-main/legacyWindowsMainService';
1311
import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
1412
import { getShellEnvironment } from 'vs/code/node/shellEnv';
1513
import { IUpdateService } from 'vs/platform/update/common/update';
@@ -79,6 +77,7 @@ import { ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/ext
7977
import { IElectronService } from 'vs/platform/electron/node/electron';
8078
import { ElectronMainService } from 'vs/platform/electron/electron-main/electronMainService';
8179
import { ISharedProcessMainService, SharedProcessMainService } from 'vs/platform/ipc/electron-main/sharedProcessMainService';
80+
import { assign } from 'vs/base/common/objects';
8281

8382
export class CodeApplication extends Disposable {
8483

@@ -451,7 +450,6 @@ export class CodeApplication extends Disposable {
451450

452451
services.set(IWindowsMainService, new SyncDescriptor(WindowsManager, [machineId, this.userEnv]));
453452
services.set(ISharedProcessMainService, new SyncDescriptor(SharedProcessMainService, [sharedProcess]));
454-
services.set(IWindowsService, new SyncDescriptor(LegacyWindowsMainService));
455453
services.set(ILaunchMainService, new SyncDescriptor(LaunchMainService));
456454

457455
const diagnosticsChannel = getDelayedChannel(sharedProcessClient.then(client => client.getChannel('diagnostics')));
@@ -557,10 +555,6 @@ export class CodeApplication extends Disposable {
557555
const workspacesChannel = new WorkspacesChannel(workspacesMainService, accessor.get(IWindowsMainService));
558556
electronIpcServer.registerChannel('workspaces', workspacesChannel);
559557

560-
const windowsService = accessor.get(IWindowsService);
561-
const windowsChannel = new WindowsChannel(windowsService);
562-
electronIpcServer.registerChannel('windows', windowsChannel);
563-
564558
const menubarService = accessor.get(IMenubarService);
565559
const menubarChannel = createChannelReceiver(menubarService);
566560
electronIpcServer.registerChannel('menubar', menubarChannel);
@@ -586,6 +580,25 @@ export class CodeApplication extends Disposable {
586580
// Propagate to clients
587581
const windowsMainService = this.windowsMainService = accessor.get(IWindowsMainService);
588582

583+
// Create a URL handler to open file URIs in the active window
584+
const environmentService = accessor.get(IEnvironmentService);
585+
urlService.registerHandler({
586+
async handleURL(uri: URI): Promise<boolean> {
587+
588+
// Catch file URLs
589+
if (uri.authority === Schemas.file && !!uri.path) {
590+
const cli = assign(Object.create(null), environmentService.args);
591+
const urisToOpen = [{ fileUri: uri }];
592+
593+
windowsMainService.open({ context: OpenContext.API, cli, urisToOpen, gotoLineMode: true });
594+
595+
return true;
596+
}
597+
598+
return false;
599+
}
600+
});
601+
589602
// Create a URL handler which forwards to the last active window
590603
const activeWindowManager = new ActiveWindowManager(electronService);
591604
const activeWindowRouter = new StaticRouter(ctx => activeWindowManager.getActiveClientId().then(id => ctx === id));
@@ -596,8 +609,6 @@ export class CodeApplication extends Disposable {
596609
// On Mac, Code can be running without any open windows, so we must create a window to handle urls,
597610
// if there is none
598611
if (isMacintosh) {
599-
const environmentService = accessor.get(IEnvironmentService);
600-
601612
urlService.registerHandler({
602613
async handleURL(uri: URI): Promise<boolean> {
603614
if (windowsMainService.getWindowCount() === 0) {

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows';
88
import { MessageBoxOptions, MessageBoxReturnValue, shell, OpenDevToolsOptions, SaveDialogOptions, SaveDialogReturnValue, OpenDialogOptions, OpenDialogReturnValue, CrashReporterStartOptions, crashReporter, Menu, BrowserWindow, app } from 'electron';
99
import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
1010
import { OpenContext, INativeOpenDialogOptions, IWindowOpenable, IOpenInWindowOptions, IOpenedWindow, IOpenEmptyWindowOptions } from 'vs/platform/windows/common/windows';
11-
import { isMacintosh } from 'vs/base/common/platform';
11+
import { isMacintosh, IProcessEnvironment } from 'vs/base/common/platform';
1212
import { IElectronService } from 'vs/platform/electron/node/electron';
1313
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
14-
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
14+
import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment';
1515
import { AddFirstParameterToFunctions } from 'vs/base/common/types';
1616
import { IHistoryMainService } from 'vs/platform/history/electron-main/historyMainService';
1717
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
@@ -357,4 +357,21 @@ export class ElectronMainService implements AddFirstParameterToFunctions<IElectr
357357
}
358358

359359
//#endregion
360+
361+
//#region Debug
362+
363+
// TODO@Isidor move into debug IPC channel (https://github.com/microsoft/vscode/issues/81060)
364+
365+
async openExtensionDevelopmentHostWindow(windowId: number, args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
366+
const extDevPaths = args.extensionDevelopmentPath;
367+
if (extDevPaths) {
368+
this.windowsMainService.openExtensionDevelopmentHostWindow(extDevPaths, {
369+
context: OpenContext.API,
370+
cli: args,
371+
userEnv: Object.keys(env).length > 0 ? env : undefined
372+
});
373+
}
374+
}
375+
376+
//#endregion
360377
}

src/vs/platform/electron/node/electron.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { INativeOpenDialogOptions, IWindowOpenable, IOpenInWindowOptions, IOpene
1010
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1111
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
1212
import { URI } from 'vs/base/common/uri';
13+
import { ParsedArgs } from 'vscode-minimist';
14+
import { IProcessEnvironment } from 'vs/base/common/platform';
1315

1416
export const IElectronService = createDecorator<IElectronService>('electronService');
1517

@@ -92,4 +94,7 @@ export interface IElectronService {
9294
addRecentlyOpened(recents: IRecent[]): Promise<void>;
9395
removeFromRecentlyOpened(paths: URI[]): Promise<void>;
9496
clearRecentlyOpened(): Promise<void>;
97+
98+
// Debug (TODO@Isidor move into debug IPC channel (https://github.com/microsoft/vscode/issues/81060)
99+
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void>;
95100
}

src/vs/platform/windows/common/windows.ts

Lines changed: 0 additions & 7 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-
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
76
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
87
import { IProcessEnvironment, isMacintosh, isLinux, isWeb } from 'vs/base/common/platform';
98
import { ParsedArgs, IEnvironmentService } from 'vs/platform/environment/common/environment';
@@ -13,8 +12,6 @@ import { LogLevel } from 'vs/platform/log/common/log';
1312
import { URI, UriComponents } from 'vs/base/common/uri';
1413
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1514

16-
export const IWindowsService = createDecorator<IWindowsService>('windowsService');
17-
1815
export interface INativeOpenDialogOptions {
1916
forceNewWindow?: boolean;
2017

@@ -24,10 +21,6 @@ export interface INativeOpenDialogOptions {
2421
telemetryExtraData?: ITelemetryData;
2522
}
2623

27-
export interface IWindowsService {
28-
_serviceBrand: undefined;
29-
}
30-
3124
export interface IOpenedWindow {
3225
id: number;
3326
workspace?: IWorkspaceIdentifier;

src/vs/platform/windows/common/windowsIpc.ts

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

src/vs/platform/windows/electron-browser/windowsService.ts

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

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

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

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,22 @@ import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
77
import { IExtensionHostDebugService } from 'vs/platform/debug/common/extensionHostDebug';
88
import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService';
99
import { ExtensionHostDebugChannelClient, ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
10-
import { IWindowsService } from 'vs/platform/windows/common/windows';
1110
import { IProcessEnvironment } from 'vs/base/common/platform';
1211
import { ParsedArgs } from 'vs/platform/environment/common/environment';
13-
import { WindowsService } from 'vs/platform/windows/electron-browser/windowsService';
12+
import { IElectronService } from 'vs/platform/electron/node/electron';
1413

1514
export class ExtensionHostDebugService extends ExtensionHostDebugChannelClient {
1615

1716
constructor(
1817
@IMainProcessService readonly mainProcessService: IMainProcessService,
19-
@IWindowsService private readonly windowsService: IWindowsService
18+
@IElectronService private readonly electronService: IElectronService
2019
) {
2120
super(mainProcessService.getChannel(ExtensionHostDebugBroadcastChannel.ChannelName));
2221
}
2322

2423
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
25-
// TODO@Isidor use debug IPC channel
26-
return (this.windowsService as WindowsService).openExtensionDevelopmentHostWindow(args, env);
24+
// TODO@Isidor move into debug IPC channel (https://github.com/microsoft/vscode/issues/81060)
25+
return this.electronService.openExtensionDevelopmentHostWindow(args, env);
2726
}
2827
}
2928

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
6262
import { ClipboardService } from 'vs/platform/clipboard/electron-browser/clipboardService';
6363
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
6464
import { LocalizationsService } from 'vs/platform/localizations/electron-browser/localizationsService';
65-
import { IWindowsService } from 'vs/platform/windows/common/windows';
66-
import { WindowsService } from 'vs/platform/windows/electron-browser/windowsService';
6765
import { IUpdateService } from 'vs/platform/update/common/update';
6866
import { UpdateService } from 'vs/platform/update/electron-browser/updateService';
6967
import { IIssueService } from 'vs/platform/issue/node/issue';
@@ -75,7 +73,6 @@ import { NativeWorkspaceEditingService } from 'vs/workbench/services/workspace/e
7573

7674
registerSingleton(IClipboardService, ClipboardService, true);
7775
registerSingleton(ILocalizationsService, LocalizationsService);
78-
registerSingleton(IWindowsService, WindowsService);
7976
registerSingleton(IUpdateService, UpdateService);
8077
registerSingleton(IIssueService, IssueService);
8178
registerSingleton(IMenubarService, MenubarService);

0 commit comments

Comments
 (0)