未验证 提交 30159785 编写于 作者: A Alex Dima

Add connectionData to IInitData.remote

上级 767b4ea7
...@@ -85,6 +85,12 @@ export interface IWorkspaceData extends IStaticWorkspaceData { ...@@ -85,6 +85,12 @@ export interface IWorkspaceData extends IStaticWorkspaceData {
folders: { uri: UriComponents, name: string, index: number; }[]; folders: { uri: UriComponents, name: string, index: number; }[];
} }
export interface IRemoteConnectionData {
host: string;
port: number;
connectionToken: string;
}
export interface IInitData { export interface IInitData {
version: string; version: string;
commit?: string; commit?: string;
...@@ -99,7 +105,7 @@ export interface IInitData { ...@@ -99,7 +105,7 @@ export interface IInitData {
logsLocation: URI; logsLocation: URI;
logFile: URI; logFile: URI;
autoStart: boolean; autoStart: boolean;
remote: { isRemote: boolean; authority: string | undefined; }; remote: { isRemote: boolean; authority: string | undefined; connectionData: IRemoteConnectionData | undefined; };
uiKind: UIKind; uiKind: UIKind;
} }
......
...@@ -28,6 +28,7 @@ import { Schemas } from 'vs/base/common/network'; ...@@ -28,6 +28,7 @@ import { Schemas } from 'vs/base/common/network';
import { DisposableStore } from 'vs/base/common/lifecycle'; import { DisposableStore } from 'vs/base/common/lifecycle';
import { IStaticExtensionsService } from 'vs/workbench/services/extensions/common/staticExtensions'; import { IStaticExtensionsService } from 'vs/workbench/services/extensions/common/staticExtensions';
import { DeltaExtensionsResult } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry'; import { DeltaExtensionsResult } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry';
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
export class ExtensionService extends AbstractExtensionService implements IExtensionService { export class ExtensionService extends AbstractExtensionService implements IExtensionService {
...@@ -42,6 +43,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten ...@@ -42,6 +43,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
@IWorkbenchExtensionEnablementService extensionEnablementService: IWorkbenchExtensionEnablementService, @IWorkbenchExtensionEnablementService extensionEnablementService: IWorkbenchExtensionEnablementService,
@IFileService fileService: IFileService, @IFileService fileService: IFileService,
@IProductService productService: IProductService, @IProductService productService: IProductService,
@IRemoteAuthorityResolverService private readonly _remoteAuthorityResolverService: IRemoteAuthorityResolverService,
@IRemoteAgentService private readonly _remoteAgentService: IRemoteAgentService, @IRemoteAgentService private readonly _remoteAgentService: IRemoteAgentService,
@IConfigurationService private readonly _configService: IConfigurationService, @IConfigurationService private readonly _configService: IConfigurationService,
@IStaticExtensionsService private readonly _staticExtensions: IStaticExtensionsService, @IStaticExtensionsService private readonly _staticExtensions: IStaticExtensionsService,
...@@ -74,10 +76,18 @@ export class ExtensionService extends AbstractExtensionService implements IExten ...@@ -74,10 +76,18 @@ export class ExtensionService extends AbstractExtensionService implements IExten
private _createProvider(remoteAuthority: string): IInitDataProvider { private _createProvider(remoteAuthority: string): IInitDataProvider {
return { return {
remoteAuthority: remoteAuthority, remoteAuthority: remoteAuthority,
getInitData: () => { getInitData: async () => {
return this.whenInstalledExtensionsRegistered().then(() => { await this.whenInstalledExtensionsRegistered();
return this._remoteExtensionsEnvironmentData!; const resolverResult = await this._remoteAuthorityResolverService.resolveAuthority(remoteAuthority);
}); const remoteEnvironment = this._remoteExtensionsEnvironmentData!;
return {
connectionData: {
host: resolverResult.authority.host,
port: resolverResult.authority.port,
connectionToken: remoteEnvironment.connectionToken
},
remoteEnvironment: remoteEnvironment
};
} }
}; };
} }
......
...@@ -160,6 +160,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter { ...@@ -160,6 +160,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter {
autoStart: this._autoStart, autoStart: this._autoStart,
remote: { remote: {
authority: this._environmentService.configuration.remoteAuthority, authority: this._environmentService.configuration.remoteAuthority,
connectionData: undefined,
isRemote: false isRemote: false
}, },
uiKind: platform.isWeb ? UIKind.Web : UIKind.Desktop uiKind: platform.isWeb ? UIKind.Web : UIKind.Desktop
......
...@@ -11,7 +11,7 @@ import { ILogService } from 'vs/platform/log/common/log'; ...@@ -11,7 +11,7 @@ import { ILogService } from 'vs/platform/log/common/log';
import { connectRemoteAgentExtensionHost, IRemoteExtensionHostStartParams, IConnectionOptions, ISocketFactory } from 'vs/platform/remote/common/remoteAgentConnection'; import { connectRemoteAgentExtensionHost, IRemoteExtensionHostStartParams, IConnectionOptions, ISocketFactory } from 'vs/platform/remote/common/remoteAgentConnection';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
import { IInitData, UIKind } from 'vs/workbench/api/common/extHost.protocol'; import { IInitData, UIKind, IRemoteConnectionData } from 'vs/workbench/api/common/extHost.protocol';
import { MessageType, createMessageOfType, isMessageOfType } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; import { MessageType, createMessageOfType, isMessageOfType } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
import { IExtensionHostStarter, ExtensionHostLogFileName } from 'vs/workbench/services/extensions/common/extensions'; import { IExtensionHostStarter, ExtensionHostLogFileName } from 'vs/workbench/services/extensions/common/extensions';
import { parseExtensionDevOptions } from 'vs/workbench/services/extensions/common/extensionDevOptions'; import { parseExtensionDevOptions } from 'vs/workbench/services/extensions/common/extensionDevOptions';
...@@ -33,9 +33,14 @@ import { Registry } from 'vs/platform/registry/common/platform'; ...@@ -33,9 +33,14 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output'; import { IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
export interface IRemoteInitData {
readonly connectionData: IRemoteConnectionData;
readonly remoteEnvironment: IRemoteAgentEnvironment;
}
export interface IInitDataProvider { export interface IInitDataProvider {
readonly remoteAuthority: string; readonly remoteAuthority: string;
getInitData(): Promise<IRemoteAgentEnvironment>; getInitData(): Promise<IRemoteInitData>;
} }
export class RemoteExtensionHostClient extends Disposable implements IExtensionHostStarter { export class RemoteExtensionHostClient extends Disposable implements IExtensionHostStarter {
...@@ -190,26 +195,27 @@ export class RemoteExtensionHostClient extends Disposable implements IExtensionH ...@@ -190,26 +195,27 @@ export class RemoteExtensionHostClient extends Disposable implements IExtensionH
} }
private _createExtHostInitData(isExtensionDevelopmentDebug: boolean): Promise<IInitData> { private _createExtHostInitData(isExtensionDevelopmentDebug: boolean): Promise<IInitData> {
return Promise.all([this._allExtensions, this._telemetryService.getTelemetryInfo(), this._initDataProvider.getInitData()]).then(([allExtensions, telemetryInfo, remoteExtensionHostData]) => { return Promise.all([this._allExtensions, this._telemetryService.getTelemetryInfo(), this._initDataProvider.getInitData()]).then(([allExtensions, telemetryInfo, remoteInitData]) => {
// Collect all identifiers for extension ids which can be considered "resolved" // Collect all identifiers for extension ids which can be considered "resolved"
const resolvedExtensions = allExtensions.filter(extension => !extension.main).map(extension => extension.identifier); const resolvedExtensions = allExtensions.filter(extension => !extension.main).map(extension => extension.identifier);
const hostExtensions = allExtensions.filter(extension => extension.main && extension.api === 'none').map(extension => extension.identifier); const hostExtensions = allExtensions.filter(extension => extension.main && extension.api === 'none').map(extension => extension.identifier);
const workspace = this._contextService.getWorkspace(); const workspace = this._contextService.getWorkspace();
const remoteEnv = remoteInitData.remoteEnvironment;
const r: IInitData = { const r: IInitData = {
commit: this._productService.commit, commit: this._productService.commit,
version: this._productService.version, version: this._productService.version,
parentPid: remoteExtensionHostData.pid, parentPid: remoteEnv.pid,
environment: { environment: {
isExtensionDevelopmentDebug, isExtensionDevelopmentDebug,
appRoot: remoteExtensionHostData.appRoot, appRoot: remoteEnv.appRoot,
appSettingsHome: remoteExtensionHostData.appSettingsHome, appSettingsHome: remoteEnv.appSettingsHome,
appName: this._productService.nameLong, appName: this._productService.nameLong,
appUriScheme: this._productService.urlProtocol, appUriScheme: this._productService.urlProtocol,
appLanguage: platform.language, appLanguage: platform.language,
extensionDevelopmentLocationURI: this._environmentService.extensionDevelopmentLocationURI, extensionDevelopmentLocationURI: this._environmentService.extensionDevelopmentLocationURI,
extensionTestsLocationURI: this._environmentService.extensionTestsLocationURI, extensionTestsLocationURI: this._environmentService.extensionTestsLocationURI,
globalStorageHome: remoteExtensionHostData.globalStorageHome, globalStorageHome: remoteEnv.globalStorageHome,
userHome: remoteExtensionHostData.userHome, userHome: remoteEnv.userHome,
webviewResourceRoot: this._environmentService.webviewResourceRoot, webviewResourceRoot: this._environmentService.webviewResourceRoot,
webviewCspSource: this._environmentService.webviewCspSource, webviewCspSource: this._environmentService.webviewCspSource,
}, },
...@@ -220,15 +226,16 @@ export class RemoteExtensionHostClient extends Disposable implements IExtensionH ...@@ -220,15 +226,16 @@ export class RemoteExtensionHostClient extends Disposable implements IExtensionH
}, },
remote: { remote: {
isRemote: true, isRemote: true,
authority: this._initDataProvider.remoteAuthority authority: this._initDataProvider.remoteAuthority,
connectionData: remoteInitData.connectionData
}, },
resolvedExtensions: resolvedExtensions, resolvedExtensions: resolvedExtensions,
hostExtensions: hostExtensions, hostExtensions: hostExtensions,
extensions: remoteExtensionHostData.extensions, extensions: remoteEnv.extensions,
telemetryInfo, telemetryInfo,
logLevel: this._logService.getLevel(), logLevel: this._logService.getLevel(),
logsLocation: remoteExtensionHostData.extensionHostLogsPath, logsLocation: remoteEnv.extensionHostLogsPath,
logFile: joinPath(remoteExtensionHostData.extensionHostLogsPath, `${ExtensionHostLogFileName}.log`), logFile: joinPath(remoteEnv.extensionHostLogsPath, `${ExtensionHostLogFileName}.log`),
autoStart: true, autoStart: true,
uiKind: platform.isWeb ? UIKind.Web : UIKind.Desktop uiKind: platform.isWeb ? UIKind.Web : UIKind.Desktop
}; };
......
...@@ -440,6 +440,7 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter { ...@@ -440,6 +440,7 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
}, },
remote: { remote: {
authority: this._environmentService.configuration.remoteAuthority, authority: this._environmentService.configuration.remoteAuthority,
connectionData: undefined,
isRemote: false isRemote: false
}, },
resolvedExtensions: [], resolvedExtensions: [],
......
...@@ -52,7 +52,8 @@ class DeltaExtensionsQueueItem { ...@@ -52,7 +52,8 @@ class DeltaExtensionsQueueItem {
export class ExtensionService extends AbstractExtensionService implements IExtensionService { export class ExtensionService extends AbstractExtensionService implements IExtensionService {
private readonly _remoteExtensionsEnvironmentData: Map<string, IRemoteAgentEnvironment>; private readonly _remoteEnvironment: Map<string, IRemoteAgentEnvironment>;
private readonly _remoteResolvedAuthority: Map<string, ResolverResult>;
private readonly _extensionScanner: CachedExtensionScanner; private readonly _extensionScanner: CachedExtensionScanner;
private _deltaExtensionsQueue: DeltaExtensionsQueueItem[]; private _deltaExtensionsQueue: DeltaExtensionsQueueItem[];
...@@ -95,7 +96,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten ...@@ -95,7 +96,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten
}]); }]);
} }
this._remoteExtensionsEnvironmentData = new Map<string, IRemoteAgentEnvironment>(); this._remoteEnvironment = new Map<string, IRemoteAgentEnvironment>();
this._remoteResolvedAuthority = new Map<string, ResolverResult>();
this._extensionScanner = instantiationService.createInstance(CachedExtensionScanner); this._extensionScanner = instantiationService.createInstance(CachedExtensionScanner);
this._deltaExtensionsQueue = []; this._deltaExtensionsQueue = [];
...@@ -344,10 +346,18 @@ export class ExtensionService extends AbstractExtensionService implements IExten ...@@ -344,10 +346,18 @@ export class ExtensionService extends AbstractExtensionService implements IExten
private _createProvider(remoteAuthority: string): IInitDataProvider { private _createProvider(remoteAuthority: string): IInitDataProvider {
return { return {
remoteAuthority: remoteAuthority, remoteAuthority: remoteAuthority,
getInitData: () => { getInitData: async () => {
return this.whenInstalledExtensionsRegistered().then(() => { await this.whenInstalledExtensionsRegistered();
return this._remoteExtensionsEnvironmentData.get(remoteAuthority)!; const remoteEnvironment = this._remoteEnvironment.get(remoteAuthority)!;
}); const resolvedAuthority = this._remoteResolvedAuthority.get(remoteAuthority)!.authority;
return {
connectionData: {
host: resolvedAuthority.host,
port: resolvedAuthority.port,
connectionToken: remoteEnvironment.connectionToken
},
remoteEnvironment: remoteEnvironment
};
} }
}; };
} }
...@@ -547,7 +557,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten ...@@ -547,7 +557,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten
remoteEnv.extensions = remoteEnv.extensions.filter(ext => runningLocation.get(ExtensionIdentifier.toKey(ext.identifier)) === RunningLocation.Remote); remoteEnv.extensions = remoteEnv.extensions.filter(ext => runningLocation.get(ExtensionIdentifier.toKey(ext.identifier)) === RunningLocation.Remote);
// save for remote extension's init data // save for remote extension's init data
this._remoteExtensionsEnvironmentData.set(remoteAuthority, remoteEnv); this._remoteEnvironment.set(remoteAuthority, remoteEnv);
this._remoteResolvedAuthority.set(remoteAuthority, resolvedAuthority);
await this._startLocalExtensionHost(extensionHost, remoteEnv.extensions.concat(localExtensions), localExtensions.map(extension => extension.identifier)); await this._startLocalExtensionHost(extensionHost, remoteEnv.extensions.concat(localExtensions), localExtensions.map(extension => extension.identifier));
} else { } else {
......
...@@ -144,7 +144,7 @@ suite('ExtHostSearch', () => { ...@@ -144,7 +144,7 @@ suite('ExtHostSearch', () => {
constructor() { constructor() {
super( super(
rpcProtocol, rpcProtocol,
new class extends mock<IExtHostInitDataService>() { remote = { isRemote: false, authority: undefined }; }, new class extends mock<IExtHostInitDataService>() { remote = { isRemote: false, authority: undefined, connectionData: undefined }; },
new URITransformerService(null), new URITransformerService(null),
logService logService
); );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册