提交 d4ff203d 编写于 作者: B Benjamin Pasero

simplify closeExtensionHostWindow via broadcast

上级 7d42622d
......@@ -144,25 +144,5 @@ export function findWindowOnWorkspace<W extends ISimpleWindow>(windows: W[], wor
}
}
return null;
}
export function findExtensionDevelopmentWindow<W extends ISimpleWindow>(windows: W[], extensionDevelopmentPath?: string): W {
if (windows.length) {
const res = windows.filter(w => {
// match on extension development path
if (typeof extensionDevelopmentPath === 'string' && paths.isEqual(w.extensionDevelopmentPath, extensionDevelopmentPath, !platform.isLinux /* ignorecase */)) {
return true;
}
return false;
});
if (res && res.length) {
return res[0];
}
}
return null;
}
\ No newline at end of file
......@@ -58,8 +58,6 @@ export interface IWindowsService {
getWindows(): TPromise<{ id: number; workspace?: IWorkspaceIdentifier; folderPath?: string; title: string; filename?: string; }[]>;
getWindowCount(): TPromise<number>;
log(severity: string, ...messages: string[]): TPromise<void>;
// TODO@joao: what?
closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void>;
showItemInFolder(path: string): TPromise<void>;
// This needs to be handled from browser process to prevent
......
......@@ -46,7 +46,6 @@ export interface IWindowsChannel extends IChannel {
call(command: 'whenSharedProcessReady'): TPromise<void>;
call(command: 'toggleSharedProcess'): TPromise<void>;
call(command: 'log', arg: [string, string[]]): TPromise<void>;
call(command: 'closeExtensionHostWindow', arg: string[]): TPromise<void>;
call(command: 'showItemInFolder', arg: string): TPromise<void>;
call(command: 'openExternal', arg: string): TPromise<boolean>;
call(command: 'startCrashReporter', arg: Electron.CrashReporterStartOptions): TPromise<void>;
......@@ -98,7 +97,6 @@ export class WindowsChannel implements IWindowsChannel {
case 'toggleSharedProcess': return this.service.toggleSharedProcess();
case 'quit': return this.service.quit();
case 'log': return this.service.log(arg[0], arg[1]);
case 'closeExtensionHostWindow': return this.service.closeExtensionHostWindow(arg);
case 'showItemInFolder': return this.service.showItemInFolder(arg);
case 'openExternal': return this.service.openExternal(arg);
case 'startCrashReporter': return this.service.startCrashReporter(arg);
......@@ -243,10 +241,6 @@ export class WindowsChannelClient implements IWindowsService {
return this.channel.call('log', [severity, messages]);
}
closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void> {
return this.channel.call('closeExtensionHostWindow', extensionDevelopmentPaths);
}
showItemInFolder(path: string): TPromise<void> {
return this.channel.call('showItemInFolder', path);
}
......
......@@ -19,7 +19,6 @@ import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
import { ILifecycleService } from "vs/platform/lifecycle/electron-main/lifecycleMain";
import { IWindowsMainService, ISharedProcess } from "vs/platform/windows/electron-main/windows";
import { IHistoryMainService, IRecentlyOpened } from "vs/platform/history/common/history";
import { findExtensionDevelopmentWindow } from "vs/code/node/windowsFinder";
import { IWorkspaceIdentifier } from "vs/platform/workspaces/common/workspaces";
export class WindowsService implements IWindowsService, IDisposable {
......@@ -282,16 +281,6 @@ export class WindowsService implements IWindowsService, IDisposable {
return TPromise.as(null);
}
closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void> {
extensionDevelopmentPaths.map(extensionDevelopmentPath => findExtensionDevelopmentWindow(this.windowsMainService.getWindows(), extensionDevelopmentPath)).forEach(extensionDevelopmentWindow => {
if (extensionDevelopmentWindow) {
extensionDevelopmentWindow.win.close();
}
});
return TPromise.as(null);
}
showItemInFolder(path: string): TPromise<void> {
shell.showItemInFolder(path);
return TPromise.as(null);
......
......@@ -12,7 +12,7 @@ import * as objects from 'vs/base/common/objects';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Action } from 'vs/base/common/actions';
import { isWindows } from 'vs/base/common/platform';
import { isWindows, isLinux } from 'vs/base/common/platform';
import { findFreePort } from 'vs/base/node/ports';
import { IMessageService, Severity } from 'vs/platform/message/common/message';
import { ILifecycleService, ShutdownEvent } from 'vs/platform/lifecycle/common/lifecycle';
......@@ -34,11 +34,13 @@ import { IInitData, IWorkspaceData } from 'vs/workbench/api/node/extHost.protoco
import { MainProcessExtensionService } from 'vs/workbench/api/electron-browser/mainThreadExtensionService';
import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
import { ICrashReporterService } from 'vs/workbench/services/crashReporter/common/crashReporterService';
import { IBroadcastService } from "vs/platform/broadcast/electron-browser/broadcastService";
import { IBroadcastService, IBroadcast } from "vs/platform/broadcast/electron-browser/broadcastService";
import { isEqual } from "vs/base/common/paths";
export const EXTENSION_LOG_BROADCAST_CHANNEL = 'vscode:extensionLog';
export const EXTENSION_ATTACH_BROADCAST_CHANNEL = 'vscode:extensionAttach';
export const EXTENSION_TERMINATE_BROADCAST_CHANNEL = 'vscode:extensionTerminate';
export const EXTENSION_CLOSE_EXTHOST_BROADCAST_CHANNEL = 'vscode:extensionCloseExtensionHost';
export interface ILogEntry {
type: string;
......@@ -108,6 +110,19 @@ export class ExtensionHostProcessWorker {
lifecycleService.onWillShutdown(this._onWillShutdown, this);
lifecycleService.onShutdown(reason => this.terminate());
broadcastService.onBroadcast(b => this.onBroadcast(b));
}
private onBroadcast(broadcast: IBroadcast): void {
// Close Ext Host Window Request
if (broadcast.channel === EXTENSION_CLOSE_EXTHOST_BROADCAST_CHANNEL && this.isExtensionDevelopmentHost) {
const extensionPaths = broadcast.payload as string[];
if (Array.isArray(extensionPaths) && extensionPaths.some(path => isEqual(this.environmentService.extensionDevelopmentPath, path, !isLinux))) {
this.windowService.closeWindow();
}
}
}
public start(extensionService: MainProcessExtensionService): void {
......
......@@ -48,7 +48,7 @@ import { ITextFileService } from 'vs/workbench/services/textfile/common/textfile
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ILogEntry, EXTENSION_LOG_BROADCAST_CHANNEL, EXTENSION_ATTACH_BROADCAST_CHANNEL, EXTENSION_TERMINATE_BROADCAST_CHANNEL } from 'vs/workbench/electron-browser/extensionHost';
import { ILogEntry, EXTENSION_LOG_BROADCAST_CHANNEL, EXTENSION_ATTACH_BROADCAST_CHANNEL, EXTENSION_TERMINATE_BROADCAST_CHANNEL, EXTENSION_CLOSE_EXTHOST_BROADCAST_CHANNEL } from 'vs/workbench/electron-browser/extensionHost';
import { IBroadcastService, IBroadcast } from "vs/platform/broadcast/electron-browser/broadcastService";
const DEBUG_BREAKPOINTS_KEY = 'debug.breakpoint';
......@@ -418,7 +418,10 @@ export class DebugService implements debug.IDebugService {
const process = this.viewModel.focusedProcess;
if (process && session && process.getId() === session.getId() && strings.equalsIgnoreCase(process.configuration.type, 'extensionhost') && this.sessionStates.get(session.getId()) === debug.State.Running &&
process && this.contextService.hasWorkspace() && process.configuration.noDebug) {
this.windowsService.closeExtensionHostWindow(this.contextService.getWorkspace().roots.map(r => r.fsPath));
this.broadcastService.broadcast({
channel: EXTENSION_CLOSE_EXTHOST_BROADCAST_CHANNEL,
payload: this.contextService.getWorkspace().roots.map(r => r.fsPath)
});
}
if (session && session.getId() === event.body.sessionId) {
this.onSessionEnd(session);
......
......@@ -1096,11 +1096,6 @@ export class TestWindowsService implements IWindowsService {
return TPromise.as(void 0);
}
// TODO@joao: what?
closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void> {
return TPromise.as(void 0);
}
showItemInFolder(path: string): TPromise<void> {
return TPromise.as(void 0);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册