@@ -9,7 +9,7 @@ import { IWorkbenchExtensionEnablementService, IWebExtensionsScannerService } fr
9
9
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
10
10
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
11
11
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' ;
13
13
import { registerSingleton } from 'vs/platform/instantiation/common/extensions' ;
14
14
import { IFileService } from 'vs/platform/files/common/files' ;
15
15
import { IProductService } from 'vs/platform/product/common/productService' ;
@@ -28,6 +28,7 @@ import { IExtensionManagementService } from 'vs/platform/extensionManagement/com
28
28
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace' ;
29
29
import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService' ;
30
30
import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit' ;
31
+ import { IRemoteExplorerService } from '../../remote/common/remoteExplorerService' ;
31
32
32
33
export class ExtensionService extends AbstractExtensionService implements IExtensionService {
33
34
@@ -51,6 +52,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
51
52
@ILifecycleService private readonly _lifecycleService : ILifecycleService ,
52
53
@IExtensionManifestPropertiesService extensionManifestPropertiesService : IExtensionManifestPropertiesService ,
53
54
@IUserDataInitializationService private readonly _userDataInitializationService : IUserDataInitializationService ,
55
+ @IRemoteExplorerService private readonly _remoteExplorerService : IRemoteExplorerService
54
56
) {
55
57
super (
56
58
new ExtensionRunningLocationClassifier (
@@ -75,7 +77,24 @@ export class ExtensionService extends AbstractExtensionService implements IExten
75
77
// Initialize installed extensions first and do it only after workbench is ready
76
78
this . _lifecycleService . when ( LifecyclePhase . Ready ) . then ( async ( ) => {
77
79
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
+ } ) ;
79
98
} ) ;
80
99
81
100
this . _initFetchFileSystem ( ) ;
0 commit comments