@@ -12,15 +12,31 @@ import { ExtensionHostMain } from 'vs/workbench/services/extensions/common/exten
1212import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService' ;
1313import 'vs/workbench/services/extensions/worker/extHost.services' ;
1414
15- // worker-self
15+ //#region --- Define, capture, and override some globals
16+ //todo@joh do not allow extensions to call postMessage and other globals...
17+
1618declare namespace self {
17- function close ( ) : void ;
19+ let close : any ;
20+ let postMessage : any ;
21+ let addEventLister : any ;
22+ let indexedDB : any ;
23+ let caches : any ;
1824}
1925
20- // do not allow extensions to call terminate
2126const nativeClose = self . close . bind ( self ) ;
22- self . close = ( ) => console . trace ( 'An extension called terminate and this was prevented' ) ;
23- let onTerminate = nativeClose ;
27+ self . close = ( ) => console . trace ( `'close' has been blocked` ) ;
28+
29+ const nativePostMessage = postMessage . bind ( self ) ;
30+ self . postMessage = ( ) => console . trace ( `'postMessage' has been blocked` ) ;
31+
32+ const nativeAddEventLister = addEventListener . bind ( self ) ;
33+ self . addEventLister = ( ) => console . trace ( `'addEventListener' has been blocked` ) ;
34+
35+ // readonly, cannot redefine...
36+ // self.indexedDB = undefined;
37+ // self.caches = undefined;
38+
39+ //#endregion ---
2440
2541const hostUtil = new class implements IHostUtils {
2642 _serviceBrand : any ;
@@ -35,7 +51,6 @@ const hostUtil = new class implements IHostUtils {
3551 }
3652} ;
3753
38- //todo@joh do not allow extensions to call postMessage and other globals...
3954
4055class ExtensionWorker {
4156
@@ -47,7 +62,8 @@ class ExtensionWorker {
4762 let emitter = new Emitter < VSBuffer > ( ) ;
4863 let terminating = false ;
4964
50- onmessage = event => {
65+
66+ nativeAddEventLister ( 'message' , event => {
5167 const { data } = event ;
5268 if ( ! ( data instanceof ArrayBuffer ) ) {
5369 console . warn ( 'UNKNOWN data received' , data ) ;
@@ -64,14 +80,14 @@ class ExtensionWorker {
6480
6581 // emit non-terminate messages to the outside
6682 emitter . fire ( msg ) ;
67- } ;
83+ } ) ;
6884
6985 this . protocol = {
7086 onMessage : emitter . event ,
7187 send : vsbuf => {
7288 if ( ! terminating ) {
7389 const data = vsbuf . buffer . buffer . slice ( vsbuf . buffer . byteOffset , vsbuf . buffer . byteOffset + vsbuf . buffer . byteLength ) ;
74- postMessage ( data , [ data ] ) ;
90+ nativePostMessage ( data , [ data ] ) ;
7591 }
7692 }
7793 } ;
@@ -94,6 +110,8 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
94110 } ) ;
95111}
96112
113+ let onTerminate = nativeClose ;
114+
97115( function create ( ) : void {
98116 const res = new ExtensionWorker ( ) ;
99117
0 commit comments