提交 82d915c2 编写于 作者: J Johannes Rieken

worker - block some globals from being used

上级 df880b04
......@@ -12,15 +12,31 @@ import { ExtensionHostMain } from 'vs/workbench/services/extensions/common/exten
import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService';
import 'vs/workbench/services/extensions/worker/extHost.services';
// worker-self
//#region --- Define, capture, and override some globals
//todo@joh do not allow extensions to call postMessage and other globals...
declare namespace self {
function close(): void;
let close: any;
let postMessage: any;
let addEventLister: any;
let indexedDB: any;
let caches: any;
}
// do not allow extensions to call terminate
const nativeClose = self.close.bind(self);
self.close = () => console.trace('An extension called terminate and this was prevented');
let onTerminate = nativeClose;
self.close = () => console.trace(`'close' has been blocked`);
const nativePostMessage = postMessage.bind(self);
self.postMessage = () => console.trace(`'postMessage' has been blocked`);
const nativeAddEventLister = addEventListener.bind(self);
self.addEventLister = () => console.trace(`'addEventListener' has been blocked`);
// readonly, cannot redefine...
// self.indexedDB = undefined;
// self.caches = undefined;
//#endregion ---
const hostUtil = new class implements IHostUtils {
_serviceBrand: any;
......@@ -35,7 +51,6 @@ const hostUtil = new class implements IHostUtils {
}
};
//todo@joh do not allow extensions to call postMessage and other globals...
class ExtensionWorker {
......@@ -47,7 +62,8 @@ class ExtensionWorker {
let emitter = new Emitter<VSBuffer>();
let terminating = false;
onmessage = event => {
nativeAddEventLister('message', event => {
const { data } = event;
if (!(data instanceof ArrayBuffer)) {
console.warn('UNKNOWN data received', data);
......@@ -64,14 +80,14 @@ class ExtensionWorker {
// emit non-terminate messages to the outside
emitter.fire(msg);
};
});
this.protocol = {
onMessage: emitter.event,
send: vsbuf => {
if (!terminating) {
const data = vsbuf.buffer.buffer.slice(vsbuf.buffer.byteOffset, vsbuf.buffer.byteOffset + vsbuf.buffer.byteLength);
postMessage(data, [data]);
nativePostMessage(data, [data]);
}
}
};
......@@ -94,6 +110,8 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
});
}
let onTerminate = nativeClose;
(function create(): void {
const res = new ExtensionWorker();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册