@@ -9,7 +9,7 @@ import { IWorkbenchExtensionEnablementService, IWebExtensionsScannerService } fr
99import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
1010import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
1111import { 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' ;
1313import { registerSingleton } from 'vs/platform/instantiation/common/extensions' ;
1414import { IFileService } from 'vs/platform/files/common/files' ;
1515import { IProductService } from 'vs/platform/product/common/productService' ;
@@ -28,6 +28,7 @@ import { IExtensionManagementService } from 'vs/platform/extensionManagement/com
2828import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace' ;
2929import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService' ;
3030import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit' ;
31+ import { IRemoteExplorerService } from '../../remote/common/remoteExplorerService' ;
3132
3233export 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