mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 20:13:32 +01:00
Get the proxy to the extension host via IExtHostContext to avoid depending on extHost.protocol.ts (#141003)
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
|
||||
import { SerializedError } from 'vs/base/common/errors';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
|
||||
import { MainContext, MainThreadExtensionServiceShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { IExtensionService, ExtensionHostKind, MissingExtensionDependency, ExtensionActivationReason } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { extHostNamedCustomer, IExtHostContext, IInternalExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
|
||||
import { ExtHostContext, ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { IExtensionService, ExtensionHostKind, MissingExtensionDependency, ExtensionActivationReason, ActivationKind, IInternalExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { localize } from 'vs/nls';
|
||||
@@ -21,11 +21,16 @@ import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensio
|
||||
import { ITimerService } from 'vs/workbench/services/timer/browser/timerService';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { IExtensionHostProxy, IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy';
|
||||
import { VSBuffer } from 'vs/base/common/buffer';
|
||||
import { IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
|
||||
@extHostNamedCustomer(MainContext.MainThreadExtensionService)
|
||||
export class MainThreadExtensionService implements MainThreadExtensionServiceShape {
|
||||
|
||||
private readonly _extensionHostKind: ExtensionHostKind;
|
||||
private readonly _internalExtensionService: IInternalExtensionService;
|
||||
|
||||
constructor(
|
||||
extHostContext: IExtHostContext,
|
||||
@@ -39,26 +44,30 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha
|
||||
@IWorkbenchEnvironmentService protected readonly _environmentService: IWorkbenchEnvironmentService,
|
||||
) {
|
||||
this._extensionHostKind = extHostContext.extensionHostKind;
|
||||
this._internalExtensionService = (<IInternalExtHostContext>extHostContext).internalExtensionService;
|
||||
(<IInternalExtHostContext>extHostContext)._setExtensionHostProxy(
|
||||
new ExtensionHostProxy(extHostContext.getProxy(ExtHostContext.ExtHostExtensionService))
|
||||
);
|
||||
}
|
||||
|
||||
public dispose(): void {
|
||||
}
|
||||
|
||||
$activateExtension(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<void> {
|
||||
return this._extensionService._activateById(extensionId, reason);
|
||||
return this._internalExtensionService._activateById(extensionId, reason);
|
||||
}
|
||||
async $onWillActivateExtension(extensionId: ExtensionIdentifier): Promise<void> {
|
||||
this._extensionService._onWillActivateExtension(extensionId);
|
||||
this._internalExtensionService._onWillActivateExtension(extensionId);
|
||||
}
|
||||
$onDidActivateExtension(extensionId: ExtensionIdentifier, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationReason: ExtensionActivationReason): void {
|
||||
this._extensionService._onDidActivateExtension(extensionId, codeLoadingTime, activateCallTime, activateResolvedTime, activationReason);
|
||||
this._internalExtensionService._onDidActivateExtension(extensionId, codeLoadingTime, activateCallTime, activateResolvedTime, activationReason);
|
||||
}
|
||||
$onExtensionRuntimeError(extensionId: ExtensionIdentifier, data: SerializedError): void {
|
||||
const error = new Error();
|
||||
error.name = data.name;
|
||||
error.message = data.message;
|
||||
error.stack = data.stack;
|
||||
this._extensionService._onExtensionRuntimeError(extensionId, error);
|
||||
this._internalExtensionService._onExtensionRuntimeError(extensionId, error);
|
||||
console.error(`[${extensionId}]${error.message}`);
|
||||
console.error(error.stack);
|
||||
}
|
||||
@@ -68,7 +77,7 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha
|
||||
error.message = data.message;
|
||||
error.stack = data.stack;
|
||||
|
||||
this._extensionService._onDidActivateExtensionError(extensionId, error);
|
||||
this._internalExtensionService._onDidActivateExtensionError(extensionId, error);
|
||||
|
||||
if (missingExtensionDependency) {
|
||||
const extension = await this._extensionService.getExtension(extensionId.value);
|
||||
@@ -171,3 +180,50 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ExtensionHostProxy implements IExtensionHostProxy {
|
||||
constructor(
|
||||
private readonly _actual: ExtHostExtensionServiceShape
|
||||
) { }
|
||||
|
||||
resolveAuthority(remoteAuthority: string, resolveAttempt: number): Promise<IResolveAuthorityResult> {
|
||||
return this._actual.$resolveAuthority(remoteAuthority, resolveAttempt);
|
||||
}
|
||||
async getCanonicalURI(remoteAuthority: string, uri: URI): Promise<URI> {
|
||||
const uriComponents = await this._actual.$getCanonicalURI(remoteAuthority, uri);
|
||||
return URI.revive(uriComponents);
|
||||
}
|
||||
startExtensionHost(enabledExtensionIds: ExtensionIdentifier[]): Promise<void> {
|
||||
return this._actual.$startExtensionHost(enabledExtensionIds);
|
||||
}
|
||||
extensionTestsExecute(): Promise<number> {
|
||||
return this._actual.$extensionTestsExecute();
|
||||
}
|
||||
extensionTestsExit(code: number): Promise<void> {
|
||||
return this._actual.$extensionTestsExit(code);
|
||||
}
|
||||
activateByEvent(activationEvent: string, activationKind: ActivationKind): Promise<void> {
|
||||
return this._actual.$activateByEvent(activationEvent, activationKind);
|
||||
}
|
||||
activate(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<boolean> {
|
||||
return this._actual.$activate(extensionId, reason);
|
||||
}
|
||||
setRemoteEnvironment(env: { [key: string]: string | null; }): Promise<void> {
|
||||
return this._actual.$setRemoteEnvironment(env);
|
||||
}
|
||||
updateRemoteConnectionData(connectionData: IRemoteConnectionData): Promise<void> {
|
||||
return this._actual.$updateRemoteConnectionData(connectionData);
|
||||
}
|
||||
deltaExtensions(toAdd: IExtensionDescription[], toRemove: ExtensionIdentifier[]): Promise<void> {
|
||||
return this._actual.$deltaExtensions(toAdd, toRemove);
|
||||
}
|
||||
test_latency(n: number): Promise<number> {
|
||||
return this._actual.$test_latency(n);
|
||||
}
|
||||
test_up(b: VSBuffer): Promise<number> {
|
||||
return this._actual.$test_up(b);
|
||||
}
|
||||
test_down(size: number): Promise<VSBuffer> {
|
||||
return this._actual.$test_down(size);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import { ILoggerOptions, LogLevel } from 'vs/platform/log/common/log';
|
||||
import { IMarkerData } from 'vs/platform/markers/common/markers';
|
||||
import { IProgressOptions, IProgressStep } from 'vs/platform/progress/common/progress';
|
||||
import * as quickInput from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IRemoteConnectionData, RemoteAuthorityResolverErrorCode, ResolverResult, TunnelDescription } from 'vs/platform/remote/common/remoteAuthorityResolver';
|
||||
import { IRemoteConnectionData, TunnelDescription } from 'vs/platform/remote/common/remoteAuthorityResolver';
|
||||
import { ProvidedPortAttributes, TunnelCreationOptions, TunnelOptions, TunnelProviderFeatures } from 'vs/platform/tunnel/common/tunnel';
|
||||
import { ClassifiedEvent, GDPRClassification, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings';
|
||||
import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
|
||||
@@ -70,6 +70,7 @@ import * as search from 'vs/workbench/services/search/common/search';
|
||||
import { IWorkspaceSymbol } from 'vs/workbench/contrib/search/common/search';
|
||||
import { ILineChange } from 'vs/editor/common/diff/diffComputer';
|
||||
import { IStaticWorkspaceData } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
|
||||
import { IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy';
|
||||
|
||||
export interface IWorkspaceData extends IStaticWorkspaceData {
|
||||
folders: { uri: UriComponents, name: string, index: number; }[];
|
||||
@@ -1314,22 +1315,6 @@ export interface ExtHostSearchShape {
|
||||
$clearCache(cacheKey: string): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IResolveAuthorityErrorResult {
|
||||
type: 'error';
|
||||
error: {
|
||||
message: string | undefined;
|
||||
code: RemoteAuthorityResolverErrorCode;
|
||||
detail: any;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IResolveAuthorityOKResult {
|
||||
type: 'ok';
|
||||
value: ResolverResult;
|
||||
}
|
||||
|
||||
export type IResolveAuthorityResult = IResolveAuthorityErrorResult | IResolveAuthorityOKResult;
|
||||
|
||||
export interface ExtHostExtensionServiceShape {
|
||||
$resolveAuthority(remoteAuthority: string, resolveAttempt: number): Promise<IResolveAuthorityResult>;
|
||||
$getCanonicalURI(remoteAuthority: string, uri: UriComponents): Promise<UriComponents>;
|
||||
|
||||
@@ -12,7 +12,7 @@ import { dispose, toDisposable, Disposable } from 'vs/base/common/lifecycle';
|
||||
import { TernarySearchTree } from 'vs/base/common/map';
|
||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape, MainThreadTelemetryShape, MainThreadWorkspaceShape, IResolveAuthorityResult } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ExtHostExtensionServiceShape, MainContext, MainThreadExtensionServiceShape, MainThreadTelemetryShape, MainThreadWorkspaceShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { IExtensionHostInitData } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
|
||||
import { ExtHostConfiguration, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration';
|
||||
import { ActivatedExtension, EmptyExtension, ExtensionActivationTimes, ExtensionActivationTimesBuilder, ExtensionsActivator, IExtensionAPI, IExtensionModule, HostExtension, ExtensionActivationTimesFragment } from 'vs/workbench/api/common/extHostExtensionActivator';
|
||||
@@ -39,6 +39,7 @@ import { IExtensionActivationHost, checkActivateWorkspaceContainsExtension } fro
|
||||
import { ExtHostSecretState, IExtHostSecretState } from 'vs/workbench/api/common/exHostSecretState';
|
||||
import { ExtensionSecrets } from 'vs/workbench/api/common/extHostSecrets';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy';
|
||||
|
||||
interface ITestRunner {
|
||||
/** Old test runner API, as exported from `vscode/lib/testrunner` */
|
||||
|
||||
Reference in New Issue
Block a user