Fix #15611
This commit is contained in:
parent
37b7c49ca6
commit
7fe4bc2afd
|
@ -8,13 +8,14 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||
import { distinct, coalesce } from 'vs/base/common/arrays';
|
||||
import Event, { Emitter } from 'vs/base/common/event';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IExtensionManagementService, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionManagementService, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { adoptToGalleryExtensionId, getIdAndVersionFromLocalExtensionId, areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||
|
||||
const DISABLED_EXTENSIONS_STORAGE_PATH = 'extensionsIdentifiers/disabled';
|
||||
const ENABLED_EXTENSIONS_STORAGE_PATH = 'extensionsIdentifiers/enabled';
|
||||
|
||||
export class ExtensionEnablementService implements IExtensionEnablementService {
|
||||
|
||||
|
@ -31,115 +32,216 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
|
|||
@IEnvironmentService private environmentService: IEnvironmentService,
|
||||
@IExtensionManagementService extensionManagementService: IExtensionManagementService
|
||||
) {
|
||||
extensionManagementService.onDidUninstallExtension(this.onDidUninstallExtension, this, this.disposables);
|
||||
extensionManagementService.onDidUninstallExtension(this._onDidUninstallExtension, this, this.disposables);
|
||||
}
|
||||
|
||||
private get hasWorkspace(): boolean {
|
||||
return this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY;
|
||||
}
|
||||
|
||||
getGloballyDisabledExtensions(): IExtensionIdentifier[] {
|
||||
return this.getDisabledExtensions(StorageScope.GLOBAL);
|
||||
getDisabledExtensions(): TPromise<IExtensionIdentifier[]> {
|
||||
|
||||
let result = this._getDisabledExtensions(StorageScope.GLOBAL);
|
||||
|
||||
if (this.hasWorkspace) {
|
||||
for (const e of this._getDisabledExtensions(StorageScope.WORKSPACE)) {
|
||||
if (!result.some(r => areSameExtensions(r, e))) {
|
||||
result.push(e);
|
||||
}
|
||||
}
|
||||
const workspaceEnabledExtensions = this._getEnabledExtensions(StorageScope.WORKSPACE);
|
||||
if (workspaceEnabledExtensions.length) {
|
||||
result = result.filter(r => !workspaceEnabledExtensions.some(e => areSameExtensions(e, r)));
|
||||
}
|
||||
}
|
||||
|
||||
return TPromise.as(result);
|
||||
}
|
||||
|
||||
getWorkspaceDisabledExtensions(): IExtensionIdentifier[] {
|
||||
return this.getDisabledExtensions(StorageScope.WORKSPACE);
|
||||
getEnablementState(identifier: IExtensionIdentifier): EnablementState {
|
||||
if (this.hasWorkspace) {
|
||||
if (this._getEnabledExtensions(StorageScope.WORKSPACE).filter(e => areSameExtensions(e, identifier))[0]) {
|
||||
return EnablementState.WorkspaceEnabled;
|
||||
}
|
||||
|
||||
if (this._getDisabledExtensions(StorageScope.WORKSPACE).filter(e => areSameExtensions(e, identifier))[0]) {
|
||||
return EnablementState.WorkspaceDisabled;
|
||||
}
|
||||
}
|
||||
if (this._getDisabledExtensions(StorageScope.GLOBAL).filter(e => areSameExtensions(e, identifier))[0]) {
|
||||
return EnablementState.Disabled;
|
||||
}
|
||||
return EnablementState.Enabled;
|
||||
}
|
||||
|
||||
canEnable(identifier: IExtensionIdentifier): boolean {
|
||||
if (this.environmentService.disableExtensions) {
|
||||
return false;
|
||||
}
|
||||
return !this.isEnabled(identifier);
|
||||
canChangeEnablement(): boolean {
|
||||
return !this.environmentService.disableExtensions;
|
||||
}
|
||||
|
||||
isEnabled(identifier: IExtensionIdentifier): boolean {
|
||||
if (this.environmentService.disableExtensions) {
|
||||
return false;
|
||||
}
|
||||
if (this.getGloballyDisabledExtensions().some(d => areSameExtensions(d, identifier))) {
|
||||
return false;
|
||||
}
|
||||
if (this.getWorkspaceDisabledExtensions().some(d => areSameExtensions(d, identifier))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
setEnablement(identifier: IExtensionIdentifier, enable: boolean, workspace: boolean = false): TPromise<boolean> {
|
||||
if (workspace && !this.hasWorkspace) {
|
||||
return TPromise.wrapError<boolean>(new Error(localize('noWorkspace', "No workspace.")));
|
||||
}
|
||||
|
||||
setEnablement(identifier: IExtensionIdentifier, newState: EnablementState): TPromise<boolean> {
|
||||
if (this.environmentService.disableExtensions) {
|
||||
return TPromise.wrap(false);
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
if (workspace) {
|
||||
return this.enableExtension(identifier, StorageScope.WORKSPACE);
|
||||
} else {
|
||||
return this.enableExtension(identifier, StorageScope.GLOBAL);
|
||||
}
|
||||
} else {
|
||||
if (workspace) {
|
||||
return this.disableExtension(identifier, StorageScope.WORKSPACE);
|
||||
} else {
|
||||
return this.disableExtension(identifier, StorageScope.GLOBAL);
|
||||
}
|
||||
const workspace = newState === EnablementState.WorkspaceDisabled || newState === EnablementState.WorkspaceEnabled;
|
||||
if (workspace && !this.hasWorkspace) {
|
||||
return TPromise.wrapError<boolean>(new Error(localize('noWorkspace', "No workspace.")));
|
||||
}
|
||||
|
||||
const currentState = this.getEnablementState(identifier);
|
||||
|
||||
if (currentState === newState) {
|
||||
return TPromise.as(false);
|
||||
}
|
||||
|
||||
|
||||
switch (newState) {
|
||||
case EnablementState.Enabled:
|
||||
this._enableExtension(identifier);
|
||||
break;
|
||||
case EnablementState.Disabled:
|
||||
this._disableExtension(identifier);
|
||||
break;
|
||||
case EnablementState.WorkspaceEnabled:
|
||||
this._enableExtensionInWorkspace(identifier);
|
||||
break;
|
||||
case EnablementState.WorkspaceDisabled:
|
||||
this._disableExtensionInWorkspace(identifier);
|
||||
break;
|
||||
}
|
||||
|
||||
this._onEnablementChanged.fire(identifier);
|
||||
return TPromise.as(true);
|
||||
}
|
||||
|
||||
isEnabled(identifier: IExtensionIdentifier): boolean {
|
||||
const enablementState = this.getEnablementState(identifier);
|
||||
return enablementState === EnablementState.WorkspaceEnabled || enablementState === EnablementState.Enabled;
|
||||
}
|
||||
|
||||
migrateToIdentifiers(installed: IExtensionIdentifier[]): void {
|
||||
this.migrateDisabledExtensions(installed, StorageScope.GLOBAL);
|
||||
this._migrateDisabledExtensions(installed, StorageScope.GLOBAL);
|
||||
if (this.hasWorkspace) {
|
||||
this.migrateDisabledExtensions(installed, StorageScope.WORKSPACE);
|
||||
this._migrateDisabledExtensions(installed, StorageScope.WORKSPACE);
|
||||
}
|
||||
}
|
||||
|
||||
private disableExtension(identifier: IExtensionIdentifier, scope: StorageScope): TPromise<boolean> {
|
||||
let disabledExtensions = this.getDisabledExtensions(scope);
|
||||
private _enableExtension(identifier: IExtensionIdentifier): void {
|
||||
this._removeFromDisabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._removeFromEnabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._removeFromDisabledExtensions(identifier, StorageScope.GLOBAL);
|
||||
}
|
||||
|
||||
private _disableExtension(identifier: IExtensionIdentifier): void {
|
||||
this._removeFromDisabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._removeFromEnabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._addToDisabledExtensions(identifier, StorageScope.GLOBAL);
|
||||
}
|
||||
|
||||
private _enableExtensionInWorkspace(identifier: IExtensionIdentifier): void {
|
||||
this._removeFromDisabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._addToEnabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
}
|
||||
|
||||
private _disableExtensionInWorkspace(identifier: IExtensionIdentifier): void {
|
||||
this._addToDisabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
this._removeFromEnabledExtensions(identifier, StorageScope.WORKSPACE);
|
||||
}
|
||||
|
||||
private _addToDisabledExtensions(identifier: IExtensionIdentifier, scope: StorageScope): TPromise<boolean> {
|
||||
if (scope === StorageScope.WORKSPACE && !this.hasWorkspace) {
|
||||
return TPromise.wrap(false);
|
||||
}
|
||||
let disabledExtensions = this._getDisabledExtensions(scope);
|
||||
if (disabledExtensions.every(e => !areSameExtensions(e, identifier))) {
|
||||
disabledExtensions.push(identifier);
|
||||
this.setDisabledExtensions(disabledExtensions, scope, identifier);
|
||||
this._setDisabledExtensions(disabledExtensions, scope, identifier);
|
||||
return TPromise.wrap(true);
|
||||
}
|
||||
return TPromise.wrap(false);
|
||||
}
|
||||
|
||||
private enableExtension(identifier: IExtensionIdentifier, scope: StorageScope, fireEvent = true): TPromise<boolean> {
|
||||
let disabledExtensions = this.getDisabledExtensions(scope);
|
||||
private _removeFromDisabledExtensions(identifier: IExtensionIdentifier, scope: StorageScope): boolean {
|
||||
if (scope === StorageScope.WORKSPACE && !this.hasWorkspace) {
|
||||
return false;
|
||||
}
|
||||
let disabledExtensions = this._getDisabledExtensions(scope);
|
||||
for (let index = 0; index < disabledExtensions.length; index++) {
|
||||
const disabledExtension = disabledExtensions[index];
|
||||
if (areSameExtensions(disabledExtension, identifier)) {
|
||||
disabledExtensions.splice(index, 1);
|
||||
this.setDisabledExtensions(disabledExtensions, scope, identifier, fireEvent);
|
||||
return TPromise.wrap(true);
|
||||
this._setDisabledExtensions(disabledExtensions, scope, identifier);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return TPromise.wrap(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
private getDisabledExtensions(scope: StorageScope): IExtensionIdentifier[] {
|
||||
private _addToEnabledExtensions(identifier: IExtensionIdentifier, scope: StorageScope): boolean {
|
||||
if (scope === StorageScope.WORKSPACE && !this.hasWorkspace) {
|
||||
return false;
|
||||
}
|
||||
let enabledExtensions = this._getEnabledExtensions(scope);
|
||||
if (enabledExtensions.every(e => !areSameExtensions(e, identifier))) {
|
||||
enabledExtensions.push(identifier);
|
||||
this._setEnabledExtensions(enabledExtensions, scope, identifier);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private _removeFromEnabledExtensions(identifier: IExtensionIdentifier, scope: StorageScope): boolean {
|
||||
if (scope === StorageScope.WORKSPACE && !this.hasWorkspace) {
|
||||
return false;
|
||||
}
|
||||
let enabledExtensions = this._getEnabledExtensions(scope);
|
||||
for (let index = 0; index < enabledExtensions.length; index++) {
|
||||
const disabledExtension = enabledExtensions[index];
|
||||
if (areSameExtensions(disabledExtension, identifier)) {
|
||||
enabledExtensions.splice(index, 1);
|
||||
this._setEnabledExtensions(enabledExtensions, scope, identifier);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private _getEnabledExtensions(scope: StorageScope): IExtensionIdentifier[] {
|
||||
return this._getExtensions(ENABLED_EXTENSIONS_STORAGE_PATH, scope);
|
||||
}
|
||||
|
||||
private _setEnabledExtensions(enabledExtensions: IExtensionIdentifier[], scope: StorageScope, extension: IExtensionIdentifier): void {
|
||||
this._setExtensions(ENABLED_EXTENSIONS_STORAGE_PATH, enabledExtensions, scope, extension);
|
||||
}
|
||||
|
||||
private _getDisabledExtensions(scope: StorageScope): IExtensionIdentifier[] {
|
||||
return this._getExtensions(DISABLED_EXTENSIONS_STORAGE_PATH, scope);
|
||||
}
|
||||
|
||||
private _setDisabledExtensions(disabledExtensions: IExtensionIdentifier[], scope: StorageScope, extension: IExtensionIdentifier, fireEvent = true): void {
|
||||
this._setExtensions(DISABLED_EXTENSIONS_STORAGE_PATH, disabledExtensions, scope, extension, fireEvent);
|
||||
}
|
||||
|
||||
private _getExtensions(storageId: string, scope: StorageScope): IExtensionIdentifier[] {
|
||||
if (scope === StorageScope.WORKSPACE && !this.hasWorkspace) {
|
||||
return [];
|
||||
}
|
||||
const value = this.storageService.get(DISABLED_EXTENSIONS_STORAGE_PATH, scope, '');
|
||||
const value = this.storageService.get(storageId, scope, '');
|
||||
return value ? JSON.parse(value) : [];
|
||||
}
|
||||
|
||||
private setDisabledExtensions(disabledExtensions: IExtensionIdentifier[], scope: StorageScope, extension: IExtensionIdentifier, fireEvent = true): void {
|
||||
if (disabledExtensions.length) {
|
||||
this.storageService.store(DISABLED_EXTENSIONS_STORAGE_PATH, JSON.stringify(disabledExtensions.map(({ id, uuid }) => (<IExtensionIdentifier>{ id, uuid }))), scope);
|
||||
private _setExtensions(storageId: string, extensions: IExtensionIdentifier[], scope: StorageScope, extension: IExtensionIdentifier, fireEvent = true): void {
|
||||
if (extensions.length) {
|
||||
this.storageService.store(storageId, JSON.stringify(extensions.map(({ id, uuid }) => (<IExtensionIdentifier>{ id, uuid }))), scope);
|
||||
} else {
|
||||
this.storageService.remove(DISABLED_EXTENSIONS_STORAGE_PATH, scope);
|
||||
this.storageService.remove(storageId, scope);
|
||||
}
|
||||
if (fireEvent) {
|
||||
this._onEnablementChanged.fire(extension);
|
||||
}
|
||||
}
|
||||
|
||||
private migrateDisabledExtensions(installedExtensions: IExtensionIdentifier[], scope: StorageScope): void {
|
||||
private _migrateDisabledExtensions(installedExtensions: IExtensionIdentifier[], scope: StorageScope): void {
|
||||
const oldValue = this.storageService.get('extensions/disabled', scope, '');
|
||||
if (oldValue) {
|
||||
const extensionIdentifiers = coalesce(distinct(oldValue.split(',')).map(id => {
|
||||
|
@ -154,13 +256,14 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
|
|||
this.storageService.remove('extensions/disabled', scope);
|
||||
}
|
||||
|
||||
private onDidUninstallExtension({ identifier, error }: DidUninstallExtensionEvent): void {
|
||||
private _onDidUninstallExtension({ identifier, error }: DidUninstallExtensionEvent): void {
|
||||
if (!error) {
|
||||
const id = getIdAndVersionFromLocalExtensionId(identifier.id).id;
|
||||
if (id) {
|
||||
const extension = { id, uuid: identifier.uuid };
|
||||
this.enableExtension(extension, StorageScope.WORKSPACE, false);
|
||||
this.enableExtension(extension, StorageScope.GLOBAL, false);
|
||||
this._removeFromDisabledExtensions(extension, StorageScope.WORKSPACE);
|
||||
this._removeFromEnabledExtensions(extension, StorageScope.WORKSPACE);
|
||||
this._removeFromDisabledExtensions(extension, StorageScope.GLOBAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,6 +263,13 @@ export interface IExtensionManagementService {
|
|||
updateMetadata(local: ILocalExtension, metadata: IGalleryMetadata): TPromise<ILocalExtension>;
|
||||
}
|
||||
|
||||
export enum EnablementState {
|
||||
Disabled,
|
||||
WorkspaceDisabled,
|
||||
Enabled,
|
||||
WorkspaceEnabled
|
||||
}
|
||||
|
||||
export const IExtensionEnablementService = createDecorator<IExtensionEnablementService>('extensionEnablementService');
|
||||
|
||||
// TODO: @sandy: Merge this into IExtensionManagementService when we have a storage service available in Shared process
|
||||
|
@ -275,21 +282,20 @@ export interface IExtensionEnablementService {
|
|||
onEnablementChanged: Event<IExtensionIdentifier>;
|
||||
|
||||
/**
|
||||
* Returns all globally disabled extension identifiers.
|
||||
* Returns an empty array if none exist.
|
||||
* Returns all disabled extension identifiers for current workspace
|
||||
* Returns an empty array if none exist
|
||||
*/
|
||||
getGloballyDisabledExtensions(): IExtensionIdentifier[];
|
||||
getDisabledExtensions(): TPromise<IExtensionIdentifier[]>;
|
||||
|
||||
/**
|
||||
* Returns all workspace disabled extension identifiers.
|
||||
* Returns an empty array if none exist or workspace does not exist.
|
||||
* Returns the enablement state for the given extension
|
||||
*/
|
||||
getWorkspaceDisabledExtensions(): IExtensionIdentifier[];
|
||||
getEnablementState(identifier: IExtensionIdentifier): EnablementState;
|
||||
|
||||
/**
|
||||
* Returns `true` if given extension can be enabled by calling `setEnablement`, otherwise false`.
|
||||
* Returns `true` if the enablement can be changed.
|
||||
*/
|
||||
canEnable(identifier: IExtensionIdentifier): boolean;
|
||||
canChangeEnablement(): boolean;
|
||||
|
||||
/**
|
||||
* Returns `true` if the given extension identifier is enabled.
|
||||
|
@ -305,7 +311,7 @@ export interface IExtensionEnablementService {
|
|||
*
|
||||
* Throws error if enablement is requested for workspace and there is no workspace
|
||||
*/
|
||||
setEnablement(identifier: IExtensionIdentifier, enable: boolean, workspace?: boolean): TPromise<boolean>;
|
||||
setEnablement(identifier: IExtensionIdentifier, state: EnablementState): TPromise<boolean>;
|
||||
|
||||
migrateToIdentifiers(installed: IExtensionIdentifier[]): void;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
import { ILocalExtension, IGalleryExtension, EXTENSION_IDENTIFIER_REGEX, IExtensionEnablementService, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||
import { ILocalExtension, IGalleryExtension, EXTENSION_IDENTIFIER_REGEX, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
|
||||
export function areSameExtensions(a: IExtensionIdentifier, b: IExtensionIdentifier): boolean {
|
||||
if (a.uuid && b.uuid) {
|
||||
|
@ -81,23 +80,5 @@ export function getGalleryExtensionTelemetryData(extension: IGalleryExtension):
|
|||
};
|
||||
}
|
||||
|
||||
|
||||
const BetterMergeCheckKey = 'extensions/bettermergecheck';
|
||||
export const BetterMergeDisabledNowKey = 'extensions/bettermergedisablednow';
|
||||
export const BetterMergeId = 'pprice.better-merge';
|
||||
|
||||
/**
|
||||
* Globally disabled extensions, taking care of disabling obsolete extensions.
|
||||
*/
|
||||
export function getGloballyDisabledExtensions(extensionEnablementService: IExtensionEnablementService, storageService: IStorageService, installedExtensions: { id: string; }[]) {
|
||||
const globallyDisabled = extensionEnablementService.getGloballyDisabledExtensions();
|
||||
if (!storageService.getBoolean(BetterMergeCheckKey, StorageScope.GLOBAL, false)) {
|
||||
storageService.store(BetterMergeCheckKey, true);
|
||||
if (globallyDisabled.every(disabled => disabled.id !== BetterMergeId) && installedExtensions.some(d => d.id === BetterMergeId)) {
|
||||
globallyDisabled.push({ id: BetterMergeId });
|
||||
extensionEnablementService.setEnablement({ id: BetterMergeId }, false);
|
||||
storageService.store(BetterMergeDisabledNowKey, true);
|
||||
}
|
||||
}
|
||||
return globallyDisabled;
|
||||
}
|
||||
export const BetterMergeId = 'pprice.better-merge';
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as sinon from 'sinon';
|
||||
import { IExtensionManagementService, IExtensionEnablementService, DidUninstallExtensionEvent } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionManagementService, IExtensionEnablementService, DidUninstallExtensionEvent, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { ExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
|
@ -14,6 +14,7 @@ import { StorageService, InMemoryLocalStorage } from 'vs/platform/storage/common
|
|||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
||||
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
|
||||
function storageService(instantiationService: TestInstantiationService): IStorageService {
|
||||
let service = instantiationService.get(IStorageService);
|
||||
|
@ -37,9 +38,8 @@ export class TestExtensionEnablementService extends ExtensionEnablementService {
|
|||
instantiationService.get(IExtensionManagementService) || instantiationService.stub(IExtensionManagementService, { onDidUninstallExtension: new Emitter() }));
|
||||
}
|
||||
|
||||
public reset(): void {
|
||||
this.getGloballyDisabledExtensions().forEach(d => this.setEnablement(d, true));
|
||||
this.getWorkspaceDisabledExtensions().forEach(d => this.setEnablement(d, true, true));
|
||||
public reset(): TPromise<void> {
|
||||
return this.getDisabledExtensions().then(extensions => extensions.forEach(d => this.setEnablement(d, EnablementState.Enabled)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,232 +60,268 @@ suite('ExtensionEnablementService Test', () => {
|
|||
(<ExtensionEnablementService>testObject).dispose();
|
||||
});
|
||||
|
||||
test('test when no extensions are disabled globally', () => {
|
||||
assert.deepEqual([], testObject.getGloballyDisabledExtensions());
|
||||
test('test when no extensions are disabled', () => {
|
||||
return testObject.getDisabledExtensions().then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test when no extensions are disabled for workspace', () => {
|
||||
assert.deepEqual([], testObject.getWorkspaceDisabledExtensions());
|
||||
});
|
||||
|
||||
test('test when no extensions are disabled for workspace when there is no workspace', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
test('test when no extensions are disabled for workspace when there is no workspace', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => {
|
||||
instantiationService.stub(IWorkspaceContextService, 'getWorkbenchState', WorkbenchState.EMPTY);
|
||||
assert.deepEqual([], testObject.getWorkspaceDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
return testObject.getDisabledExtensions().then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
});
|
||||
|
||||
test('test disable an extension globally', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => assert.deepEqual([{ id: 'pub.a' }], testObject.getGloballyDisabledExtensions()))
|
||||
.then(done, done);
|
||||
test('test disable an extension globally', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([{ id: 'pub.a' }], extensions));
|
||||
});
|
||||
|
||||
test('test disable an extension globally should return truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
test('test disable an extension globally should return truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test disable an extension globally triggers the change event', (done) => {
|
||||
test('test disable an extension globally triggers the change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onEnablementChanged(target);
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })))
|
||||
.then(done, done);
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })));
|
||||
});
|
||||
|
||||
test('test disable an extension globally again should return a falsy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(value => assert.ok(!value))
|
||||
.then(done, done);
|
||||
test('test disable an extension globally again should return a falsy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(value => assert.ok(!value));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => assert.deepEqual([{ id: 'pub.a' }], testObject.getWorkspaceDisabledExtensions()))
|
||||
.then(done, done);
|
||||
test('test state of globally disabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Disabled));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace returns a truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
test('test state of globally enabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Enabled));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace again should return a falsy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false, true))
|
||||
.then(value => assert.ok(!value))
|
||||
.then(done, done);
|
||||
test('test disable an extension for workspace', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([{ id: 'pub.a' }], extensions));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(() => {
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getWorkspaceDisabledExtensions());
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getGloballyDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
test('test disable an extension for workspace returns a truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally return a truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
test('test disable an extension for workspace again should return a falsy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(value => assert.ok(!value));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally triggers the change event', (done) => {
|
||||
test('test state of workspace disabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.WorkspaceDisabled));
|
||||
});
|
||||
|
||||
test('test state of workspace and globally disabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.WorkspaceDisabled));
|
||||
});
|
||||
|
||||
test('test state of workspace enabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.WorkspaceEnabled));
|
||||
});
|
||||
|
||||
test('test state of globally disabled and workspace enabled extension', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.WorkspaceEnabled));
|
||||
});
|
||||
|
||||
test('test state of an extension when disabled for workspace from workspace enabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.WorkspaceDisabled));
|
||||
});
|
||||
|
||||
test('test state of an extension when disabled globally from workspace enabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Disabled));
|
||||
});
|
||||
|
||||
test('test state of an extension when disabled globally from workspace disabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Disabled));
|
||||
});
|
||||
|
||||
test('test state of an extension when enabled globally from workspace enabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Enabled));
|
||||
});
|
||||
|
||||
test('test state of an extension when enabled globally from workspace disabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => assert.equal(testObject.getEnablementState({ id: 'pub.a' }), EnablementState.Enabled));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([{ id: 'pub.a' }], extensions));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally return a truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace and then globally trigger the change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.onEnablementChanged(target))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })))
|
||||
.then(done, done);
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })));
|
||||
});
|
||||
|
||||
test('test disable an extension globally and then for workspace', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false, true))
|
||||
.then(() => {
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getWorkspaceDisabledExtensions());
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getGloballyDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
test('test disable an extension globally and then for workspace', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([{ id: 'pub.a' }], extensions));
|
||||
});
|
||||
|
||||
test('test disable an extension globally and then for workspace return a truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false, true))
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
test('test disable an extension globally and then for workspace return a truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test disable an extension globally and then for workspace triggers the change event', (done) => {
|
||||
test('test disable an extension globally and then for workspace triggers the change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.onEnablementChanged(target))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false, true))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })))
|
||||
.then(done, done);
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })));
|
||||
});
|
||||
|
||||
test('test disable an extension for workspace when there is no workspace throws error', (done) => {
|
||||
instantiationService.stub(IWorkspaceContextService, 'getWorkbenchState', WorkbenchState.EMPTY);
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => assert.fail('should throw an error'), error => assert.ok(error))
|
||||
.then(done, done);
|
||||
});
|
||||
|
||||
test('test enable an extension globally', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true))
|
||||
.then(() => assert.deepEqual([], testObject.getGloballyDisabledExtensions()))
|
||||
.then(done, done);
|
||||
test('test enable an extension globally', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test enable an extension globally return truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true))
|
||||
testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
});
|
||||
|
||||
test('test enable an extension globally triggers change event', (done) => {
|
||||
const target = sinon.spy();
|
||||
testObject.setEnablement({ id: 'pub.a' }, false)
|
||||
testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => testObject.onEnablementChanged(target))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.a' })))
|
||||
.then(done, done);
|
||||
});
|
||||
|
||||
test('test enable an extension globally when already enabled return falsy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, true)
|
||||
testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled)
|
||||
.then(value => assert.ok(!value))
|
||||
.then(done, done);
|
||||
});
|
||||
|
||||
test('test enable an extension for workspace', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true, true))
|
||||
.then(() => assert.deepEqual([], testObject.getWorkspaceDisabledExtensions()))
|
||||
.then(done, done);
|
||||
test('test enable an extension for workspace', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test enable an extension for workspace return truthy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true, true))
|
||||
.then(value => assert.ok(value))
|
||||
.then(done, done);
|
||||
test('test enable an extension for workspace return truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test enable an extension for workspace triggers change event', (done) => {
|
||||
test('test enable an extension for workspace triggers change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.setEnablement({ id: 'pub.b' }, false, true)
|
||||
return testObject.setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.onEnablementChanged(target))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.b' }, true, true))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.b' })))
|
||||
.then(done, done);
|
||||
.then(() => testObject.setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => assert.ok(target.calledWithExactly({ id: 'pub.b' })));
|
||||
});
|
||||
|
||||
test('test enable an extension for workspace when already enabled return falsy promise', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, true, true)
|
||||
.then(value => assert.ok(!value))
|
||||
.then(done, done);
|
||||
test('test enable an extension for workspace when already enabled return truthy promise', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled)
|
||||
.then(value => assert.ok(value));
|
||||
});
|
||||
|
||||
test('test enable an extension for workspace when disabled in workspace and gloablly', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true, true))
|
||||
.then(() => {
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getGloballyDisabledExtensions());
|
||||
assert.deepEqual([], testObject.getWorkspaceDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
test('test enable an extension for workspace when disabled in workspace and gloablly', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceEnabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test enable an extension globally when disabled in workspace and gloablly', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, true))
|
||||
.then(() => {
|
||||
assert.deepEqual([{ id: 'pub.a' }], testObject.getWorkspaceDisabledExtensions());
|
||||
assert.deepEqual([], testObject.getGloballyDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
test('test enable an extension globally when disabled in workspace and gloablly', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Enabled))
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test remove an extension from disablement list when uninstalled', (done) => {
|
||||
testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, false))
|
||||
test('test remove an extension from disablement list when uninstalled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled))
|
||||
.then(() => didUninstallEvent.fire({ identifier: { id: 'pub.a-1.0.0' } }))
|
||||
.then(() => {
|
||||
assert.deepEqual([], testObject.getWorkspaceDisabledExtensions());
|
||||
assert.deepEqual([], testObject.getGloballyDisabledExtensions());
|
||||
})
|
||||
.then(done, done);
|
||||
.then(() => testObject.getDisabledExtensions())
|
||||
.then(extensions => assert.deepEqual([], extensions));
|
||||
});
|
||||
|
||||
test('test isEnabled return false extension is disabled globally', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, false, false)
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.Disabled)
|
||||
.then(() => assert.ok(!testObject.isEnabled({ id: 'pub.a' })));
|
||||
});
|
||||
|
||||
test('test isEnabled return false extension is disabled in workspace', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => assert.ok(!testObject.isEnabled({ id: 'pub.a' })));
|
||||
});
|
||||
|
||||
test('test isEnabled return true extension is not disabled', () => {
|
||||
return testObject.setEnablement({ id: 'pub.a' }, false, true)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.c' }, false, false))
|
||||
return testObject.setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled)
|
||||
.then(() => testObject.setEnablement({ id: 'pub.c' }, EnablementState.Disabled))
|
||||
.then(() => assert.ok(testObject.isEnabled({ id: 'pub.b' })));
|
||||
});
|
||||
});
|
|
@ -17,7 +17,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
|
|||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IExtension, ExtensionState, IExtensionsWorkbenchService, VIEWLET_ID, IExtensionsViewlet, AutoUpdateConfigurationKey } from 'vs/workbench/parts/extensions/common/extensions';
|
||||
import { ExtensionsConfigurationInitialContent } from 'vs/workbench/parts/extensions/common/extensionsFileTemplate';
|
||||
import { LocalExtensionType, IExtensionEnablementService, IExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { LocalExtensionType, IExtensionEnablementService, IExtensionTipsService, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IMessageService } from 'vs/platform/message/common/message';
|
||||
|
@ -332,7 +332,7 @@ export class DropDownMenuActionItem extends ActionItem {
|
|||
|
||||
private getActions(): IAction[] {
|
||||
let actions: IAction[] = [];
|
||||
const menuActionGroups = this.menuActionGroups.filter(group => group.some(action => action.enabled));
|
||||
const menuActionGroups = this.menuActionGroups;
|
||||
for (const menuActions of menuActionGroups) {
|
||||
actions = [...actions, ...menuActions, new Separator()];
|
||||
}
|
||||
|
@ -368,12 +368,12 @@ export class ManageExtensionAction extends Action {
|
|||
|
||||
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [
|
||||
[
|
||||
instantiationService.createInstance(EnableForWorkspaceAction, localize('enableForWorkspaceAction.label', "Enable (Workspace)")),
|
||||
instantiationService.createInstance(EnableGloballyAction, localize('enableAlwaysAction.label', "Enable (Always)"))
|
||||
instantiationService.createInstance(EnableForWorkspaceAction, EnableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(EnableGloballyAction, EnableGloballyAction.LABEL)
|
||||
],
|
||||
[
|
||||
instantiationService.createInstance(DisableForWorkspaceAction, localize('disableForWorkspaceAction.label', "Disable (Workspace)")),
|
||||
instantiationService.createInstance(DisableGloballyAction, localize('disableAlwaysAction.label', "Disable (Always)"))
|
||||
instantiationService.createInstance(DisableForWorkspaceAction, DisableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(DisableGloballyAction, DisableGloballyAction.LABEL)
|
||||
],
|
||||
[
|
||||
instantiationService.createInstance(UninstallAction)
|
||||
|
@ -411,7 +411,7 @@ export class ManageExtensionAction extends Action {
|
|||
export class EnableForWorkspaceAction extends Action implements IExtensionAction {
|
||||
|
||||
static ID = 'extensions.enableForWorkspace';
|
||||
static LABEL = localize('enableForWorkspaceAction', "Workspace");
|
||||
static LABEL = localize('enableForWorkspaceAction', "Enable (Workspace)");
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
|
@ -434,12 +434,12 @@ export class EnableForWorkspaceAction extends Action implements IExtensionAction
|
|||
private update(): void {
|
||||
this.enabled = false;
|
||||
if (this.extension) {
|
||||
this.enabled = !this.extension.disabledGlobally && this.extension.disabledForWorkspace && this.extensionEnablementService.canEnable(this.extension);
|
||||
this.enabled = (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) && this.extensionEnablementService.canChangeEnablement();
|
||||
}
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, true, true);
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, EnablementState.WorkspaceEnabled);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -451,7 +451,7 @@ export class EnableForWorkspaceAction extends Action implements IExtensionAction
|
|||
export class EnableGloballyAction extends Action implements IExtensionAction {
|
||||
|
||||
static ID = 'extensions.enableGlobally';
|
||||
static LABEL = localize('enableGloballyAction', "Always");
|
||||
static LABEL = localize('enableGloballyAction', "Enable");
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
|
@ -472,12 +472,12 @@ export class EnableGloballyAction extends Action implements IExtensionAction {
|
|||
private update(): void {
|
||||
this.enabled = false;
|
||||
if (this.extension) {
|
||||
this.enabled = this.extension.disabledGlobally && this.extensionEnablementService.canEnable(this.extension);
|
||||
this.enabled = (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) && this.extensionEnablementService.canChangeEnablement();
|
||||
}
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, true, false);
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, EnablementState.Enabled);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -494,6 +494,8 @@ export class EnableAction extends Action {
|
|||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
private _enableActions: IExtensionAction[];
|
||||
|
||||
private _actionItem: DropDownMenuActionItem;
|
||||
get actionItem(): IActionItem { return this._actionItem; }
|
||||
|
||||
|
@ -504,17 +506,15 @@ export class EnableAction extends Action {
|
|||
|
||||
constructor(
|
||||
@IInstantiationService private instantiationService: IInstantiationService,
|
||||
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService
|
||||
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService
|
||||
) {
|
||||
super(EnableAction.ID, localize('enableAction', "Enable"), EnableAction.DisabledClass, false);
|
||||
|
||||
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [
|
||||
[
|
||||
instantiationService.createInstance(EnableForWorkspaceAction, EnableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(EnableGloballyAction, EnableGloballyAction.LABEL)
|
||||
]
|
||||
]);
|
||||
this._enableActions = [
|
||||
instantiationService.createInstance(EnableForWorkspaceAction, EnableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(EnableGloballyAction, EnableGloballyAction.LABEL)
|
||||
];
|
||||
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [this._enableActions]);
|
||||
this.disposables.push(this._actionItem);
|
||||
|
||||
this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update()));
|
||||
|
@ -528,7 +528,7 @@ export class EnableAction extends Action {
|
|||
return;
|
||||
}
|
||||
|
||||
this.enabled = this.extension.state === ExtensionState.Installed && (this.extension.disabledGlobally || this.extension.disabledForWorkspace) && this.extensionEnablementService.canEnable(this.extension);
|
||||
this.enabled = this.extension.state === ExtensionState.Installed && this._enableActions.some(e => e.enabled);
|
||||
this.class = this.enabled ? EnableAction.EnabledClass : EnableAction.DisabledClass;
|
||||
}
|
||||
|
||||
|
@ -547,7 +547,7 @@ export class EnableAction extends Action {
|
|||
export class DisableForWorkspaceAction extends Action implements IExtensionAction {
|
||||
|
||||
static ID = 'extensions.disableForWorkspace';
|
||||
static LABEL = localize('disableForWorkspaceAction', "Workspace");
|
||||
static LABEL = localize('disableForWorkspaceAction', "Disable (Workspace)");
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
|
@ -569,12 +569,12 @@ export class DisableForWorkspaceAction extends Action implements IExtensionActio
|
|||
private update(): void {
|
||||
this.enabled = false;
|
||||
if (this.extension && this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY) {
|
||||
this.enabled = this.extension.type !== LocalExtensionType.System && !this.extension.disabledGlobally && !this.extension.disabledForWorkspace;
|
||||
this.enabled = this.extension.type !== LocalExtensionType.System && (this.extension.enablementState === EnablementState.Enabled || this.extension.enablementState === EnablementState.WorkspaceEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, false, true);
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, EnablementState.WorkspaceDisabled);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -586,7 +586,7 @@ export class DisableForWorkspaceAction extends Action implements IExtensionActio
|
|||
export class DisableGloballyAction extends Action implements IExtensionAction {
|
||||
|
||||
static ID = 'extensions.disableGlobally';
|
||||
static LABEL = localize('disableGloballyAction', "Always");
|
||||
static LABEL = localize('disableGloballyAction', "Disable");
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
|
@ -606,12 +606,12 @@ export class DisableGloballyAction extends Action implements IExtensionAction {
|
|||
private update(): void {
|
||||
this.enabled = false;
|
||||
if (this.extension) {
|
||||
this.enabled = this.extension.type !== LocalExtensionType.System && !this.extension.disabledGlobally && !this.extension.disabledForWorkspace;
|
||||
this.enabled = this.extension.type !== LocalExtensionType.System && (this.extension.enablementState === EnablementState.Enabled || this.extension.enablementState === EnablementState.WorkspaceEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, false, false);
|
||||
return this.extensionsWorkbenchService.setEnablement(this.extension, EnablementState.Disabled);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -628,6 +628,7 @@ export class DisableAction extends Action {
|
|||
private static readonly DisabledClass = `${DisableAction.EnabledClass} disabled`;
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
private _disableActions: IExtensionAction[];
|
||||
private _actionItem: DropDownMenuActionItem;
|
||||
get actionItem(): IActionItem { return this._actionItem; }
|
||||
|
||||
|
@ -641,12 +642,11 @@ export class DisableAction extends Action {
|
|||
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
|
||||
) {
|
||||
super(DisableAction.ID, localize('disableAction', "Disable"), DisableAction.DisabledClass, false);
|
||||
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [
|
||||
[
|
||||
instantiationService.createInstance(DisableForWorkspaceAction, DisableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(DisableGloballyAction, DisableGloballyAction.LABEL)
|
||||
]
|
||||
]);
|
||||
this._disableActions = [
|
||||
instantiationService.createInstance(DisableForWorkspaceAction, DisableForWorkspaceAction.LABEL),
|
||||
instantiationService.createInstance(DisableGloballyAction, DisableGloballyAction.LABEL)
|
||||
];
|
||||
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [this._disableActions]);
|
||||
this.disposables.push(this._actionItem);
|
||||
|
||||
this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update()));
|
||||
|
@ -660,7 +660,7 @@ export class DisableAction extends Action {
|
|||
return;
|
||||
}
|
||||
|
||||
this.enabled = this.extension.state === ExtensionState.Installed && this.extension.type !== LocalExtensionType.System && !this.extension.disabledGlobally && !this.extension.disabledForWorkspace;
|
||||
this.enabled = this.extension.state === ExtensionState.Installed && this.extension.type !== LocalExtensionType.System && this._disableActions.some(a => a.enabled);
|
||||
this.class = this.enabled ? DisableAction.EnabledClass : DisableAction.DisabledClass;
|
||||
}
|
||||
|
||||
|
@ -827,7 +827,7 @@ export class ReloadAction extends Action {
|
|||
private computeReloadState(runningExtensions: IExtensionDescription[]): void {
|
||||
const isInstalled = this.extensionsWorkbenchService.local.some(e => e.id === this.extension.id);
|
||||
const isUninstalled = this.extension.state === ExtensionState.Uninstalled;
|
||||
const isDisabled = !this.extensionEnablementService.isEnabled(this.extension);
|
||||
const isDisabled = !this.extensionEnablementService.isEnabled({ id: this.extension.id, uuid: this.extension.uuid });
|
||||
|
||||
const filteredExtensions = runningExtensions.filter(e => areSameExtensions(e, this.extension));
|
||||
const isExtensionRunning = filteredExtensions.length > 0;
|
||||
|
@ -1516,11 +1516,11 @@ export class DisableAllAction extends Action {
|
|||
}
|
||||
|
||||
private update(): void {
|
||||
this.enabled = this.extensionsWorkbenchService.local.some(e => e.type === LocalExtensionType.User && !e.disabledForWorkspace && !e.disabledGlobally);
|
||||
this.enabled = this.extensionsWorkbenchService.local.some(e => e.type === LocalExtensionType.User && (e.enablementState === EnablementState.Enabled || e.enablementState === EnablementState.WorkspaceEnabled));
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, false)));
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, EnablementState.Disabled)));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -1548,11 +1548,11 @@ export class DisableAllWorkpsaceAction extends Action {
|
|||
}
|
||||
|
||||
private update(): void {
|
||||
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => e.type === LocalExtensionType.User && !e.disabledForWorkspace && !e.disabledGlobally);
|
||||
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => e.type === LocalExtensionType.User && (e.enablementState === EnablementState.Enabled || e.enablementState === EnablementState.WorkspaceEnabled));
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, false, true)));
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, EnablementState.WorkspaceDisabled)));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -1579,11 +1579,11 @@ export class EnableAllAction extends Action {
|
|||
}
|
||||
|
||||
private update(): void {
|
||||
this.enabled = this.extensionsWorkbenchService.local.some(e => this.extensionEnablementService.canEnable(e) && e.disabledGlobally);
|
||||
this.enabled = this.extensionsWorkbenchService.local.some(e => this.extensionEnablementService.canChangeEnablement() && (e.enablementState === EnablementState.Disabled || e.enablementState === EnablementState.WorkspaceDisabled));
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, true)));
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, EnablementState.Enabled)));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -1612,11 +1612,11 @@ export class EnableAllWorkpsaceAction extends Action {
|
|||
}
|
||||
|
||||
private update(): void {
|
||||
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => this.extensionEnablementService.canEnable(e) && !e.disabledGlobally && e.disabledForWorkspace);
|
||||
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => this.extensionEnablementService.canChangeEnablement() && (e.enablementState === EnablementState.Disabled || e.enablementState === EnablementState.WorkspaceDisabled));
|
||||
}
|
||||
|
||||
run(): TPromise<any> {
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, true, true)));
|
||||
return TPromise.join(this.extensionsWorkbenchService.local.map(e => this.extensionsWorkbenchService.setEnablement(e, EnablementState.WorkspaceEnabled)));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
|
|
@ -8,7 +8,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
|
|||
import Event from 'vs/base/common/event';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { IPager } from 'vs/base/common/paging';
|
||||
import { IQueryOptions, IExtensionManifest, LocalExtensionType } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IQueryOptions, IExtensionManifest, LocalExtensionType, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
|
||||
export const VIEWLET_ID = 'workbench.view.extensions';
|
||||
|
||||
|
@ -44,8 +44,7 @@ export interface IExtension {
|
|||
rating: number;
|
||||
ratingCount: number;
|
||||
outdated: boolean;
|
||||
disabledGlobally: boolean;
|
||||
disabledForWorkspace: boolean;
|
||||
enablementState: EnablementState;
|
||||
dependencies: string[];
|
||||
telemetryData: any;
|
||||
preview: boolean;
|
||||
|
@ -76,7 +75,7 @@ export interface IExtensionsWorkbenchService {
|
|||
install(vsix: string): TPromise<void>;
|
||||
install(extension: IExtension, promptToInstallDependencies?: boolean): TPromise<void>;
|
||||
uninstall(extension: IExtension): TPromise<void>;
|
||||
setEnablement(extension: IExtension, enable: boolean, workspace?: boolean): TPromise<void>;
|
||||
setEnablement(extension: IExtension, enablementState: EnablementState): TPromise<void>;
|
||||
loadDependencies(extension: IExtension): TPromise<IExtensionDependencies>;
|
||||
open(extension: IExtension, sideByside?: boolean): TPromise<any>;
|
||||
checkForUpdates(): TPromise<void>;
|
||||
|
|
|
@ -12,7 +12,7 @@ import { onUnexpectedError, canceled } from 'vs/base/common/errors';
|
|||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { IExtensionManagementService, ILocalExtension, IExtensionEnablementService, IExtensionTipsService, LocalExtensionType, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionManagementService, ILocalExtension, IExtensionEnablementService, IExtensionTipsService, LocalExtensionType, IExtensionIdentifier, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionService } from 'vs/platform/extensions/common/extensions';
|
||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
|
@ -103,7 +103,7 @@ export class KeymapExtensions implements IWorkbenchContribution {
|
|||
this.telemetryService.publicLog('disableOtherKeymaps', telemetryData);
|
||||
if (confirmed) {
|
||||
return TPromise.join(oldKeymaps.map(keymap => {
|
||||
return this.extensionEnablementService.setEnablement(keymap.local.identifier, false);
|
||||
return this.extensionEnablementService.setEnablement(keymap.local.identifier, EnablementState.Disabled);
|
||||
}));
|
||||
}
|
||||
return undefined;
|
||||
|
@ -138,14 +138,16 @@ export function getInstalledExtensions(accessor: ServicesAccessor): TPromise<IEx
|
|||
const extensionService = accessor.get(IExtensionManagementService);
|
||||
const extensionEnablementService = accessor.get(IExtensionEnablementService);
|
||||
return extensionService.getInstalled().then(extensions => {
|
||||
const globallyDisabled = extensionEnablementService.getGloballyDisabledExtensions();
|
||||
return extensions.map(extension => {
|
||||
return {
|
||||
identifier: { id: adoptToGalleryExtensionId(extension.identifier.id), uuid: extension.identifier.uuid },
|
||||
local: extension,
|
||||
globallyEnabled: globallyDisabled.every(disabled => !areSameExtensions(disabled, extension.identifier))
|
||||
};
|
||||
});
|
||||
return extensionEnablementService.getDisabledExtensions()
|
||||
.then(disabledExtensions => {
|
||||
return extensions.map(extension => {
|
||||
return {
|
||||
identifier: { id: adoptToGalleryExtensionId(extension.identifier.id), uuid: extension.identifier.uuid },
|
||||
local: extension,
|
||||
globallyEnabled: disabledExtensions.every(disabled => !areSameExtensions(disabled, extension.identifier))
|
||||
};
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ import { isPromiseCanceledError, create as createError } from 'vs/base/common/er
|
|||
import Severity from 'vs/base/common/severity';
|
||||
import { PagedModel, IPagedModel, mergePagers, IPager } from 'vs/base/common/paging';
|
||||
import { IMessageService, CloseAction } from 'vs/platform/message/common/message';
|
||||
import { SortBy, SortOrder, IQueryOptions, LocalExtensionType, IExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { SortBy, SortOrder, IQueryOptions, LocalExtensionType, IExtensionTipsService, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||
|
@ -220,7 +220,7 @@ export class ExtensionsListView extends ViewsViewletPanel {
|
|||
const result = local
|
||||
.sort((e1, e2) => e1.displayName.localeCompare(e2.displayName))
|
||||
.filter(e => e.type === LocalExtensionType.User &&
|
||||
!(e.disabledForWorkspace || e.disabledGlobally) &&
|
||||
(e.enablementState === EnablementState.Enabled || e.enablementState === EnablementState.WorkspaceEnabled) &&
|
||||
e.name.toLowerCase().indexOf(value) > -1
|
||||
);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import { IPager, mapPager, singlePagePager } from 'vs/base/common/paging';
|
|||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import {
|
||||
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions, IExtensionManifest,
|
||||
InstallExtensionEvent, DidInstallExtensionEvent, LocalExtensionType, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier
|
||||
InstallExtensionEvent, DidInstallExtensionEvent, LocalExtensionType, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier, EnablementState
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionIdFromLocal, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData, areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
@ -33,7 +33,6 @@ import { IExtension, IExtensionDependencies, ExtensionState, IExtensionsWorkbenc
|
|||
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
import { ExtensionsInput } from 'vs/workbench/parts/extensions/common/extensionsInput';
|
||||
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import product from 'vs/platform/node/product';
|
||||
|
||||
interface IExtensionStateProvider {
|
||||
|
@ -42,8 +41,7 @@ interface IExtensionStateProvider {
|
|||
|
||||
class Extension implements IExtension {
|
||||
|
||||
public disabledGlobally = false;
|
||||
public disabledForWorkspace = false;
|
||||
public enablementState: EnablementState = EnablementState.Enabled;
|
||||
|
||||
constructor(
|
||||
private galleryService: IExtensionGalleryService,
|
||||
|
@ -341,7 +339,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
@IChoiceService private choiceService: IChoiceService,
|
||||
@IURLService urlService: IURLService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService,
|
||||
@IWorkspaceContextService private workspaceContextService: IWorkspaceContextService,
|
||||
@IWindowService private windowService: IWindowService
|
||||
) {
|
||||
this.stateProvider = ext => this.getExtensionState(ext);
|
||||
|
@ -381,13 +378,10 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
queryLocal(): TPromise<IExtension[]> {
|
||||
return this.extensionService.getInstalled().then(result => {
|
||||
const installedById = index(this.installed, e => e.local.identifier.id);
|
||||
const globallyDisabledExtensions = this.extensionEnablementService.getGloballyDisabledExtensions();
|
||||
const workspaceDisabledExtensions = this.extensionEnablementService.getWorkspaceDisabledExtensions();
|
||||
this.installed = result.map(local => {
|
||||
const extension = installedById[local.identifier.id] || new Extension(this.galleryService, this.stateProvider, local, null, this.telemetryService);
|
||||
extension.local = local;
|
||||
extension.disabledGlobally = globallyDisabledExtensions.some(d => areSameExtensions(d, extension));
|
||||
extension.disabledForWorkspace = workspaceDisabledExtensions.some(d => areSameExtensions(d, extension));
|
||||
extension.enablementState = this.extensionEnablementService.getEnablementState({ id: extension.id, uuid: extension.uuid });
|
||||
return extension;
|
||||
});
|
||||
|
||||
|
@ -560,12 +554,13 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
return this.extensionService.installFromGallery(gallery);
|
||||
}
|
||||
|
||||
setEnablement(extension: IExtension, enable: boolean, workspace: boolean = false): TPromise<void> {
|
||||
setEnablement(extension: IExtension, enablementState: EnablementState): TPromise<void> {
|
||||
if (extension.type === LocalExtensionType.System) {
|
||||
return TPromise.wrap<void>(void 0);
|
||||
}
|
||||
|
||||
return this.promptAndSetEnablement(extension, enable, workspace).then(reload => {
|
||||
const enable = enablementState === EnablementState.Enabled || enablementState === EnablementState.WorkspaceEnabled;
|
||||
return this.promptAndSetEnablement(extension, enablementState, enable).then(reload => {
|
||||
/* __GDPR__
|
||||
"extension:enable" : {
|
||||
"${include}": [
|
||||
|
@ -600,19 +595,19 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
|
||||
}
|
||||
|
||||
private promptAndSetEnablement(extension: IExtension, enable: boolean, workspace: boolean): TPromise<any> {
|
||||
const allDependencies = this.getDependenciesRecursively(extension, this.local, enable, workspace, []);
|
||||
private promptAndSetEnablement(extension: IExtension, enablementState: EnablementState, enable: boolean): TPromise<any> {
|
||||
const allDependencies = this.getDependenciesRecursively(extension, this.local, enablementState, []);
|
||||
if (allDependencies.length > 0) {
|
||||
if (enable) {
|
||||
return this.promptForDependenciesAndEnable(extension, allDependencies, workspace);
|
||||
return this.promptForDependenciesAndEnable(extension, allDependencies, enablementState, enable);
|
||||
} else {
|
||||
return this.promptForDependenciesAndDisable(extension, allDependencies, workspace);
|
||||
return this.promptForDependenciesAndDisable(extension, allDependencies, enablementState, enable);
|
||||
}
|
||||
}
|
||||
return this.checkAndSetEnablement(extension, [], enable, workspace);
|
||||
return this.checkAndSetEnablement(extension, [], enablementState, enable);
|
||||
}
|
||||
|
||||
private promptForDependenciesAndEnable(extension: IExtension, dependencies: IExtension[], workspace: boolean): TPromise<any> {
|
||||
private promptForDependenciesAndEnable(extension: IExtension, dependencies: IExtension[], enablementState: EnablementState, enable: boolean): TPromise<any> {
|
||||
const message = nls.localize('enableDependeciesConfirmation', "Enabling '{0}' also enable its dependencies. Would you like to continue?", extension.displayName);
|
||||
const options = [
|
||||
nls.localize('enable', "Yes"),
|
||||
|
@ -621,13 +616,13 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
return this.choiceService.choose(Severity.Info, message, options, 1, true)
|
||||
.then<void>(value => {
|
||||
if (value === 0) {
|
||||
return this.checkAndSetEnablement(extension, dependencies, true, workspace);
|
||||
return this.checkAndSetEnablement(extension, dependencies, enablementState, enable);
|
||||
}
|
||||
return TPromise.as(null);
|
||||
});
|
||||
}
|
||||
|
||||
private promptForDependenciesAndDisable(extension: IExtension, dependencies: IExtension[], workspace: boolean): TPromise<void> {
|
||||
private promptForDependenciesAndDisable(extension: IExtension, dependencies: IExtension[], enablementState: EnablementState, enable: boolean): TPromise<void> {
|
||||
const message = nls.localize('disableDependeciesConfirmation', "Would you like to disable '{0}' only or its dependencies also?", extension.displayName);
|
||||
const options = [
|
||||
nls.localize('disableOnly', "Only"),
|
||||
|
@ -637,26 +632,26 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
return this.choiceService.choose(Severity.Info, message, options, 2, true)
|
||||
.then<void>(value => {
|
||||
if (value === 0) {
|
||||
return this.checkAndSetEnablement(extension, [], false, workspace);
|
||||
return this.checkAndSetEnablement(extension, [], enablementState, enable);
|
||||
}
|
||||
if (value === 1) {
|
||||
return this.checkAndSetEnablement(extension, dependencies, false, workspace);
|
||||
return this.checkAndSetEnablement(extension, dependencies, enablementState, enable);
|
||||
}
|
||||
return TPromise.as(null);
|
||||
});
|
||||
}
|
||||
|
||||
private checkAndSetEnablement(extension: IExtension, dependencies: IExtension[], enable: boolean, workspace: boolean): TPromise<any> {
|
||||
private checkAndSetEnablement(extension: IExtension, dependencies: IExtension[], enablementState: EnablementState, enable: boolean): TPromise<any> {
|
||||
if (!enable) {
|
||||
let dependents = this.getDependentsAfterDisablement(extension, dependencies, this.local, workspace);
|
||||
let dependents = this.getDependentsAfterDisablement(extension, dependencies, this.local, enablementState);
|
||||
if (dependents.length) {
|
||||
return TPromise.wrapError<void>(new Error(this.getDependentsErrorMessage(extension, dependents)));
|
||||
}
|
||||
}
|
||||
return TPromise.join([extension, ...dependencies].map(e => this.doSetEnablement(e, enable, workspace)));
|
||||
return TPromise.join([extension, ...dependencies].map(e => this.doSetEnablement(e, enablementState)));
|
||||
}
|
||||
|
||||
private getDependenciesRecursively(extension: IExtension, installed: IExtension[], enable: boolean, workspace: boolean, checked: IExtension[]): IExtension[] {
|
||||
private getDependenciesRecursively(extension: IExtension, installed: IExtension[], enablementState: EnablementState, checked: IExtension[]): IExtension[] {
|
||||
if (checked.indexOf(extension) !== -1) {
|
||||
return [];
|
||||
}
|
||||
|
@ -666,19 +661,19 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
}
|
||||
const dependenciesToDisable = installed.filter(i => {
|
||||
// Do not include extensions which are already disabled and request is to disable
|
||||
if (!enable && (workspace ? i.disabledForWorkspace : i.disabledGlobally)) {
|
||||
if (i.enablementState === enablementState && (i.enablementState === EnablementState.WorkspaceDisabled || i.enablementState === EnablementState.Disabled)) {
|
||||
return false;
|
||||
}
|
||||
return i.type === LocalExtensionType.User && extension.dependencies.indexOf(i.id) !== -1;
|
||||
});
|
||||
const depsOfDeps = [];
|
||||
for (const dep of dependenciesToDisable) {
|
||||
depsOfDeps.push(...this.getDependenciesRecursively(dep, installed, enable, workspace, checked));
|
||||
depsOfDeps.push(...this.getDependenciesRecursively(dep, installed, enablementState, checked));
|
||||
}
|
||||
return [...dependenciesToDisable, ...depsOfDeps];
|
||||
}
|
||||
|
||||
private getDependentsAfterDisablement(extension: IExtension, dependencies: IExtension[], installed: IExtension[], workspace: boolean): IExtension[] {
|
||||
private getDependentsAfterDisablement(extension: IExtension, dependencies: IExtension[], installed: IExtension[], enablementState: EnablementState): IExtension[] {
|
||||
return installed.filter(i => {
|
||||
if (i.dependencies.length === 0) {
|
||||
return false;
|
||||
|
@ -686,8 +681,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
if (i === extension) {
|
||||
return false;
|
||||
}
|
||||
const disabled = workspace ? i.disabledForWorkspace : i.disabledGlobally;
|
||||
if (disabled) {
|
||||
if (i.enablementState === EnablementState.WorkspaceDisabled || i.enablementState === EnablementState.Disabled) {
|
||||
return false;
|
||||
}
|
||||
if (dependencies.indexOf(i) !== -1) {
|
||||
|
@ -714,17 +708,8 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
extension.displayName, dependents[0].displayName, dependents[1].displayName);
|
||||
}
|
||||
|
||||
private doSetEnablement(extension: IExtension, enable: boolean, workspace: boolean): TPromise<boolean> {
|
||||
if (workspace) {
|
||||
return this.extensionEnablementService.setEnablement(extension, enable, workspace);
|
||||
}
|
||||
|
||||
const globalElablement = this.extensionEnablementService.setEnablement(extension, enable, false);
|
||||
if (enable && this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY) {
|
||||
const workspaceEnablement = this.extensionEnablementService.setEnablement(extension, enable, true);
|
||||
return TPromise.join([globalElablement, workspaceEnablement]).then(values => values[0] || values[1]);
|
||||
}
|
||||
return globalElablement;
|
||||
private doSetEnablement(extension: IExtension, enablementState: EnablementState): TPromise<boolean> {
|
||||
return this.extensionEnablementService.setEnablement(extension, enablementState);
|
||||
}
|
||||
|
||||
get allowedBadgeProviders(): string[] {
|
||||
|
@ -822,11 +807,11 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
private onEnablementChanged(extensionIdentifier: IExtensionIdentifier) {
|
||||
const [extension] = this.local.filter(e => areSameExtensions(e, extensionIdentifier));
|
||||
if (extension) {
|
||||
const globallyDisabledExtensions = this.extensionEnablementService.getGloballyDisabledExtensions();
|
||||
const workspaceDisabledExtensions = this.extensionEnablementService.getWorkspaceDisabledExtensions();
|
||||
extension.disabledGlobally = globallyDisabledExtensions.some(disabled => areSameExtensions(disabled, extension));
|
||||
extension.disabledForWorkspace = workspaceDisabledExtensions.some(disabled => areSameExtensions(disabled, extension));
|
||||
this._onChange.fire();
|
||||
const enablementState = this.extensionEnablementService.getEnablementState({ id: extension.id, uuid: extension.uuid });
|
||||
if (enablementState !== extension.enablementState) {
|
||||
extension.enablementState = enablementState;
|
||||
this._onChange.fire();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ import * as ExtensionsActions from 'vs/workbench/parts/extensions/browser/extens
|
|||
import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService';
|
||||
import {
|
||||
IExtensionManagementService, IExtensionGalleryService, IExtensionEnablementService, IExtensionTipsService, ILocalExtension, LocalExtensionType, IGalleryExtension,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, EnablementState
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionManagementService, getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
|
@ -509,44 +509,44 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
});
|
||||
|
||||
test('Test EnableForWorkspaceAction when there extension is disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
test('Test EnableForWorkspaceAction when the extension is disabled globally', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
||||
instantiationService.get(IExtensionsWorkbenchService).queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(!testObject.enabled);
|
||||
done();
|
||||
});
|
||||
return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
|
||||
.then(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(testObject.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
test('Test EnableForWorkspaceAction when extension is disabled for workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
test('Test EnableForWorkspaceAction when extension is disabled for workspace', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
||||
instantiationService.get(IExtensionsWorkbenchService).queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(testObject.enabled);
|
||||
done();
|
||||
});
|
||||
return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
|
||||
.then(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(testObject.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
test('Test EnableForWorkspaceAction when the extension is disabled in both', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
test('Test EnableForWorkspaceAction when the extension is disabled globally and workspace', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
||||
instantiationService.get(IExtensionsWorkbenchService).queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(!testObject.enabled);
|
||||
done();
|
||||
});
|
||||
return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
|
||||
.then(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(testObject.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
test('Test EnableGloballyAction when there is no extension', () => {
|
||||
|
@ -568,20 +568,20 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test EnableGloballyAction when the extension is disabled for workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
||||
instantiationService.get(IExtensionsWorkbenchService).queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
assert.ok(!testObject.enabled);
|
||||
assert.ok(testObject.enabled);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('Test EnableGloballyAction when the extension is disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -594,8 +594,8 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test EnableGloballyAction when the extension is disabled in both', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -626,7 +626,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test EnableAction when extension is installed and disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.EnableAction = instantiationService.createInstance(ExtensionsActions.EnableAction);
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -639,7 +639,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test EnableAction when extension is installed and disabled for workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.EnableAction = instantiationService.createInstance(ExtensionsActions.EnableAction);
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -698,7 +698,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableForWorkspaceAction when the extension is disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -711,7 +711,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableForWorkspaceAction when the extension is disabled workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -742,7 +742,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableGloballyAction when the extension is disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -755,7 +755,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableGloballyAction when the extension is disabled for workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, 'id');
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -798,7 +798,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableAction when extension is installed and disabled globally', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.DisableAction = instantiationService.createInstance(ExtensionsActions.DisableAction);
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -811,7 +811,7 @@ suite('ExtensionsActions Test', () => {
|
|||
});
|
||||
|
||||
test('Test DisableAction when extension is installed and disabled for workspace', (done) => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
const testObject: ExtensionsActions.DisableAction = instantiationService.createInstance(ExtensionsActions.DisableAction);
|
||||
const local = aLocalExtension('a');
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
|
@ -1053,7 +1053,7 @@ suite('ExtensionsActions Test', () => {
|
|||
|
||||
test('Test ReloadAction when extension is updated when not running', (done) => {
|
||||
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.b' }]);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
|
||||
const local = aLocalExtension('a', { version: '1.0.1' });
|
||||
const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
|
||||
|
@ -1078,7 +1078,7 @@ suite('ExtensionsActions Test', () => {
|
|||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
workbenchService.queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
workbenchService.setEnablement(extensions[0], false);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.enabled);
|
||||
assert.equal('Reload to deactivate', testObject.tooltip);
|
||||
|
@ -1095,8 +1095,8 @@ suite('ExtensionsActions Test', () => {
|
|||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
workbenchService.queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
workbenchService.setEnablement(extensions[0], false);
|
||||
workbenchService.setEnablement(extensions[0], true);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Disabled);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Enabled);
|
||||
|
||||
assert.ok(!testObject.enabled);
|
||||
done();
|
||||
|
@ -1105,14 +1105,14 @@ suite('ExtensionsActions Test', () => {
|
|||
|
||||
test('Test ReloadAction when extension is enabled when not running', (done) => {
|
||||
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.b' }]);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
|
||||
const local = aLocalExtension('a');
|
||||
const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
workbenchService.queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
workbenchService.setEnablement(extensions[0], true);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Enabled);
|
||||
|
||||
assert.ok(testObject.enabled);
|
||||
assert.equal('Reload to activate', testObject.tooltip);
|
||||
|
@ -1123,15 +1123,15 @@ suite('ExtensionsActions Test', () => {
|
|||
|
||||
test('Test ReloadAction when extension enablement is toggled when not running', (done) => {
|
||||
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.b' }]);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
|
||||
const local = aLocalExtension('a');
|
||||
const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
|
||||
workbenchService.queryLocal().done(extensions => {
|
||||
testObject.extension = extensions[0];
|
||||
workbenchService.setEnablement(extensions[0], true);
|
||||
workbenchService.setEnablement(extensions[0], false);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Enabled);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(!testObject.enabled);
|
||||
done();
|
||||
|
@ -1140,7 +1140,7 @@ suite('ExtensionsActions Test', () => {
|
|||
|
||||
test('Test ReloadAction when extension is updated when not running and enabled', (done) => {
|
||||
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.b' }]);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
|
||||
const local = aLocalExtension('a', { version: '1.0.1' });
|
||||
const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
|
||||
|
@ -1151,7 +1151,7 @@ suite('ExtensionsActions Test', () => {
|
|||
const gallery = aGalleryExtension('a', { identifier: local.identifier, version: '1.0.2' });
|
||||
installEvent.fire({ identifier: gallery.identifier, gallery });
|
||||
didInstallEvent.fire({ identifier: gallery.identifier, gallery, local: aLocalExtension('a', gallery, gallery) });
|
||||
workbenchService.setEnablement(extensions[0], true);
|
||||
workbenchService.setEnablement(extensions[0], EnablementState.Enabled);
|
||||
|
||||
assert.ok(testObject.enabled);
|
||||
assert.equal('Reload to activate', testObject.tooltip);
|
||||
|
|
|
@ -15,7 +15,7 @@ import { IExtensionsWorkbenchService, ExtensionState } from 'vs/workbench/parts/
|
|||
import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService';
|
||||
import {
|
||||
IExtensionManagementService, IExtensionGalleryService, IExtensionEnablementService, IExtensionTipsService, ILocalExtension, LocalExtensionType, IGalleryExtension,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IGalleryExtensionAssets, IExtensionIdentifier
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IGalleryExtensionAssets, IExtensionIdentifier, EnablementState
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionManagementService, getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
|
@ -693,292 +693,282 @@ suite('ExtensionsWorkbenchService Test', () => {
|
|||
});
|
||||
});
|
||||
|
||||
test('test disabled flags are false for uninstalled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false, true);
|
||||
test('test uninstalled extensions are always enabled', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.WorkspaceDisabled);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a')));
|
||||
return testObject.queryGallery().then(pagedResponse => {
|
||||
const actual = pagedResponse.firstPage[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Enabled);
|
||||
});
|
||||
});
|
||||
|
||||
test('test disabled flags are false for installed enabled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false, true);
|
||||
test('test enablement state installed enabled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test disabled for workspace is set', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.d' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.e' }, false, true);
|
||||
test('test workspace disabled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.d' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.e' }, EnablementState.WorkspaceDisabled);
|
||||
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.WorkspaceDisabled);
|
||||
});
|
||||
|
||||
test('test disabled globally is set', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.d' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false, true);
|
||||
test('test globally disabled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.d' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.WorkspaceDisabled);
|
||||
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable flags are updated for user extensions', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false, true);
|
||||
test('test enablement state is updated for user extensions', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false, true);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.WorkspaceDisabled);
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.WorkspaceDisabled);
|
||||
});
|
||||
|
||||
test('test enable extension globally when extension is disabled for workspace', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], true);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Enabled);
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test disable extension globally should not disable for workspace', () => {
|
||||
test('test disable extension globally', () => {
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disabled flags are not updated for system extensions', () => {
|
||||
test('test system extensions are always enabled', () => {
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', {}, { type: LocalExtensionType.System })]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(!actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test disabled flags are updated on change from outside', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false, true);
|
||||
test('test enablement state is updated on change from outside', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
const actual = testObject.local[0];
|
||||
|
||||
assert.ok(!actual.disabledForWorkspace);
|
||||
assert.ok(actual.disabledGlobally);
|
||||
assert.equal(actual.enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension with dependencies disable only itself', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.ok(!testObject.local[1].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test disable extension with dependencies disable all', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c')]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.ok(testObject.local[1].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension fails if extension is a dependent of other', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
return testObject.setEnablement(testObject.local[1], false).then(() => assert.fail('Should fail'), error => assert.ok(true));
|
||||
return testObject.setEnablement(testObject.local[1], EnablementState.Disabled).then(() => assert.fail('Should fail'), error => assert.ok(true));
|
||||
});
|
||||
|
||||
test('test disable extension does not fail if its dependency is a dependent of other but chosen to disable only itself', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c', { extensionDependencies: ['pub.b'] })]);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension fails if its dependency is a dependent of other', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c', { extensionDependencies: ['pub.b'] })]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
return testObject.setEnablement(testObject.local[0], false).then(() => assert.fail('Should fail'), error => assert.ok(true));
|
||||
return testObject.setEnablement(testObject.local[0], EnablementState.Disabled).then(() => assert.fail('Should fail'), error => assert.ok(true));
|
||||
});
|
||||
|
||||
test('test disable extension if its dependency is a dependent of other disabled extension', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c', { extensionDependencies: ['pub.b'] })]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.ok(testObject.local[1].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension if its dependencys dependency is itself', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b', { extensionDependencies: ['pub.a'] }), aLocalExtension('c')]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.ok(testObject.local[1].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension if its dependency is dependent and is disabled', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c', { extensionDependencies: ['pub.b'] })]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test disable extension with cyclic dependencies', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Enabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Enabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b', { extensionDependencies: ['pub.c'] }), aLocalExtension('c', { extensionDependencies: ['pub.a'] })]);
|
||||
instantiationService.stubPromise(IChoiceService, 'choose', 1);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(testObject.local[0].disabledGlobally);
|
||||
assert.ok(testObject.local[1].disabledGlobally);
|
||||
assert.ok(testObject.local[2].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Disabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Disabled);
|
||||
});
|
||||
|
||||
test('test enable extension with dependencies enable all', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b'), aLocalExtension('c')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], true);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Enabled);
|
||||
|
||||
assert.ok(!testObject.local[0].disabledGlobally);
|
||||
assert.ok(!testObject.local[1].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Enabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test enable extension with cyclic dependencies', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a', { extensionDependencies: ['pub.b'] }), aLocalExtension('b', { extensionDependencies: ['pub.c'] }), aLocalExtension('c', { extensionDependencies: ['pub.a'] })]);
|
||||
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], true);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Enabled);
|
||||
|
||||
assert.ok(!testObject.local[0].disabledGlobally);
|
||||
assert.ok(!testObject.local[1].disabledGlobally);
|
||||
assert.ok(!testObject.local[2].disabledGlobally);
|
||||
assert.equal(testObject.local[0].enablementState, EnablementState.Enabled);
|
||||
assert.equal(testObject.local[1].enablementState, EnablementState.Enabled);
|
||||
assert.equal(testObject.local[2].enablementState, EnablementState.Enabled);
|
||||
});
|
||||
|
||||
test('test change event is fired when disablement flags are changed', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
const target = sinon.spy();
|
||||
testObject.onChange(target);
|
||||
|
||||
testObject.setEnablement(testObject.local[0], false);
|
||||
testObject.setEnablement(testObject.local[0], EnablementState.Disabled);
|
||||
|
||||
assert.ok(target.calledOnce);
|
||||
});
|
||||
|
||||
test('test change event is fired when disablement flags are changed from outside', () => {
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, false, true);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.c' }, EnablementState.Disabled);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.b' }, EnablementState.WorkspaceDisabled);
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a')]);
|
||||
testObject = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||
const target = sinon.spy();
|
||||
testObject.onChange(target);
|
||||
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, false);
|
||||
instantiationService.get(IExtensionEnablementService).setEnablement({ id: 'pub.a' }, EnablementState.Disabled);
|
||||
|
||||
assert.ok(target.calledOnce);
|
||||
});
|
||||
|
|
|
@ -26,7 +26,7 @@ import { Schemas } from 'vs/base/common/network';
|
|||
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
|
||||
import { IMessageService, Severity, CloseAction } from 'vs/platform/message/common/message';
|
||||
import { getInstalledExtensions, IExtensionStatus, onExtensionChanged, isKeymapExtension } from 'vs/workbench/parts/extensions/electron-browser/extensionsUtils';
|
||||
import { IExtensionEnablementService, IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionEnablementService, IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { used } from 'vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page';
|
||||
import { ILifecycleService, StartupKind } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
|
@ -424,7 +424,7 @@ class WelcomePage {
|
|||
return this.extensionManagementService.installFromGallery(extension)
|
||||
.then(() => {
|
||||
// TODO: Do this as part of the install to avoid multiple events.
|
||||
return this.extensionEnablementService.setEnablement({ id: extensionSuggestion.id }, false);
|
||||
return this.extensionEnablementService.setEnablement({ id: extensionSuggestion.id }, EnablementState.Disabled);
|
||||
}).then(() => {
|
||||
return true;
|
||||
});
|
||||
|
@ -442,12 +442,12 @@ class WelcomePage {
|
|||
});
|
||||
TPromise.join(extensionSuggestion.isKeymap ? extensions.filter(extension => isKeymapExtension(this.tipsService, extension) && extension.globallyEnabled)
|
||||
.map(extension => {
|
||||
return this.extensionEnablementService.setEnablement(extension.identifier, false);
|
||||
return this.extensionEnablementService.setEnablement(extension.identifier, EnablementState.Disabled);
|
||||
}) : []).then(() => {
|
||||
return foundAndInstalled.then(found => {
|
||||
messageDelay.cancel();
|
||||
if (found) {
|
||||
return this.extensionEnablementService.setEnablement({ id: extensionSuggestion.id }, true)
|
||||
return this.extensionEnablementService.setEnablement({ id: extensionSuggestion.id }, EnablementState.Enabled)
|
||||
.then(() => {
|
||||
/* __GDPR__FRAGMENT__
|
||||
"WelcomePageInstalled-2" : {
|
||||
|
|
|
@ -13,8 +13,8 @@ import * as path from 'path';
|
|||
import URI from 'vs/base/common/uri';
|
||||
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry';
|
||||
import { IMessage, IExtensionDescription, IExtensionsStatus, IExtensionService, ExtensionPointContribution, ActivationTimes } from 'vs/platform/extensions/common/extensions';
|
||||
import { IExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { areSameExtensions, getGloballyDisabledExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { IExtensionEnablementService, IExtensionIdentifier, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { areSameExtensions, BetterMergeId, BetterMergeDisabledNowKey } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionsRegistry, ExtensionPoint, IExtensionPointUser, ExtensionMessageCollector, IExtensionPoint } from 'vs/platform/extensions/common/extensionsRegistry';
|
||||
import { ExtensionScanner, ILog } from 'vs/workbench/services/extensions/electron-browser/extensionPoints';
|
||||
import { IMessageService } from 'vs/platform/message/common/message';
|
||||
|
@ -309,52 +309,67 @@ export class ExtensionService implements IExtensionService {
|
|||
this._logOrShowMessage(severity, this._isDev ? messageWithSource2(source, message) : message);
|
||||
});
|
||||
|
||||
ExtensionService._scanInstalledExtensions(this._environmentService, log).then((installedExtensions) => {
|
||||
ExtensionService._scanInstalledExtensions(this._environmentService, log)
|
||||
.then((installedExtensions) => {
|
||||
|
||||
// Migrate enablement service to use identifiers
|
||||
this._extensionEnablementService.migrateToIdentifiers(installedExtensions);
|
||||
// Migrate enablement service to use identifiers
|
||||
this._extensionEnablementService.migrateToIdentifiers(installedExtensions);
|
||||
|
||||
const disabledExtensions = [
|
||||
...getGloballyDisabledExtensions(this._extensionEnablementService, this._storageService, installedExtensions),
|
||||
...this._extensionEnablementService.getWorkspaceDisabledExtensions()
|
||||
];
|
||||
return this._getDisabledExtensions()
|
||||
.then(disabledExtensions => {
|
||||
/* __GDPR__
|
||||
"extensionsScanned" : {
|
||||
"totalCount" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
|
||||
"disabledCount": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
|
||||
}
|
||||
*/
|
||||
this._telemetryService.publicLog('extensionsScanned', {
|
||||
totalCount: installedExtensions.length,
|
||||
disabledCount: disabledExtensions.length
|
||||
});
|
||||
|
||||
/* __GDPR__
|
||||
"extensionsScanned" : {
|
||||
"totalCount" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
|
||||
"disabledCount": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
|
||||
if (disabledExtensions.length === 0) {
|
||||
return installedExtensions;
|
||||
}
|
||||
return installedExtensions.filter(e => disabledExtensions.every(disabled => !areSameExtensions(disabled, e)));
|
||||
});
|
||||
|
||||
}).then((extensionDescriptions) => {
|
||||
this._registry = new ExtensionDescriptionRegistry(extensionDescriptions);
|
||||
|
||||
let availableExtensions = this._registry.getAllExtensionDescriptions();
|
||||
let extensionPoints = ExtensionsRegistry.getExtensionPoints();
|
||||
|
||||
let messageHandler = (msg: IMessage) => this._handleExtensionPointMessage(msg);
|
||||
|
||||
for (let i = 0, len = extensionPoints.length; i < len; i++) {
|
||||
const clock = time(`handleExtensionPoint:${extensionPoints[i].name}`);
|
||||
try {
|
||||
ExtensionService._handleExtensionPoint(extensionPoints[i], availableExtensions, messageHandler);
|
||||
} finally {
|
||||
clock.stop();
|
||||
}
|
||||
}
|
||||
*/
|
||||
this._telemetryService.publicLog('extensionsScanned', {
|
||||
totalCount: installedExtensions.length,
|
||||
disabledCount: disabledExtensions.length
|
||||
|
||||
mark('extensionHostReady');
|
||||
this._installedExtensionsReady.open();
|
||||
this._onDidRegisterExtensions.fire(availableExtensions);
|
||||
});
|
||||
}
|
||||
|
||||
if (disabledExtensions.length === 0) {
|
||||
return installedExtensions;
|
||||
}
|
||||
return installedExtensions.filter(e => disabledExtensions.every(disabled => !areSameExtensions(disabled, e)));
|
||||
|
||||
}).then((extensionDescriptions) => {
|
||||
this._registry = new ExtensionDescriptionRegistry(extensionDescriptions);
|
||||
|
||||
let availableExtensions = this._registry.getAllExtensionDescriptions();
|
||||
let extensionPoints = ExtensionsRegistry.getExtensionPoints();
|
||||
|
||||
let messageHandler = (msg: IMessage) => this._handleExtensionPointMessage(msg);
|
||||
|
||||
for (let i = 0, len = extensionPoints.length; i < len; i++) {
|
||||
const clock = time(`handleExtensionPoint:${extensionPoints[i].name}`);
|
||||
try {
|
||||
ExtensionService._handleExtensionPoint(extensionPoints[i], availableExtensions, messageHandler);
|
||||
} finally {
|
||||
clock.stop();
|
||||
private _getDisabledExtensions(): TPromise<IExtensionIdentifier[]> {
|
||||
return this._extensionEnablementService.getDisabledExtensions()
|
||||
.then(disabledExtensions => {
|
||||
const betterMergeExtensionIdentifier: IExtensionIdentifier = { id: BetterMergeId };
|
||||
if (disabledExtensions.some(d => d.id === betterMergeExtensionIdentifier.id)) {
|
||||
return disabledExtensions;
|
||||
}
|
||||
}
|
||||
mark('extensionHostReady');
|
||||
this._installedExtensionsReady.open();
|
||||
this._onDidRegisterExtensions.fire(availableExtensions);
|
||||
});
|
||||
return this._extensionEnablementService.setEnablement(betterMergeExtensionIdentifier, EnablementState.Disabled)
|
||||
.then(() => {
|
||||
this._storageService.store(BetterMergeDisabledNowKey, true);
|
||||
return [...disabledExtensions, betterMergeExtensionIdentifier];
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private _handleExtensionPointMessage(msg: IMessage) {
|
||||
|
|
Loading…
Reference in a new issue