Skip to content

Commit d04df06

Browse files
committed
Show web builtin extensions in server less
1 parent 9b38a98 commit d04df06

6 files changed

Lines changed: 119 additions & 58 deletions

File tree

src/vs/platform/extensions/common/builtinExtensions.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ let builtinExtensions: IExtension[] = [];
1212
// Web
1313
if (isWeb) {
1414

15-
// Built time configuration (do NOT modify)
16-
builtinExtensions = { /*BUILD->INSERT_BUILTIN_EXTENSIONS*/ } as IExtension[];
17-
1815
// Running out of sources
1916
if (Object.keys(builtinExtensions).length === 0) {
2017
// Find builtin extensions by checking for DOM
2118
const builtinExtensionsElement = document.getElementById('vscode-workbench-builtin-extensions');
2219
const builtinExtensionsElementAttribute = builtinExtensionsElement ? builtinExtensionsElement.getAttribute('data-settings') : undefined;
2320
if (builtinExtensionsElementAttribute) {
24-
builtinExtensions = JSON.parse(builtinExtensionsElementAttribute);
21+
try {
22+
builtinExtensions = JSON.parse(builtinExtensionsElementAttribute);
23+
} catch (error) { /* ignore error*/ }
2524
}
2625
}
2726
}

src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,10 @@ class ExtensionsContributions implements IWorkbenchContribution {
465465
@IExtensionManagementServerService extensionManagementServerService: IExtensionManagementServerService
466466
) {
467467

468-
const canManageExtensions = extensionManagementServerService.localExtensionManagementServer || extensionManagementServerService.remoteExtensionManagementServer;
469-
470-
if (canManageExtensions) {
468+
if (extensionManagementServerService.localExtensionManagementServer
469+
|| extensionManagementServerService.remoteExtensionManagementServer
470+
|| extensionManagementServerService.webExtensionManagementServer
471+
) {
471472
Registry.as<IQuickAccessRegistry>(Extensions.Quickaccess).registerQuickAccessProvider({
472473
ctor: InstallExtensionQuickAccessProvider,
473474
prefix: InstallExtensionQuickAccessProvider.PREFIX,

src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { IModeService } from 'vs/editor/common/services/modeService';
3838
import { IProductService } from 'vs/platform/product/common/productService';
3939
import { asDomUri } from 'vs/base/browser/dom';
4040
import { getIgnoredExtensions } from 'vs/platform/userDataSync/common/extensionsMerge';
41+
import { isWeb } from 'vs/base/common/platform';
4142

4243
interface IExtensionStateProvider<T> {
4344
(extension: Extension): T;
@@ -489,6 +490,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
489490

490491
private readonly localExtensions: Extensions | null = null;
491492
private readonly remoteExtensions: Extensions | null = null;
493+
private readonly webExtensions: Extensions | null = null;
492494
private syncDelayer: ThrottledDelayer<void>;
493495
private autoUpdateDelayer: ThrottledDelayer<void>;
494496

@@ -523,6 +525,10 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
523525
this.remoteExtensions = this._register(instantiationService.createInstance(Extensions, extensionManagementServerService.remoteExtensionManagementServer, ext => this.getExtensionState(ext)));
524526
this._register(this.remoteExtensions.onChange(e => this._onChange.fire(e ? e.extension : undefined)));
525527
}
528+
if (extensionManagementServerService.webExtensionManagementServer) {
529+
this.webExtensions = this._register(instantiationService.createInstance(Extensions, extensionManagementServerService.webExtensionManagementServer, ext => this.getExtensionState(ext)));
530+
this._register(this.webExtensions.onChange(e => this._onChange.fire(e ? e.extension : undefined)));
531+
}
526532

527533
this.syncDelayer = new ThrottledDelayer<void>(ExtensionsWorkbenchService.SyncPeriod);
528534
this.autoUpdateDelayer = new ThrottledDelayer<void>(1000);
@@ -563,6 +569,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
563569
if (this.remoteExtensions) {
564570
result.push(...this.remoteExtensions.local);
565571
}
572+
if (this.webExtensions) {
573+
result.push(...this.webExtensions.local);
574+
}
566575
return result;
567576
}
568577

@@ -574,6 +583,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
574583
if (this.remoteExtensions) {
575584
allLocal.push(...this.remoteExtensions.local);
576585
}
586+
if (this.webExtensions) {
587+
allLocal.push(...this.webExtensions.local);
588+
}
577589
return allLocal.filter(e => e.outdated && e.local && e.state === ExtensionState.Installed);
578590
}
579591

@@ -585,6 +597,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
585597
if (this.remoteExtensions && this.extensionManagementServerService.remoteExtensionManagementServer === server) {
586598
return this.remoteExtensions.queryInstalled();
587599
}
600+
if (this.webExtensions && this.extensionManagementServerService.webExtensionManagementServer === server) {
601+
return this.webExtensions.queryInstalled();
602+
}
588603
}
589604

590605
if (this.localExtensions) {
@@ -593,6 +608,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
593608
if (this.remoteExtensions) {
594609
await this.remoteExtensions.queryInstalled();
595610
}
611+
if (this.webExtensions) {
612+
await this.webExtensions.queryInstalled();
613+
}
596614
return this.local;
597615
}
598616

@@ -647,18 +665,18 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
647665
if (extensions.length === 1) {
648666
return extensions[0];
649667
}
650-
const pickRemoteOrFirstExtension = (from: IExtension[]): IExtension => {
651-
const remoteExtension = from.filter(e => e.server === this.extensionManagementServerService.remoteExtensionManagementServer)[0];
652-
return remoteExtension ? remoteExtension : from[0];
653-
};
654668
const enabledExtensions = extensions.filter(e => e.local && this.extensionEnablementService.isEnabled(e.local));
655-
return enabledExtensions.length === 1 ? enabledExtensions[0] : pickRemoteOrFirstExtension(extensions);
669+
if (enabledExtensions.length === 1) {
670+
return enabledExtensions[0];
671+
}
672+
return enabledExtensions.find(e => e.server === this.extensionManagementServerService.remoteExtensionManagementServer) || enabledExtensions[0];
656673
}
657674

658675
private fromGallery(gallery: IGalleryExtension, maliciousExtensionSet: Set<string>): IExtension {
659676
Promise.all([
660677
this.localExtensions ? this.localExtensions.syncLocalWithGalleryExtension(gallery, maliciousExtensionSet) : Promise.resolve(false),
661-
this.remoteExtensions ? this.remoteExtensions.syncLocalWithGalleryExtension(gallery, maliciousExtensionSet) : Promise.resolve(false)
678+
this.remoteExtensions ? this.remoteExtensions.syncLocalWithGalleryExtension(gallery, maliciousExtensionSet) : Promise.resolve(false),
679+
this.webExtensions ? this.webExtensions.syncLocalWithGalleryExtension(gallery, maliciousExtensionSet) : Promise.resolve(false)
662680
])
663681
.then(result => {
664682
if (result[0] || result[1]) {
@@ -695,7 +713,8 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
695713
private getExtensionState(extension: Extension): ExtensionState {
696714
const isInstalling = this.installing.some(i => areSameExtensions(i.identifier, extension.identifier));
697715
if (extension.server) {
698-
const state = (extension.server === this.extensionManagementServerService.localExtensionManagementServer ? this.localExtensions! : this.remoteExtensions!).getExtensionState(extension);
716+
const state = (extension.server === this.extensionManagementServerService.localExtensionManagementServer
717+
? this.localExtensions! : extension.server === this.extensionManagementServerService.remoteExtensionManagementServer ? this.remoteExtensions! : this.webExtensions!).getExtensionState(extension);
699718
return state === ExtensionState.Uninstalled && isInstalling ? ExtensionState.Installing : state;
700719
} else if (isInstalling) {
701720
return ExtensionState.Installing;
@@ -706,6 +725,12 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
706725
return state;
707726
}
708727
}
728+
if (this.webExtensions) {
729+
const state = this.webExtensions.getExtensionState(extension);
730+
if (state !== ExtensionState.Uninstalled) {
731+
return state;
732+
}
733+
}
709734
if (this.localExtensions) {
710735
return this.localExtensions.getExtensionState(extension);
711736
}
@@ -783,7 +808,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
783808
return false;
784809
}
785810

786-
if (this.extensionManagementServerService.localExtensionManagementServer || this.extensionManagementServerService.remoteExtensionManagementServer) {
811+
if (this.extensionManagementServerService.localExtensionManagementServer
812+
|| this.extensionManagementServerService.remoteExtensionManagementServer
813+
|| this.extensionManagementServerService.webExtensionManagementServer) {
787814
return true;
788815
}
789816

@@ -867,9 +894,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
867894
}
868895

869896
isExtensionIgnoredToSync(extension: IExtension): boolean {
870-
const localExtensions = (this.extensionManagementServerService.localExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer
871-
? this.local.filter(i => i.server === this.extensionManagementServerService.localExtensionManagementServer)
872-
: this.local)
897+
const localExtensions = (!isWeb && this.localExtensions ? this.localExtensions.local : this.local)
873898
.filter(l => !!l.local)
874899
.map(l => l.local!);
875900

@@ -1059,7 +1084,8 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
10591084
private _activityCallBack: (() => void) | null = null;
10601085
private updateActivity(): void {
10611086
if ((this.localExtensions && this.localExtensions.local.some(e => e.state === ExtensionState.Installing || e.state === ExtensionState.Uninstalling))
1062-
|| (this.remoteExtensions && this.remoteExtensions.local.some(e => e.state === ExtensionState.Installing || e.state === ExtensionState.Uninstalling))) {
1087+
|| (this.remoteExtensions && this.remoteExtensions.local.some(e => e.state === ExtensionState.Installing || e.state === ExtensionState.Uninstalling))
1088+
|| (this.webExtensions && this.webExtensions.local.some(e => e.state === ExtensionState.Installing || e.state === ExtensionState.Uninstalling))) {
10631089
if (!this._activityCallBack) {
10641090
this.progressService.withProgress({ location: ProgressLocation.Extensions }, () => new Promise(c => this._activityCallBack = c));
10651091
}

src/vs/workbench/services/extensionManagement/common/extensionEnablementService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
137137
}
138138

139139
private _isDisabledByExtensionKind(extension: IExtension): boolean {
140-
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
140+
if (this.extensionManagementServerService.remoteExtensionManagementServer || this.extensionManagementServerService.webExtensionManagementServer) {
141141
const server = this.extensionManagementServerService.getExtensionManagementServer(extension);
142142
for (const extensionKind of getExtensionKind(extension.manifest, this.productService, this.configurationService)) {
143143
if (extensionKind === 'ui') {

0 commit comments

Comments
 (0)