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

Add connectionData to IInitData.remote

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