diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts index d1dacd0dc6184..e80687f73e29d 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -1752,6 +1752,7 @@ export class DisableGloballyAction extends ExtensionAction { if (this.extension && this.extension.local && !this.extension.isWorkspaceScoped && this.extensionService.extensions.some(e => areSameExtensions({ id: e.identifier.value, uuid: e.uuid }, this.extension!.identifier))) { this.enabled = this.extension.state === ExtensionState.Installed && (this.extension.enablementState === EnablementState.EnabledGlobally || this.extension.enablementState === EnablementState.EnabledWorkspace) + && !this.extensionEnablementService.isDisabledGlobally(this.extension.local) && this.extensionEnablementService.canChangeEnablement(this.extension.local); } } diff --git a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts index 14745b971ecb0..c9a2bc80df17f 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts @@ -963,6 +963,27 @@ suite('ExtensionsActions', () => { }); }); + test('Test DisableGloballyAction when extension is disabled globally and enabled for workspace', async () => { + const local = aLocalExtension('a'); + const enablementService = instantiationService.get(IWorkbenchExtensionEnablementService); + await enablementService.setEnablement([local], EnablementState.DisabledGlobally); + await enablementService.setEnablement([local], EnablementState.EnabledWorkspace); + + instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]); + instantiationService.stub(IExtensionService, { + extensions: [toExtensionDescription(local)], + onDidChangeExtensions: Event.None, + whenInstalledExtensionsRegistered: () => Promise.resolve(true) + }); + + return instantiationService.get(IExtensionsWorkbenchService).queryLocal() + .then(extensions => { + const testObject: ExtensionsActions.DisableGloballyAction = disposables.add(instantiationService.createInstance(ExtensionsActions.DisableGloballyAction)); + testObject.extension = extensions[0]; + assert.ok(!testObject.enabled); + }); + }); + }); suite('ExtensionRuntimeStateAction', () => {