Merge branch 'main' into joh/webpack5

This commit is contained in:
Johannes Rieken 2021-07-02 16:14:52 +02:00
commit a76db8bb7e
No known key found for this signature in database
GPG key ID: 96634B5AF12F8798
14 changed files with 64 additions and 133 deletions

View file

@ -66,7 +66,6 @@ const vscodeResources = [
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
'out-build/vs/workbench/contrib/webview/browser/pre/*.js',
'out-build/vs/workbench/contrib/webview/electron-browser/pre/*.js',
'out-build/vs/workbench/services/extensions/worker/extensionHostWorkerMain.js',
'out-build/vs/**/markdown.css',
'out-build/vs/workbench/contrib/tasks/**/*.json',
'out-build/vs/platform/files/**/*.exe',

View file

@ -1,7 +1,7 @@
{
"name": "code-oss-dev",
"version": "1.59.0",
"distro": "3f0c5cff831c38cf9ef32ba2480a027e14c179e8",
"distro": "e14b9729b4534e76e19b294a34080f45b912a3b9",
"author": {
"name": "Microsoft Corporation"
},

View file

@ -2,12 +2,10 @@
"ban-eval-calls": [
"vs/workbench/api/worker/extHostExtensionService.ts",
"vs/base/worker/workerMain",
"vs/workbench/services/extensions/worker/extensionHostWorkerMain"
],
"ban-function-calls": [
"vs/workbench/api/worker/extHostExtensionService.ts",
"vs/base/worker/workerMain",
"vs/workbench/services/extensions/worker/extensionHostWorkerMain",
"vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts",
"vs/workbench/services/keybinding/test/electron-browser/keyboardMapperTestUtils.ts"
],
@ -27,7 +25,6 @@
"vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts",
"vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts",
"vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts",
"vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts"
],
"ban-worker-calls": [
"vs/base/worker/defaultWorkerFactory.ts",

View file

@ -71,10 +71,10 @@ class WebWorker implements IWorker {
}
this.postMessage(moduleId, []);
this.worker.then((w) => {
w.onmessage = function (ev: any) {
w.onmessage = function (ev) {
onMessageCallback(ev.data);
};
(<any>w).onmessageerror = onErrorCallback;
w.onmessageerror = onErrorCallback;
if (typeof w.addEventListener === 'function') {
w.addEventListener('error', onErrorCallback);
}

View file

@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self' https: data: blob: vscode-remote-resource:; media-src 'none'; frame-src 'self' vscode-webview:; object-src 'self'; script-src 'self' 'unsafe-eval' blob:; style-src 'self' 'unsafe-inline'; connect-src 'self' https: ws:; font-src 'self' https: vscode-remote-resource:;">
<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'; trusted-types TrustedFunctionWorkaround ExtensionScripts amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget editorGhostText domLineBreaksComputer editorViewLayer diffReview extensionHostWorker insane notebookRenderer safeInnerHtml standaloneColorizer tokenizeToString webNestedWorkerExtensionHost webWorkerExtensionHost;">
<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'; trusted-types TrustedFunctionWorkaround ExtensionScripts amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget editorGhostText domLineBreaksComputer editorViewLayer diffReview extensionHostWorker insane notebookRenderer safeInnerHtml standaloneColorizer tokenizeToString webNestedWorkerExtensionHost;">
</head>
<body aria-label="">
</body>

View file

@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self' https: data: blob: vscode-remote-resource:; media-src 'none'; frame-src 'self' vscode-webview:; object-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' https: ws:; font-src 'self' https: vscode-remote-resource:;">
<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'; trusted-types TrustedFunctionWorkaround ExtensionScripts amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget editorGhostText domLineBreaksComputer editorViewLayer diffReview extensionHostWorker insane notebookRenderer safeInnerHtml standaloneColorizer tokenizeToString webNestedWorkerExtensionHost webWorkerExtensionHost;">
<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'; trusted-types TrustedFunctionWorkaround ExtensionScripts amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget editorGhostText domLineBreaksComputer editorViewLayer diffReview extensionHostWorker insane notebookRenderer safeInnerHtml standaloneColorizer tokenizeToString webNestedWorkerExtensionHost;">
</head>
<body aria-label="">
</body>

View file

@ -261,6 +261,16 @@ export abstract class AbstractFileDialogService implements IFileDialogService {
abstract pickFileAndOpen(options: IPickAndOpenOptions): Promise<void>;
abstract pickFolderAndOpen(options: IPickAndOpenOptions): Promise<void>;
abstract pickWorkspaceAndOpen(options: IPickAndOpenOptions): Promise<void>;
protected getWorkspaceAvailableFileSystems(options: IPickAndOpenOptions): string[] {
if (options.availableFileSystems && (options.availableFileSystems.length > 0)) {
return options.availableFileSystems;
}
const availableFileSystems = [Schemas.file];
if (this.environmentService.remoteAuthority) {
availableFileSystems.unshift(Schemas.vscodeRemote);
}
return availableFileSystems;
}
abstract showSaveDialog(options: ISaveDialogOptions): Promise<URI | undefined>;
abstract showOpenDialog(options: IOpenDialogOptions): Promise<URI[] | undefined>;

View file

@ -69,6 +69,7 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
}
async pickWorkspaceAndOpen(options: IPickAndOpenOptions): Promise<void> {
options.availableFileSystems = this.getWorkspaceAvailableFileSystems(options);
const schema = this.getFileSystemSchema(options);
if (!options.defaultUri) {

View file

@ -104,6 +104,7 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
}
async pickWorkspaceAndOpen(options: IPickAndOpenOptions): Promise<void> {
options.availableFileSystems = this.getWorkspaceAvailableFileSystems(options);
const schema = this.getFileSystemSchema(options);
if (!options.defaultUri) {

View file

@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { getWorkerBootstrapUrl } from 'vs/base/worker/defaultWorkerFactory';
import { DefaultWorkerFactory } from 'vs/base/worker/defaultWorkerFactory';
import { Emitter, Event } from 'vs/base/common/event';
import { toDisposable, Disposable } from 'vs/base/common/lifecycle';
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc';
@ -28,7 +28,6 @@ import { localize } from 'vs/nls';
import { generateUuid } from 'vs/base/common/uuid';
import { canceled, onUnexpectedError } from 'vs/base/common/errors';
import { Barrier } from 'vs/base/common/async';
import { FileAccess } from 'vs/base/common/network';
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
import { NewWorkerMessage, TerminateWorkerMessage } from 'vs/workbench/services/extensions/common/polyfillNestedWorker.protocol';
@ -41,8 +40,6 @@ export interface IWebWorkerExtensionHostDataProvider {
getInitData(): Promise<IWebWorkerExtensionHostInitData>;
}
const ttPolicy = window.trustedTypes?.createPolicy('webWorkerExtensionHost', { createScriptURL: value => value });
const ttPolicyNestedWorker = window.trustedTypes?.createPolicy('webNestedWorkerExtensionHost', {
createScriptURL(value) {
if (value.startsWith('blob:')) {
@ -240,51 +237,52 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost
private async _startOutsideIframe(): Promise<IMessagePassingProtocol> {
const emitter = new Emitter<VSBuffer>();
const url = getWorkerBootstrapUrl(FileAccess.asBrowserUri('../worker/extensionHostWorkerMain.js', require).toString(true), 'WorkerExtensionHost');
const worker = new Worker(ttPolicy?.createScriptURL(url) as unknown as string ?? url, { name: 'WorkerExtensionHost' });
const barrier = new Barrier();
let port!: MessagePort;
const nestedWorker = new Map<string, Worker>();
worker.onmessage = (event) => {
const worker = new DefaultWorkerFactory('WorkerExtensionHost').create(
'vs/workbench/services/extensions/worker/extensionHostWorker',
(data: MessagePort | NewWorkerMessage | TerminateWorkerMessage | any) => {
const data: MessagePort | NewWorkerMessage | TerminateWorkerMessage = event.data;
if (data instanceof MessagePort) {
// receiving a message port which is used to communicate
// with the web worker extension host
if (barrier.isOpen()) {
console.warn('UNEXPECTED message', data);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, 'received a message port AFTER opening the barrier']);
return;
}
port = data;
barrier.open();
if (data instanceof MessagePort) {
// receiving a message port which is used to communicate
// with the web worker extension host
if (barrier.isOpen()) {
console.warn('UNEXPECTED message', event);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, 'received a message port AFTER opening the barrier']);
return;
} else if (data?.type === '_newWorker') {
// receiving a message to create a new nested/child worker
const worker = new Worker((ttPolicyNestedWorker?.createScriptURL(data.url) ?? data.url) as string, data.options);
worker.postMessage(data.port, [data.port]);
worker.onerror = console.error.bind(console);
nestedWorker.set(data.id, worker);
} else if (data?.type === '_terminateWorker') {
// receiving a message to terminate nested/child worker
if (nestedWorker.has(data.id)) {
nestedWorker.get(data.id)!.terminate();
nestedWorker.delete(data.id);
}
} else {
// all other messages are an error
console.warn('UNEXPECTED message', data);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, 'UNEXPECTED message']);
}
port = data;
barrier.open();
} else if (data?.type === '_newWorker') {
// receiving a message to create a new nested/child worker
const worker = new Worker((ttPolicyNestedWorker?.createScriptURL(data.url) ?? data.url) as string, data.options);
worker.postMessage(data.port, [data.port]);
worker.onerror = console.error.bind(console);
nestedWorker.set(data.id, worker);
} else if (data?.type === '_terminateWorker') {
// receiving a message to terminate nested/child worker
if (nestedWorker.has(data.id)) {
nestedWorker.get(data.id)!.terminate();
nestedWorker.delete(data.id);
}
} else {
// all other messages are an error
console.warn('UNEXPECTED message', event);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, 'UNEXPECTED message']);
},
(event: any) => {
console.error(event.message, event.error);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, event.message || event.error]);
}
};
);
// await MessagePort and use it to directly communicate
// with the worker extension host
@ -301,14 +299,10 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost
emitter.fire(VSBuffer.wrap(new Uint8Array(data, 0, data.byteLength)));
};
worker.onerror = (event) => {
console.error(event.message, event.error);
this._onDidExit.fire([ExtensionHostExitCode.UnexpectedError, event.message || event.error]);
};
// keep for cleanup
this._register(emitter);
this._register(toDisposable(() => worker.terminate()));
this._register(worker);
const protocol: IMessagePassingProtocol = {
onMessage: emitter.event,

View file

@ -160,7 +160,7 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
let onTerminate = (reason: string) => nativeClose();
(function create(): void {
export function create(): void {
const res = new ExtensionWorker();
performance.mark(`code/extHost/willConnectToRenderer`);
connectToRenderer(res.protocol).then(data => {
@ -174,4 +174,4 @@ let onTerminate = (reason: string) => nativeClose();
onTerminate = (reason: string) => extHostMain.terminate(reason);
});
})();
}

View file

@ -1,73 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
(function () {
const MonacoEnvironment = (<any>self).MonacoEnvironment;
const monacoBaseUrl = MonacoEnvironment && MonacoEnvironment.baseUrl ? MonacoEnvironment.baseUrl : '../../../../../';
const trustedTypesPolicy = (
typeof self.trustedTypes?.createPolicy === 'function'
? self.trustedTypes?.createPolicy('amdLoader', {
createScriptURL: value => value,
createScript: (_, ...args: string[]) => {
// workaround a chrome issue not allowing to create new functions
// see https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor
const fnArgs = args.slice(0, -1).join(',');
const fnBody = args.pop()!.toString();
const body = `(function anonymous(${fnArgs}) {\n${fnBody}\n})`;
return body;
}
})
: undefined
);
function loadAMDLoader() {
return new Promise<void>((resolve, reject) => {
if (typeof (<any>self).define === 'function' && (<any>self).define.amd) {
return resolve();
}
const loaderSrc: string | TrustedScriptURL = monacoBaseUrl + 'vs/loader.js';
const isCrossOrigin = (/^((http:)|(https:)|(file:))/.test(loaderSrc) && loaderSrc.substring(0, self.origin.length) !== self.origin);
if (!isCrossOrigin) {
// use `fetch` if possible because `importScripts`
// is synchronous and can lead to deadlocks on Safari
fetch(loaderSrc).then((response) => {
if (response.status !== 200) {
throw new Error(response.statusText);
}
return response.text();
}).then((text) => {
text = `${text}\n//# sourceURL=${loaderSrc}`;
const func = (
trustedTypesPolicy
? self.eval(trustedTypesPolicy.createScript('', text) as unknown as string)
: new Function(text)
);
func.call(self);
resolve();
}).then(undefined, reject);
return;
}
if (trustedTypesPolicy) {
importScripts(trustedTypesPolicy.createScriptURL(loaderSrc) as unknown as string);
} else {
importScripts(loaderSrc as string);
}
resolve();
});
}
loadAMDLoader().then(() => {
require.config({
baseUrl: monacoBaseUrl,
catchError: true,
trustedTypesPolicy
});
require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err));
}).then(undefined, (err) => console.error(err));
})();

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; child-src 'self' data: blob:; script-src 'unsafe-eval' 'sha256-LU+tuagpyx5mKuYgHsSvz9593ZGS6yeLPRvzq1lKXlY=' http: https:; connect-src http: https: ws: wss:" />
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; child-src 'self' data: blob:; script-src 'unsafe-eval' 'sha256-aDlQzEe5g5XojMbJDQAhOLlZH3hqRK3lIqcKjLOFFEA=' http: https:; connect-src http: https: ws: wss:" />
</head>
<body>
<script>
@ -21,7 +21,8 @@
}
try {
const worker = new Worker('extensionHostWorkerMain.js', { name: 'WorkerExtensionHost' });
const worker = new Worker('../../../../base/worker/workerMain.js', { name: 'WorkerExtensionHost' });
worker.postMessage('vs/workbench/services/extensions/worker/extensionHostWorker');
const nestedWorkers = new Map();
worker.onmessage = (event) => {

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; child-src 'self' data: blob:; script-src 'unsafe-eval' 'sha256-LU+tuagpyx5mKuYgHsSvz9593ZGS6yeLPRvzq1lKXlY=' https:; connect-src https: wss:" />
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; child-src 'self' data: blob:; script-src 'unsafe-eval' 'sha256-aDlQzEe5g5XojMbJDQAhOLlZH3hqRK3lIqcKjLOFFEA=' https:; connect-src https: wss:" />
</head>
<body>
<script>
@ -21,7 +21,8 @@
}
try {
const worker = new Worker('extensionHostWorkerMain.js', { name: 'WorkerExtensionHost' });
const worker = new Worker('../../../../base/worker/workerMain.js', { name: 'WorkerExtensionHost' });
worker.postMessage('vs/workbench/services/extensions/worker/extensionHostWorker');
const nestedWorkers = new Map();
worker.onmessage = (event) => {