Skip to content

Commit b00afbc

Browse files
authored
Resolve remote authority to initialize tunnel API (#4105)
* Resolve remote authority to initialize tunnel API * Fix linting * Add comment
1 parent b32b4ed commit b00afbc

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

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

+21-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IWorkbenchExtensionEnablementService, IWebExtensionsScannerService } fr
99
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
1010
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1111
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
12-
import { IExtensionService, IExtensionHost } from 'vs/workbench/services/extensions/common/extensions';
12+
import { IExtensionService, IExtensionHost, ExtensionHostKind, } from 'vs/workbench/services/extensions/common/extensions';
1313
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
1414
import { IFileService } from 'vs/platform/files/common/files';
1515
import { IProductService } from 'vs/platform/product/common/productService';
@@ -28,6 +28,7 @@ import { IExtensionManagementService } from 'vs/platform/extensionManagement/com
2828
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
2929
import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService';
3030
import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit';
31+
import { IRemoteExplorerService } from '../../remote/common/remoteExplorerService';
3132

3233
export class ExtensionService extends AbstractExtensionService implements IExtensionService {
3334

@@ -51,6 +52,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
5152
@ILifecycleService private readonly _lifecycleService: ILifecycleService,
5253
@IExtensionManifestPropertiesService extensionManifestPropertiesService: IExtensionManifestPropertiesService,
5354
@IUserDataInitializationService private readonly _userDataInitializationService: IUserDataInitializationService,
55+
@IRemoteExplorerService private readonly _remoteExplorerService: IRemoteExplorerService
5456
) {
5557
super(
5658
new ExtensionRunningLocationClassifier(
@@ -75,7 +77,24 @@ export class ExtensionService extends AbstractExtensionService implements IExten
7577
// Initialize installed extensions first and do it only after workbench is ready
7678
this._lifecycleService.when(LifecyclePhase.Ready).then(async () => {
7779
await this._userDataInitializationService.initializeInstalledExtensions(this._instantiationService);
78-
this._initialize();
80+
this._initialize().then(async () => {
81+
try {
82+
// This enables the `vscode.workspace.registerRemoteAuthorityResolver` API to be executed.
83+
//
84+
// It's specifically scoped to the "coder-link" scheme at the moment to reduce external
85+
// dependency on forking VS Code functionality.
86+
//
87+
// The remote host doesn't resolve to an extension host like the API expects, but instead
88+
// we only utilize the tunnel functionality.
89+
const extHost = this._getExtensionHostManager(ExtensionHostKind.Remote);
90+
const resolved = await extHost?.resolveAuthority('coder-link+web');
91+
if (resolved) {
92+
this._remoteExplorerService.setTunnelInformation(resolved.tunnelInformation);
93+
}
94+
} catch (ex) {
95+
this._logOrShowMessage(Severity.Error, nls.localize('link', "Failed to initialize remote Link authority: {0}", ex));
96+
}
97+
});
7998
});
8099

81100
this._initFetchFileSystem();

0 commit comments

Comments
 (0)