Skip to content

Commit 1927f9b

Browse files
committed
Add getters for connection data & events for changes
1 parent 1f3ba68 commit 1927f9b

13 files changed

Lines changed: 89 additions & 15 deletions

File tree

src/vs/platform/remote/browser/remoteAuthorityResolverService.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@
66
import { ResolvedAuthority, IRemoteAuthorityResolverService, ResolverResult, IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver';
77
import { RemoteAuthorities } from 'vs/base/common/network';
88
import { URI } from 'vs/base/common/uri';
9+
import { Emitter } from 'vs/base/common/event';
10+
import { Disposable } from 'vs/base/common/lifecycle';
911

10-
export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverService {
12+
export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService {
1113

1214
declare readonly _serviceBrand: undefined;
15+
16+
private readonly _onDidChangeConnectionData = this._register(new Emitter<void>());
17+
public readonly onDidChangeConnectionData = this._onDidChangeConnectionData.event;
18+
1319
private readonly _cache: Map<string, ResolverResult>;
1420
private readonly _connectionTokens: Map<string, string>;
1521

16-
constructor(
17-
resourceUriProvider: ((uri: URI) => URI) | undefined
18-
) {
22+
constructor(resourceUriProvider: ((uri: URI) => URI) | undefined) {
23+
super();
1924
this._cache = new Map<string, ResolverResult>();
2025
this._connectionTokens = new Map<string, string>();
2126
if (resourceUriProvider) {
@@ -28,6 +33,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
2833
const result = this._doResolveAuthority(authority);
2934
RemoteAuthorities.set(authority, result.authority.host, result.authority.port);
3035
this._cache.set(authority, result);
36+
this._onDidChangeConnectionData.fire();
3137
}
3238
return this._cache.get(authority)!;
3339
}
@@ -65,5 +71,6 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
6571
_setAuthorityConnectionToken(authority: string, connectionToken: string): void {
6672
this._connectionTokens.set(authority, connectionToken);
6773
RemoteAuthorities.setConnectionToken(authority, connectionToken);
74+
this._onDidChangeConnectionData.fire();
6875
}
6976
}

src/vs/platform/remote/common/remoteAuthorityResolver.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
7+
import { Event } from 'vs/base/common/event';
78

89
export const IRemoteAuthorityResolverService = createDecorator<IRemoteAuthorityResolverService>('remoteAuthorityResolverService');
910

@@ -85,6 +86,8 @@ export interface IRemoteAuthorityResolverService {
8586

8687
readonly _serviceBrand: undefined;
8788

89+
readonly onDidChangeConnectionData: Event<void>;
90+
8891
resolveAuthority(authority: string): Promise<ResolverResult>;
8992
getConnectionData(authority: string): IRemoteConnectionData | null;
9093

src/vs/platform/remote/electron-browser/remoteAuthorityResolverService.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import { ResolvedAuthority, IRemoteAuthorityResolverService, ResolverResult, ResolvedOptions, IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver';
77
import * as errors from 'vs/base/common/errors';
88
import { RemoteAuthorities } from 'vs/base/common/network';
9+
import { Disposable } from 'vs/base/common/lifecycle';
10+
import { Emitter } from 'vs/base/common/event';
911

1012
class PendingResolveAuthorityRequest {
1113

@@ -29,14 +31,18 @@ class PendingResolveAuthorityRequest {
2931
}
3032
}
3133

32-
export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverService {
34+
export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService {
3335

3436
declare readonly _serviceBrand: undefined;
3537

38+
private readonly _onDidChangeConnectionData = this._register(new Emitter<void>());
39+
public readonly onDidChangeConnectionData = this._onDidChangeConnectionData.event;
40+
3641
private readonly _resolveAuthorityRequests: Map<string, PendingResolveAuthorityRequest>;
3742
private readonly _connectionTokens: Map<string, string>;
3843

3944
constructor() {
45+
super();
4046
this._resolveAuthorityRequests = new Map<string, PendingResolveAuthorityRequest>();
4147
this._connectionTokens = new Map<string, string>();
4248
}
@@ -82,6 +88,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
8288
const request = this._resolveAuthorityRequests.get(resolvedAuthority.authority)!;
8389
RemoteAuthorities.set(resolvedAuthority.authority, resolvedAuthority.host, resolvedAuthority.port);
8490
request.resolve({ authority: resolvedAuthority, options });
91+
this._onDidChangeConnectionData.fire();
8592
}
8693
}
8794

@@ -95,5 +102,6 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
95102
_setAuthorityConnectionToken(authority: string, connectionToken: string): void {
96103
this._connectionTokens.set(authority, connectionToken);
97104
RemoteAuthorities.setConnectionToken(authority, connectionToken);
105+
this._onDidChangeConnectionData.fire();
98106
}
99107
}

src/vs/workbench/api/browser/extensionHost.contribution.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import './mainThreadMessageService';
4141
import './mainThreadOutputService';
4242
import './mainThreadProgress';
4343
import './mainThreadQuickOpen';
44+
import './mainThreadRemoteConnectionData';
4445
import './mainThreadSaveParticipant';
4546
import './mainThreadSCM';
4647
import './mainThreadSearch';
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { extHostCustomer } from 'vs/workbench/api/common/extHostCustomers';
7+
import { ExtHostContext, IExtHostContext, ExtHostExtensionServiceShape } from '../common/extHost.protocol';
8+
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
9+
import { Disposable } from 'vs/base/common/lifecycle';
10+
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
11+
12+
@extHostCustomer
13+
export class MainThreadRemoteConnectionData extends Disposable {
14+
15+
private readonly _proxy: ExtHostExtensionServiceShape;
16+
17+
constructor(
18+
extHostContext: IExtHostContext,
19+
@IWorkbenchEnvironmentService protected readonly _environmentService: IWorkbenchEnvironmentService,
20+
@IRemoteAuthorityResolverService remoteAuthorityResolverService: IRemoteAuthorityResolverService
21+
) {
22+
super();
23+
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostExtensionService);
24+
25+
const remoteAuthority = this._environmentService.configuration.remoteAuthority;
26+
if (remoteAuthority) {
27+
this._register(remoteAuthorityResolverService.onDidChangeConnectionData(() => {
28+
const connectionData = remoteAuthorityResolverService.getConnectionData(remoteAuthority);
29+
if (connectionData) {
30+
this._proxy.$updateRemoteConnectionData(connectionData);
31+
}
32+
}));
33+
}
34+
}
35+
}

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export interface IInitData {
9999
logsLocation: URI;
100100
logFile: URI;
101101
autoStart: boolean;
102-
remote: { isRemote: boolean; authority: string | undefined; connectionData: IRemoteConnectionData | undefined; };
102+
remote: { isRemote: boolean; authority: string | undefined; connectionData: IRemoteConnectionData | null; };
103103
uiKind: UIKind;
104104
}
105105

@@ -1046,6 +1046,7 @@ export interface ExtHostExtensionServiceShape {
10461046
$activateByEvent(activationEvent: string): Promise<void>;
10471047
$activate(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<boolean>;
10481048
$setRemoteEnvironment(env: { [key: string]: string | null; }): Promise<void>;
1049+
$updateRemoteConnectionData(connectionData: IRemoteConnectionData): Promise<void>;
10491050

10501051
$deltaExtensions(toAdd: IExtensionDescription[], toRemove: ExtensionIdentifier[]): Promise<void>;
10511052

src/vs/workbench/api/common/extHostExtensionService.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as nls from 'vs/nls';
77
import * as path from 'vs/base/common/path';
88
import { originalFSPath, joinPath } from 'vs/base/common/resources';
99
import { Barrier, timeout } from 'vs/base/common/async';
10-
import { dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
10+
import { dispose, toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle';
1111
import { TernarySearchTree } from 'vs/base/common/map';
1212
import { URI } from 'vs/base/common/uri';
1313
import { ILogService } from 'vs/platform/log/common/log';
@@ -26,14 +26,15 @@ import { Schemas } from 'vs/base/common/network';
2626
import { VSBuffer } from 'vs/base/common/buffer';
2727
import { ExtensionMemento } from 'vs/workbench/api/common/extHostMemento';
2828
import { RemoteAuthorityResolverError, ExtensionMode } from 'vs/workbench/api/common/extHostTypes';
29-
import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver';
29+
import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode, IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver';
3030
import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation';
3131
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
3232
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
3333
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
3434
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
3535
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
3636
import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService';
37+
import { Emitter, Event } from 'vs/base/common/event';
3738

3839
interface ITestRunner {
3940
/** Old test runner API, as exported from `vscode/lib/testrunner` */
@@ -65,12 +66,15 @@ type TelemetryActivationEventFragment = {
6566
reasonId: { classification: 'PublicNonPersonalData', purpose: 'FeatureInsight' };
6667
};
6768

68-
export abstract class AbstractExtHostExtensionService implements ExtHostExtensionServiceShape {
69+
export abstract class AbstractExtHostExtensionService extends Disposable implements ExtHostExtensionServiceShape {
6970

7071
readonly _serviceBrand: undefined;
7172

7273
private static readonly WORKSPACE_CONTAINS_TIMEOUT = 7000;
7374

75+
private readonly _onDidChangeRemoteConnectionData = this._register(new Emitter<void>());
76+
public readonly onDidChangeRemoteConnectionData = this._onDidChangeRemoteConnectionData.event;
77+
7478
protected readonly _hostUtils: IHostUtils;
7579
protected readonly _initData: IInitData;
7680
protected readonly _extHostContext: IExtHostRpcService;
@@ -97,6 +101,7 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
97101
private readonly _resolvers: { [authorityPrefix: string]: vscode.RemoteAuthorityResolver; };
98102

99103
private _started: boolean;
104+
private _remoteConnectionData: IRemoteConnectionData | null;
100105

101106
private readonly _disposables: DisposableStore;
102107

@@ -112,6 +117,7 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
112117
@IExtHostTunnelService extHostTunnelService: IExtHostTunnelService,
113118
@IExtHostTerminalService extHostTerminalService: IExtHostTerminalService
114119
) {
120+
super();
115121
this._hostUtils = hostUtils;
116122
this._extHostContext = extHostContext;
117123
this._initData = initData;
@@ -164,6 +170,11 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
164170
this._extensionPathIndex = null;
165171
this._resolvers = Object.create(null);
166172
this._started = false;
173+
this._remoteConnectionData = this._initData.remote.connectionData;
174+
}
175+
176+
public getRemoteConnectionData(): IRemoteConnectionData | null {
177+
return this._remoteConnectionData;
167178
}
168179

169180
public async initialize(): Promise<void> {
@@ -793,6 +804,11 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
793804
return buff;
794805
}
795806

807+
public async $updateRemoteConnectionData(connectionData: IRemoteConnectionData): Promise<void> {
808+
this._remoteConnectionData = connectionData;
809+
this._onDidChangeRemoteConnectionData.fire();
810+
}
811+
796812
public abstract async $setRemoteEnvironment(env: { [key: string]: string | null }): Promise<void>;
797813
}
798814

@@ -836,4 +852,7 @@ export interface IExtHostExtensionService extends AbstractExtHostExtensionServic
836852
getExtensionRegistry(): Promise<ExtensionDescriptionRegistry>;
837853
getExtensionPathIndex(): Promise<TernarySearchTree<string, IExtensionDescription>>;
838854
registerRemoteAuthorityResolver(authorityPrefix: string, resolver: vscode.RemoteAuthorityResolver): vscode.Disposable;
855+
856+
onDidChangeRemoteConnectionData: Event<void>;
857+
getRemoteConnectionData(): IRemoteConnectionData | null;
839858
}

src/vs/workbench/services/extensions/browser/extensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
7878
remoteAuthority: remoteAuthority,
7979
getInitData: async () => {
8080
await this.whenInstalledExtensionsRegistered();
81-
const connectionData = this._remoteAuthorityResolverService.getConnectionData(remoteAuthority) || undefined;
81+
const connectionData = this._remoteAuthorityResolverService.getConnectionData(remoteAuthority);
8282
const remoteEnvironment = this._remoteExtensionsEnvironmentData!;
8383
return { connectionData, remoteEnvironment };
8484
}

src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter {
160160
autoStart: this._autoStart,
161161
remote: {
162162
authority: this._environmentService.configuration.remoteAuthority,
163-
connectionData: undefined,
163+
connectionData: null,
164164
isRemote: false
165165
},
166166
uiKind: platform.isWeb ? UIKind.Web : UIKind.Desktop

src/vs/workbench/services/extensions/common/remoteExtensionHostClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output
3434
import { localize } from 'vs/nls';
3535

3636
export interface IRemoteInitData {
37-
readonly connectionData: IRemoteConnectionData | undefined;
37+
readonly connectionData: IRemoteConnectionData | null;
3838
readonly remoteEnvironment: IRemoteAgentEnvironment;
3939
}
4040

0 commit comments

Comments
 (0)