@@ -38,6 +38,7 @@ import { IModeService } from 'vs/editor/common/services/modeService';
3838import { IProductService } from 'vs/platform/product/common/productService' ;
3939import { asDomUri } from 'vs/base/browser/dom' ;
4040import { getIgnoredExtensions } from 'vs/platform/userDataSync/common/extensionsMerge' ;
41+ import { isWeb } from 'vs/base/common/platform' ;
4142
4243interface 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 }
0 commit comments