override virtual workspace capability in web and enable web extensions
This commit is contained in:
parent
5278e78731
commit
8904d9f25b
|
@ -2111,21 +2111,27 @@ export class SystemDisabledWarningAction extends ExtensionAction {
|
|||
}
|
||||
|
||||
if (isVirtualWorkspace(this.contextService.getWorkspace())) {
|
||||
const virtualSupportType = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(this.extension.local.manifest);
|
||||
if (virtualSupportType !== true) {
|
||||
if (this.extension.enablementState === EnablementState.DisabledByVirtualWorkspace) {
|
||||
this.class = `${SystemDisabledWarningAction.INFO_CLASS}`;
|
||||
const details = getWorkpaceSupportTypeMessage(this.extension.local.manifest.capabilities?.virtualWorkspaces);
|
||||
this.tooltip = details || (virtualSupportType === 'limited' ?
|
||||
localize('extension limited because of virtual workspace', "This extension has limited features because the current workspace is virtual.") :
|
||||
localize('disabled because of virtual workspace', "This extension has been disabled because it does not support virtual workspaces."));
|
||||
this.tooltip = localize('disabled because of virtual workspace', "This extension has been disabled because it does not support virtual workspaces.");
|
||||
return;
|
||||
}
|
||||
|
||||
const virtualSupportType = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(this.extension.local.manifest);
|
||||
const details = getWorkpaceSupportTypeMessage(this.extension.local.manifest.capabilities?.virtualWorkspaces);
|
||||
if (virtualSupportType === 'limited' || details) {
|
||||
this.class = `${SystemDisabledWarningAction.INFO_CLASS}`;
|
||||
this.tooltip = localize('extension limited because of virtual workspace', "This extension has limited features because the current workspace is virtual.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.extension.enablementState === EnablementState.DisabledByExtensionDependency) {
|
||||
this.class = `${SystemDisabledWarningAction.WARNING_CLASS}`;
|
||||
this.tooltip = localize('extension disabled because of dependency', "This extension has been disabled because it depends on an extension that is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.extensionManagementServerService.localExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
||||
if (isLanguagePackExtension(this.extension.local.manifest)) {
|
||||
if (!this.extensionsWorkbenchService.installed.some(e => areSameExtensions(e.identifier, this.extension!.identifier) && e.server !== this.extension!.server)) {
|
||||
|
@ -2137,6 +2143,7 @@ export class SystemDisabledWarningAction extends ExtensionAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.extension.enablementState === EnablementState.DisabledByExtensionKind) {
|
||||
if (!this.extensionsWorkbenchService.installed.some(e => areSameExtensions(e.identifier, this.extension!.identifier) && e.server !== this.extension!.server)) {
|
||||
const server = this.extensionManagementServerService.localExtensionManagementServer === this.extension.server ? this.extensionManagementServerService.remoteExtensionManagementServer : this.extensionManagementServerService.localExtensionManagementServer;
|
||||
|
@ -2149,6 +2156,7 @@ export class SystemDisabledWarningAction extends ExtensionAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.extensionManagementServerService.localExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
||||
const runningExtension = this._runningExtensions.filter(e => areSameExtensions({ id: e.identifier.value, uuid: e.uuid }, this.extension!.identifier))[0];
|
||||
const runningExtensionServer = runningExtension ? this.extensionManagementServerService.getExtensionManagementServer(toExtension(runningExtension)) : null;
|
||||
|
@ -2167,6 +2175,7 @@ export class SystemDisabledWarningAction extends ExtensionAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.workspaceTrustService.workspaceTrustEnabled && !this.workspaceTrustService.isWorkpaceTrusted() && this.extension.enablementState === EnablementState.DisabledByTrustRequirement) {
|
||||
const untrustedSupportType = this.extensionManifestPropertiesService.getExtensionUntrustedWorkspaceSupportType(this.extension.local.manifest);
|
||||
const untrustedDetails = getWorkpaceSupportTypeMessage(this.extension.local.manifest.capabilities?.untrustedWorkspaces);
|
||||
|
|
|
@ -278,10 +278,22 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
|
|||
}
|
||||
|
||||
private _isDisabledByVirtualWorkspace(extension: IExtension): boolean {
|
||||
if (isVirtualWorkspace(this.contextService.getWorkspace())) {
|
||||
return this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(extension.manifest) === false;
|
||||
// Not a virtual workspace
|
||||
if (!isVirtualWorkspace(this.contextService.getWorkspace())) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
|
||||
// Supports virtual workspace
|
||||
if (this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(extension.manifest) !== false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Web extension from web extension management server
|
||||
if (this.extensionManagementServerService.getExtensionManagementServer(extension) === this.extensionManagementServerService.webExtensionManagementServer && this.extensionManifestPropertiesService.canExecuteOnWeb(extension.manifest)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private _isDisabledByExtensionKind(extension: IExtension): boolean {
|
||||
|
|
|
@ -505,6 +505,24 @@ suite('ExtensionEnablementService Test', () => {
|
|||
assert.deepStrictEqual(testObject.getEnablementState(extension), EnablementState.DisabledByVirtualWorkspace);
|
||||
});
|
||||
|
||||
test('test web extension from web extension management server and does not support vitrual workspace is enabled in virtual workspace', async () => {
|
||||
instantiationService.stub(IExtensionManagementServerService, anExtensionManagementServerService(null, anExtensionManagementServer('vscode-remote', instantiationService), anExtensionManagementServer('web', instantiationService)));
|
||||
const extension = aLocalExtension2('pub.a', { capabilities: { virtualWorkspaces: false }, browser: 'browser.js' }, { location: URI.file(`pub.a`).with({ scheme: 'web' }) });
|
||||
instantiationService.stub(IWorkspaceContextService, 'getWorkspace', <IWorkspace>{ folders: [{ uri: URI.file('worskapceA').with(({ scheme: 'virtual' })) }] });
|
||||
testObject = new TestExtensionEnablementService(instantiationService);
|
||||
assert.ok(testObject.isEnabled(extension));
|
||||
assert.deepStrictEqual(testObject.getEnablementState(extension), EnablementState.EnabledGlobally);
|
||||
});
|
||||
|
||||
test('test web extension from remote extension management server and does not support vitrual workspace is disabled in virtual workspace', async () => {
|
||||
instantiationService.stub(IExtensionManagementServerService, anExtensionManagementServerService(null, anExtensionManagementServer('vscode-remote', instantiationService), anExtensionManagementServer('web', instantiationService)));
|
||||
const extension = aLocalExtension2('pub.a', { capabilities: { virtualWorkspaces: false }, browser: 'browser.js' }, { location: URI.file(`pub.a`).with({ scheme: 'vscode-remote' }) });
|
||||
instantiationService.stub(IWorkspaceContextService, 'getWorkspace', <IWorkspace>{ folders: [{ uri: URI.file('worskapceA').with(({ scheme: 'virtual' })) }] });
|
||||
testObject = new TestExtensionEnablementService(instantiationService);
|
||||
assert.ok(!testObject.isEnabled(extension));
|
||||
assert.deepStrictEqual(testObject.getEnablementState(extension), EnablementState.DisabledByVirtualWorkspace);
|
||||
});
|
||||
|
||||
test('test canChangeEnablement return false when extension is disabled in virtual workspace', () => {
|
||||
const extension = aLocalExtension2('pub.a', { capabilities: { virtualWorkspaces: false } });
|
||||
instantiationService.stub(IWorkspaceContextService, 'getWorkspace', <IWorkspace>{ folders: [{ uri: URI.file('worskapceA').with(({ scheme: 'virtual' })) }] });
|
||||
|
|
Loading…
Reference in a new issue