/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ /// //@ts-check (function () { 'use strict'; const bootstrapWindow = bootstrapWindowLib(); // Add a perf entry right from the top performance.mark('code/didStartRenderer'); // Load workbench main JS, CSS and NLS all in parallel. This is an // optimization to prevent a waterfall of loading to happen, because // we know for a fact that workbench.desktop.sandbox.main will depend on // the related CSS and NLS counterparts. bootstrapWindow.load([ 'vs/workbench/workbench.desktop.sandbox.main', 'vs/nls!vs/workbench/workbench.desktop.main', 'vs/css!vs/workbench/workbench.desktop.main' ], function (_, configuration) { // Mark start of workbench performance.mark('code/didLoadWorkbenchMain'); // @ts-ignore return require('vs/workbench/electron-sandbox/desktop.main').main(configuration); }, { configureDeveloperSettings: function (windowConfig) { return { // disable automated devtools opening on error when running extension tests // as this can lead to undeterministic test exectuion (devtools steals focus) forceDisableShowDevtoolsOnError: typeof windowConfig.extensionTestsPath === 'string', // enable devtools keybindings in extension development window forceEnableDeveloperKeybindings: Array.isArray(windowConfig.extensionDevelopmentPath) && windowConfig.extensionDevelopmentPath.length > 0, removeDeveloperKeybindingsAfterLoad: true }; }, canModifyDOM: function (windowConfig) { // TODO@sandbox part-splash is non-sandboxed only }, beforeLoaderConfig: function (loaderConfig) { loaderConfig.recordStats = true; }, beforeRequire: function () { performance.mark('code/willLoadWorkbenchMain'); // It looks like browsers only lazily enable // the element when needed. Since we // leverage canvas elements in our code in many // locations, we try to help the browser to // initialize canvas when it is idle, right // before we wait for the scripts to be loaded. // @ts-ignore window.requestIdleCallback(() => { const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); context.clearRect(0, 0, canvas.width, canvas.height); canvas.remove(); }, { timeout: 50 }); } } ); // add default trustedTypes-policy for logging and to workaround // lib/platform limitations window.trustedTypes?.createPolicy('default', { createHTML(value) { // see https://github.com/electron/electron/issues/27211 // Electron webviews use a static innerHTML default value and // that isn't trusted. We use a default policy to check for the // exact value of that innerHTML-string and only allow that. if (value === '') { return value; } throw new Error('UNTRUSTED html usage, default trusted types policy should NEVER be reached'); // console.trace('UNTRUSTED html usage, default trusted types policy should NEVER be reached'); // return value; } }); //#region Helpers /** * @typedef {import('../../../platform/windows/common/windows').INativeWindowConfiguration} INativeWindowConfiguration * * @returns {{ * load: ( * modules: string[], * resultCallback: (result, configuration: INativeWindowConfiguration) => unknown, * options?: { * configureDeveloperSettings?: (config: INativeWindowConfiguration & object) => { * forceEnableDeveloperKeybindings?: boolean, * disallowReloadKeybinding?: boolean, * removeDeveloperKeybindingsAfterLoad?: boolean * }, * canModifyDOM?: (config: INativeWindowConfiguration & object) => void, * beforeLoaderConfig?: (loaderConfig: object) => void, * beforeRequire?: () => void * } * ) => Promise * }} */ function bootstrapWindowLib() { // @ts-ignore (defined in bootstrap-window.js) return window.MonacoBootstrapWindow; } //#endregion }());