mirror of
https://github.com/Microsoft/vscode
synced 2024-10-02 09:18:59 +00:00
Add a setting to enable sandbox: true
for windows (#154062)
* sandbox - allow enabled sandbox in a full build * sandbox - reduce `electron-browser` in workbench * sandbox - reduce `electron-browser` in platform * sandbox - add a setting to enable sandbox mode for window * fix lint * Revert "sandbox - reduce `electron-browser` in workbench" This reverts commit36a5167cf9
. * Revert "sandbox - reduce `electron-browser` in platform" This reverts commit6f49d704a5
. * fix layer issue * fix some js errors
This commit is contained in:
parent
7b69a3c4e1
commit
f4f1b04d87
|
@ -537,7 +537,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"target": "src/vs/workbench/{workbench.sandbox.main.ts,workbench.desktop.sandbox.main.ts}",
|
||||
"target": "src/vs/workbench/workbench.desktop.main.ts",
|
||||
"layer": "electron-sandbox",
|
||||
"restrictions": [
|
||||
"vs/base/*/~",
|
||||
|
@ -550,26 +550,7 @@
|
|||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/workbench.common.main",
|
||||
"vs/workbench/workbench.sandbox.main"
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "src/vs/workbench/workbench.desktop.main.ts",
|
||||
"layer": "electron-browser",
|
||||
"restrictions": [
|
||||
"vs/base/*/~",
|
||||
"vs/base/parts/*/~",
|
||||
"vs/platform/*/~",
|
||||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/editor/editor.all",
|
||||
"vs/workbench/~",
|
||||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/workbench.common.main",
|
||||
"vs/workbench/workbench.sandbox.main"
|
||||
"vs/workbench/workbench.common.main"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
@ -76,7 +76,7 @@ const vscodeResources = [
|
|||
'out-build/vs/workbench/contrib/tasks/**/*.json',
|
||||
'out-build/vs/platform/files/**/*.exe',
|
||||
'out-build/vs/platform/files/**/*.md',
|
||||
'out-build/vs/code/electron-browser/workbench/**',
|
||||
'out-build/vs/code/electron-sandbox/workbench/**',
|
||||
'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js',
|
||||
'out-build/vs/code/electron-sandbox/issue/issueReporter.js',
|
||||
'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.js',
|
||||
|
@ -165,8 +165,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
|
|||
'vs/workbench/workbench.desktop.main.js',
|
||||
'vs/workbench/workbench.desktop.main.css',
|
||||
'vs/workbench/api/node/extensionHostProcess.js',
|
||||
'vs/code/electron-browser/workbench/workbench.html',
|
||||
'vs/code/electron-browser/workbench/workbench.js'
|
||||
'vs/code/electron-sandbox/workbench/workbench.html',
|
||||
'vs/code/electron-sandbox/workbench/workbench.js'
|
||||
]);
|
||||
|
||||
const src = gulp.src(out + '/**', { base: '.' })
|
||||
|
|
|
@ -72,6 +72,11 @@ const RULES = [
|
|||
target: '**/vs/**/test/**',
|
||||
skip: true // -> skip all test files
|
||||
},
|
||||
// TODO@bpasero remove me once electron utility process has landed
|
||||
{
|
||||
target: '**/vs/workbench/services/extensions/electron-sandbox/nativeLocalProcessExtensionHost.ts',
|
||||
skip: true
|
||||
},
|
||||
// Common: vs/base/common/platform.ts
|
||||
{
|
||||
target: '**/vs/base/common/platform.ts',
|
||||
|
|
|
@ -77,6 +77,12 @@ const RULES: IRule[] = [
|
|||
skip: true // -> skip all test files
|
||||
},
|
||||
|
||||
// TODO@bpasero remove me once electron utility process has landed
|
||||
{
|
||||
target: '**/vs/workbench/services/extensions/electron-sandbox/nativeLocalProcessExtensionHost.ts',
|
||||
skip: true
|
||||
},
|
||||
|
||||
// Common: vs/base/common/platform.ts
|
||||
{
|
||||
target: '**/vs/base/common/platform.ts',
|
||||
|
|
2
src/bootstrap.js
vendored
2
src/bootstrap.js
vendored
|
@ -205,7 +205,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* @returns {import('./vs/base/parts/sandbox/electron-sandbox/globals').ISandboxNodeProcess | NodeJS.Process}
|
||||
* @returns {import('./vs/base/parts/sandbox/electron-sandbox/globals').ISandboxNodeProcess | NodeJS.Process | undefined}
|
||||
*/
|
||||
function safeProcess() {
|
||||
const sandboxGlobals = safeSandboxGlobals();
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { createHash } from 'crypto';
|
||||
import { createConnection, createServer, Server as NetServer, Socket } from 'net';
|
||||
import { tmpdir } from 'os';
|
||||
// import { createHash } from 'crypto';
|
||||
import type { Server as NetServer, Socket } from 'net';
|
||||
// import { tmpdir } from 'os';
|
||||
import type * as zlib from 'zlib';
|
||||
import { VSBuffer } from 'vs/base/common/buffer';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
|
@ -15,7 +16,16 @@ import { Platform, platform } from 'vs/base/common/platform';
|
|||
import { generateUuid } from 'vs/base/common/uuid';
|
||||
import { ClientConnectionEvent, IPCServer } from 'vs/base/parts/ipc/common/ipc';
|
||||
import { ChunkStream, Client, ISocket, Protocol, SocketCloseEvent, SocketCloseEventType, SocketDiagnostics, SocketDiagnosticsEventType } from 'vs/base/parts/ipc/common/ipc.net';
|
||||
import * as zlib from 'zlib';
|
||||
|
||||
// TODO@bpasero remove me once electron utility process has landed
|
||||
function getNodeDependencies() {
|
||||
return {
|
||||
crypto: (require.__$__nodeRequire('crypto') as any) as typeof import('crypto'),
|
||||
zlib: (require.__$__nodeRequire('zlib') as any) as typeof import('zlib'),
|
||||
net: (require.__$__nodeRequire('net') as any) as typeof import('net'),
|
||||
os: (require.__$__nodeRequire('os') as any) as typeof import('os')
|
||||
};
|
||||
}
|
||||
|
||||
export class NodeSocket implements ISocket {
|
||||
|
||||
|
@ -580,7 +590,7 @@ class ZlibInflateStream extends Disposable {
|
|||
options: zlib.ZlibOptions
|
||||
) {
|
||||
super();
|
||||
this._zlibInflate = zlib.createInflateRaw(options);
|
||||
this._zlibInflate = getNodeDependencies().zlib.createInflateRaw(options);
|
||||
this._zlibInflate.on('error', (err) => {
|
||||
this._tracer.traceSocketEvent(SocketDiagnosticsEventType.zlibInflateError, { message: err?.message, code: (<any>err)?.code });
|
||||
this._onError.fire(err);
|
||||
|
@ -631,7 +641,7 @@ class ZlibDeflateStream extends Disposable {
|
|||
) {
|
||||
super();
|
||||
|
||||
this._zlibDeflate = zlib.createDeflateRaw({
|
||||
this._zlibDeflate = getNodeDependencies().zlib.createDeflateRaw({
|
||||
windowBits: 15
|
||||
});
|
||||
this._zlibDeflate.on('error', (err) => {
|
||||
|
@ -692,7 +702,8 @@ function unmask(buffer: VSBuffer, mask: number): void {
|
|||
|
||||
// Read this before there's any chance it is overwritten
|
||||
// Related to https://github.com/microsoft/vscode/issues/30624
|
||||
export const XDG_RUNTIME_DIR = <string | undefined>process.env['XDG_RUNTIME_DIR'];
|
||||
// TODO@bpasero revert me once electron utility process has landed
|
||||
export const XDG_RUNTIME_DIR = typeof process !== 'undefined' ? <string | undefined>process.env['XDG_RUNTIME_DIR'] : undefined;
|
||||
|
||||
const safeIpcPathLengths: { [platform: number]: number } = {
|
||||
[Platform.Linux]: 107,
|
||||
|
@ -713,7 +724,7 @@ export function createRandomIPCHandle(): string {
|
|||
if (XDG_RUNTIME_DIR) {
|
||||
result = join(XDG_RUNTIME_DIR, `vscode-ipc-${randomSuffix}.sock`);
|
||||
} else {
|
||||
result = join(tmpdir(), `vscode-ipc-${randomSuffix}.sock`);
|
||||
result = join(getNodeDependencies().os.tmpdir(), `vscode-ipc-${randomSuffix}.sock`);
|
||||
}
|
||||
|
||||
// Validate length
|
||||
|
@ -723,7 +734,7 @@ export function createRandomIPCHandle(): string {
|
|||
}
|
||||
|
||||
export function createStaticIPCHandle(directoryPath: string, type: string, version: string): string {
|
||||
const scope = createHash('md5').update(directoryPath).digest('hex');
|
||||
const scope = getNodeDependencies().crypto.createHash('md5').update(directoryPath).digest('hex');
|
||||
|
||||
// Windows: use named pipe
|
||||
if (process.platform === 'win32') {
|
||||
|
@ -785,7 +796,7 @@ export function serve(port: number): Promise<Server>;
|
|||
export function serve(namedPipe: string): Promise<Server>;
|
||||
export function serve(hook: any): Promise<Server> {
|
||||
return new Promise<Server>((c, e) => {
|
||||
const server = createServer();
|
||||
const server = getNodeDependencies().net.createServer();
|
||||
|
||||
server.on('error', e);
|
||||
server.listen(hook, () => {
|
||||
|
@ -800,7 +811,7 @@ export function connect(port: number, clientId: string): Promise<Client>;
|
|||
export function connect(namedPipe: string, clientId: string): Promise<Client>;
|
||||
export function connect(hook: any, clientId: string): Promise<Client> {
|
||||
return new Promise<Client>((c, e) => {
|
||||
const socket = createConnection(hook, () => {
|
||||
const socket = getNodeDependencies().net.createConnection(hook, () => {
|
||||
socket.removeListener('error', e);
|
||||
c(Client.fromSocket(new NodeSocket(socket, `ipc-client${clientId}`), clientId));
|
||||
});
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<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 'self'; 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 amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget editorGhostText domLineBreaksComputer editorViewLayer diffReview dompurify notebookRenderer safeInnerHtml standaloneColorizer tokenizeToString;">
|
||||
</head>
|
||||
<body aria-label="">
|
||||
</body>
|
||||
|
||||
<!-- Init Bootstrap Helpers -->
|
||||
<script src="../../../../bootstrap.js"></script>
|
||||
<script src="../../../../vs/loader.js"></script>
|
||||
<script src="../../../../bootstrap-window.js"></script>
|
||||
|
||||
<!-- Startup via workbench.js -->
|
||||
<script src="workbench.js"></script>
|
||||
</html>
|
|
@ -1,213 +0,0 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
/// <reference path="../../../../typings/require.d.ts" />
|
||||
|
||||
//@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.main will depend on
|
||||
// the related CSS and NLS counterparts.
|
||||
bootstrapWindow.load([
|
||||
'vs/workbench/workbench.desktop.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 nondeterministic test execution (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) {
|
||||
showSplash(windowConfig);
|
||||
},
|
||||
beforeLoaderConfig: function (loaderConfig) {
|
||||
loaderConfig.recordStats = true;
|
||||
},
|
||||
beforeRequire: function () {
|
||||
performance.mark('code/willLoadWorkbenchMain');
|
||||
|
||||
// It looks like browsers only lazily enable
|
||||
// the <canvas> 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 });
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
//#region Helpers
|
||||
|
||||
/**
|
||||
* @typedef {import('../../../platform/window/common/window').INativeWindowConfiguration} INativeWindowConfiguration
|
||||
* @typedef {import('../../../platform/environment/common/argv').NativeParsedArgs} NativeParsedArgs
|
||||
*
|
||||
* @returns {{
|
||||
* load: (
|
||||
* modules: string[],
|
||||
* resultCallback: (result, configuration: INativeWindowConfiguration & NativeParsedArgs) => unknown,
|
||||
* options?: {
|
||||
* configureDeveloperSettings?: (config: INativeWindowConfiguration & NativeParsedArgs) => {
|
||||
* forceDisableShowDevtoolsOnError?: boolean,
|
||||
* forceEnableDeveloperKeybindings?: boolean,
|
||||
* disallowReloadKeybinding?: boolean,
|
||||
* removeDeveloperKeybindingsAfterLoad?: boolean
|
||||
* },
|
||||
* canModifyDOM?: (config: INativeWindowConfiguration & NativeParsedArgs) => void,
|
||||
* beforeLoaderConfig?: (loaderConfig: object) => void,
|
||||
* beforeRequire?: () => void
|
||||
* }
|
||||
* ) => Promise<unknown>
|
||||
* }}
|
||||
*/
|
||||
function bootstrapWindowLib() {
|
||||
// @ts-ignore (defined in bootstrap-window.js)
|
||||
return window.MonacoBootstrapWindow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {INativeWindowConfiguration & NativeParsedArgs} configuration
|
||||
*/
|
||||
function showSplash(configuration) {
|
||||
performance.mark('code/willShowPartsSplash');
|
||||
|
||||
let data = configuration.partsSplash;
|
||||
|
||||
if (data) {
|
||||
// high contrast mode has been turned by the OS -> ignore stored colors and layouts
|
||||
if (configuration.autoDetectHighContrast && configuration.colorScheme.highContrast) {
|
||||
if ((configuration.colorScheme.dark && data.baseTheme !== 'hc-black') || (!configuration.colorScheme.dark && data.baseTheme !== 'hc-light')) {
|
||||
data = undefined;
|
||||
}
|
||||
} else if (configuration.autoDetectColorScheme) {
|
||||
// OS color scheme is tracked and has changed
|
||||
if ((configuration.colorScheme.dark && data.baseTheme !== 'vs-dark') || (!configuration.colorScheme.dark && data.baseTheme !== 'vs')) {
|
||||
data = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// developing an extension -> ignore stored layouts
|
||||
if (data && configuration.extensionDevelopmentPath) {
|
||||
data.layoutInfo = undefined;
|
||||
}
|
||||
|
||||
// minimal color configuration (works with or without persisted data)
|
||||
let baseTheme, shellBackground, shellForeground;
|
||||
if (data) {
|
||||
baseTheme = data.baseTheme;
|
||||
shellBackground = data.colorInfo.editorBackground;
|
||||
shellForeground = data.colorInfo.foreground;
|
||||
} else if (configuration.autoDetectHighContrast && configuration.colorScheme.highContrast) {
|
||||
if (configuration.colorScheme.dark) {
|
||||
baseTheme = 'hc-black';
|
||||
shellBackground = '#000000';
|
||||
shellForeground = '#FFFFFF';
|
||||
} else {
|
||||
baseTheme = 'hc-light';
|
||||
shellBackground = '#FFFFFF';
|
||||
shellForeground = '#000000';
|
||||
}
|
||||
} else if (configuration.autoDetectColorScheme) {
|
||||
if (configuration.colorScheme.dark) {
|
||||
baseTheme = 'vs-dark';
|
||||
shellBackground = '#1E1E1E';
|
||||
shellForeground = '#CCCCCC';
|
||||
} else {
|
||||
baseTheme = 'vs';
|
||||
shellBackground = '#FFFFFF';
|
||||
shellForeground = '#000000';
|
||||
}
|
||||
}
|
||||
|
||||
const style = document.createElement('style');
|
||||
style.className = 'initialShellColors';
|
||||
document.head.appendChild(style);
|
||||
style.textContent = `body { background-color: ${shellBackground}; color: ${shellForeground}; margin: 0; padding: 0; }`;
|
||||
|
||||
// restore parts if possible (we might not always store layout info)
|
||||
if (data?.layoutInfo) {
|
||||
const { layoutInfo, colorInfo } = data;
|
||||
|
||||
const splash = document.createElement('div');
|
||||
splash.id = 'monaco-parts-splash';
|
||||
splash.className = baseTheme;
|
||||
|
||||
if (layoutInfo.windowBorder) {
|
||||
splash.style.position = 'relative';
|
||||
splash.style.height = 'calc(100vh - 2px)';
|
||||
splash.style.width = 'calc(100vw - 2px)';
|
||||
splash.style.border = '1px solid var(--window-border-color)';
|
||||
splash.style.setProperty('--window-border-color', colorInfo.windowBorder);
|
||||
|
||||
if (layoutInfo.windowBorderRadius) {
|
||||
splash.style.borderRadius = layoutInfo.windowBorderRadius;
|
||||
}
|
||||
}
|
||||
|
||||
// ensure there is enough space
|
||||
layoutInfo.sideBarWidth = Math.min(layoutInfo.sideBarWidth, window.innerWidth - (layoutInfo.activityBarWidth + layoutInfo.editorPartMinWidth));
|
||||
|
||||
// part: title
|
||||
const titleDiv = document.createElement('div');
|
||||
titleDiv.setAttribute('style', `position: absolute; width: 100%; left: 0; top: 0; height: ${layoutInfo.titleBarHeight}px; background-color: ${colorInfo.titleBarBackground}; -webkit-app-region: drag;`);
|
||||
splash.appendChild(titleDiv);
|
||||
|
||||
// part: activity bar
|
||||
const activityDiv = document.createElement('div');
|
||||
activityDiv.setAttribute('style', `position: absolute; height: calc(100% - ${layoutInfo.titleBarHeight}px); top: ${layoutInfo.titleBarHeight}px; ${layoutInfo.sideBarSide}: 0; width: ${layoutInfo.activityBarWidth}px; background-color: ${colorInfo.activityBarBackground};`);
|
||||
splash.appendChild(activityDiv);
|
||||
|
||||
// part: side bar (only when opening workspace/folder)
|
||||
// folder or workspace -> status bar color, sidebar
|
||||
if (configuration.workspace) {
|
||||
const sideDiv = document.createElement('div');
|
||||
sideDiv.setAttribute('style', `position: absolute; height: calc(100% - ${layoutInfo.titleBarHeight}px); top: ${layoutInfo.titleBarHeight}px; ${layoutInfo.sideBarSide}: ${layoutInfo.activityBarWidth}px; width: ${layoutInfo.sideBarWidth}px; background-color: ${colorInfo.sideBarBackground};`);
|
||||
splash.appendChild(sideDiv);
|
||||
}
|
||||
|
||||
// part: statusbar
|
||||
const statusDiv = document.createElement('div');
|
||||
statusDiv.setAttribute('style', `position: absolute; width: 100%; bottom: 0; left: 0; height: ${layoutInfo.statusBarHeight}px; background-color: ${configuration.workspace ? colorInfo.statusBarBackground : colorInfo.statusBarNoFolderBackground};`);
|
||||
splash.appendChild(statusDiv);
|
||||
|
||||
document.body.appendChild(splash);
|
||||
}
|
||||
|
||||
performance.mark('code/didShowPartsSplash');
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}());
|
|
@ -16,10 +16,10 @@
|
|||
|
||||
// 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
|
||||
// we know for a fact that workbench.desktop.main will depend on
|
||||
// the related CSS and NLS counterparts.
|
||||
bootstrapWindow.load([
|
||||
'vs/workbench/workbench.desktop.sandbox.main',
|
||||
'vs/workbench/workbench.desktop.main',
|
||||
'vs/nls!vs/workbench/workbench.desktop.main',
|
||||
'vs/css!vs/workbench/workbench.desktop.main'
|
||||
],
|
||||
|
@ -61,7 +61,7 @@
|
|||
window.requestIdleCallback(() => {
|
||||
const canvas = document.createElement('canvas');
|
||||
const context = canvas.getContext('2d');
|
||||
context.clearRect(0, 0, canvas.width, canvas.height);
|
||||
context?.clearRect(0, 0, canvas.width, canvas.height);
|
||||
canvas.remove();
|
||||
}, { timeout: 50 });
|
||||
}
|
||||
|
|
|
@ -86,7 +86,6 @@ export interface NativeParsedArgs {
|
|||
'force-user-env'?: boolean;
|
||||
'force-disable-user-env'?: boolean;
|
||||
'sync'?: 'on' | 'off';
|
||||
'__sandbox'?: boolean;
|
||||
'logsPath'?: string;
|
||||
'__enable-file-policy'?: boolean;
|
||||
editSessionId?: string;
|
||||
|
|
|
@ -34,7 +34,6 @@ export interface IEnvironmentMainService extends INativeEnvironmentService {
|
|||
mainLockfile: string;
|
||||
|
||||
// --- config
|
||||
sandbox: boolean;
|
||||
disableUpdates: boolean;
|
||||
}
|
||||
|
||||
|
@ -55,9 +54,6 @@ export class EnvironmentMainService extends NativeEnvironmentService implements
|
|||
@memoize
|
||||
get mainLockfile(): string { return join(this.userDataPath, 'code.lock'); }
|
||||
|
||||
@memoize
|
||||
get sandbox(): boolean { return !!this.args['__sandbox']; }
|
||||
|
||||
@memoize
|
||||
get disableUpdates(): boolean { return !!this.args['disable-updates']; }
|
||||
|
||||
|
|
|
@ -124,7 +124,6 @@ export const OPTIONS: OptionDescriptions<Required<NativeParsedArgs>> = {
|
|||
'force-user-env': { type: 'boolean' },
|
||||
'force-disable-user-env': { type: 'boolean' },
|
||||
'open-devtools': { type: 'boolean' },
|
||||
'__sandbox': { type: 'boolean' },
|
||||
'logsPath': { type: 'string' },
|
||||
'__enable-file-policy': { type: 'boolean' },
|
||||
'editSessionId': { type: 'string' },
|
||||
|
|
|
@ -135,6 +135,7 @@ export interface IWindowSettings {
|
|||
readonly enableMenuBarMnemonics: boolean;
|
||||
readonly closeWhenEmpty: boolean;
|
||||
readonly clickThroughInactive: boolean;
|
||||
readonly experimental?: { useSandbox: boolean };
|
||||
}
|
||||
|
||||
interface IWindowBorderColors {
|
||||
|
|
|
@ -205,7 +205,7 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
|||
// Enable experimental css highlight api https://chromestatus.com/feature/5436441440026624
|
||||
// Refs https://github.com/microsoft/vscode/issues/140098
|
||||
enableBlinkFeatures: 'HighlightAPI',
|
||||
...this.environmentMainService.sandbox ?
|
||||
...windowSettings?.experimental?.useSandbox ?
|
||||
|
||||
// Sandbox
|
||||
{
|
||||
|
@ -800,10 +800,7 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
|||
this.readyState = ReadyState.NAVIGATING;
|
||||
|
||||
// Load URL
|
||||
this._win.loadURL(FileAccess.asBrowserUri(this.environmentMainService.sandbox ?
|
||||
'vs/code/electron-sandbox/workbench/workbench.html' :
|
||||
'vs/code/electron-browser/workbench/workbench.html', require
|
||||
).toString(true));
|
||||
this._win.loadURL(FileAccess.asBrowserUri('vs/code/electron-sandbox/workbench/workbench.html', require).toString(true));
|
||||
|
||||
// Remember that we did load
|
||||
const wasLoaded = this.wasLoaded;
|
||||
|
|
|
@ -188,11 +188,8 @@ export class Workbench extends Layout {
|
|||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// native and web or `workbench.sandbox.main.ts` if the service
|
||||
// is native only.
|
||||
//
|
||||
// DO NOT add services to `workbench.desktop.main.ts`, always add
|
||||
// to `workbench.sandbox.main.ts` to support our Electron sandbox
|
||||
// desktop and web or `workbench.desktop.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
|
|
@ -77,6 +77,7 @@ import { UnsupportedExtensionsMigrationContrib } from 'vs/workbench/contrib/exte
|
|||
import { isWeb } from 'vs/base/common/platform';
|
||||
import { ExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage';
|
||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
||||
import product from 'vs/platform/product/common/product';
|
||||
|
||||
// Singletons
|
||||
registerSingleton(IExtensionsWorkbenchService, ExtensionsWorkbenchService);
|
||||
|
@ -228,7 +229,7 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration)
|
|||
'extensions.experimental.useUtilityProcess': {
|
||||
type: 'boolean',
|
||||
description: localize('extensionsUseUtilityProcess', "When enabled, the extension host will be launched using the new UtilityProcess Electron API."),
|
||||
default: false
|
||||
default: product.quality === 'stable' ? false : true // disabled by default in stable for now
|
||||
},
|
||||
[WORKSPACE_TRUST_EXTENSION_SUPPORT]: {
|
||||
type: 'object',
|
||||
|
|
|
@ -26,7 +26,7 @@ interface IConfiguration extends IWindowsConfiguration {
|
|||
debug?: { console?: { wordWrap?: boolean } };
|
||||
editor?: { accessibilitySupport?: 'on' | 'off' | 'auto' };
|
||||
security?: { workspace?: { trust?: { enabled?: boolean } } };
|
||||
window: IWindowSettings & { experimental?: { windowControlsOverlay?: { enabled?: boolean } } };
|
||||
window: IWindowSettings & { experimental?: { windowControlsOverlay?: { enabled?: boolean }; useSandbox?: boolean } };
|
||||
workbench?: { experimental?: { settingsProfiles?: { enabled?: boolean } } };
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ export class SettingsChangeRelauncher extends Disposable implements IWorkbenchCo
|
|||
|
||||
private titleBarStyle: 'native' | 'custom' | undefined;
|
||||
private windowControlsOverlayEnabled: boolean | undefined;
|
||||
private windowSandboxEnabled: boolean | undefined;
|
||||
private nativeTabs: boolean | undefined;
|
||||
private nativeFullScreen: boolean | undefined;
|
||||
private clickThroughInactive: boolean | undefined;
|
||||
|
@ -66,11 +67,16 @@ export class SettingsChangeRelauncher extends Disposable implements IWorkbenchCo
|
|||
}
|
||||
|
||||
// Windows: Window Controls Overlay
|
||||
if (isWindows && typeof config.window?.experimental?.windowControlsOverlay?.enabled === 'boolean' && config.window?.experimental?.windowControlsOverlay?.enabled !== this.windowControlsOverlayEnabled) {
|
||||
if (isWindows && typeof config.window?.experimental?.windowControlsOverlay?.enabled === 'boolean' && config.window.experimental.windowControlsOverlay.enabled !== this.windowControlsOverlayEnabled) {
|
||||
this.windowControlsOverlayEnabled = config.window.experimental.windowControlsOverlay.enabled;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
// Windows: Sandbox
|
||||
if (typeof config.window?.experimental?.useSandbox === 'boolean' && config.window.experimental.useSandbox !== this.windowSandboxEnabled) {
|
||||
this.windowSandboxEnabled = config.window.experimental.useSandbox;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
// macOS: Native tabs
|
||||
if (isMacintosh && typeof config.window?.nativeTabs === 'boolean' && config.window.nativeTabs !== this.nativeTabs) {
|
||||
|
|
|
@ -237,7 +237,12 @@ import { ModifierKeyEmitter } from 'vs/base/browser/dom';
|
|||
'scope': ConfigurationScope.APPLICATION,
|
||||
'description': localize('window.clickThroughInactive', "If enabled, clicking on an inactive window will both activate the window and trigger the element under the mouse if it is clickable. If disabled, clicking anywhere on an inactive window will activate it only and a second click is required on the element."),
|
||||
'included': isMacintosh
|
||||
}
|
||||
},
|
||||
'window.experimental.useSandbox': {
|
||||
type: 'boolean',
|
||||
description: localize('experimentalUseSandbox', "Experimental: When enabled, the window will have sandbox mode enabled via Electron API."),
|
||||
default: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -148,12 +148,9 @@ export class DesktopMain extends Disposable {
|
|||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// desktop and web or `workbench.desktop.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// DO NOT add services to `workbench.desktop.main.ts`, always add
|
||||
// to `workbench.sandbox.main.ts` to support our Electron sandbox
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
@ -205,12 +202,9 @@ export class DesktopMain extends Disposable {
|
|||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// desktop and web or `workbench.desktop.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// DO NOT add services to `workbench.desktop.main.ts`, always add
|
||||
// to `workbench.sandbox.main.ts` to support our Electron sandbox
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
@ -250,12 +244,9 @@ export class DesktopMain extends Disposable {
|
|||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// desktop and web or `workbench.desktop.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// DO NOT add services to `workbench.desktop.main.ts`, always add
|
||||
// to `workbench.sandbox.main.ts` to support our Electron sandbox
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
@ -306,12 +297,9 @@ export class DesktopMain extends Disposable {
|
|||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// desktop and web or `workbench.desktop.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// DO NOT add services to `workbench.desktop.main.ts`, always add
|
||||
// to `workbench.sandbox.main.ts` to support our Electron sandbox
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { ExtensionHostKind, ExtensionRunningLocation, IExtensionHost, IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { NativeLocalProcessExtensionHost } from 'vs/workbench/services/extensions/electron-browser/nativeLocalProcessExtensionHost';
|
||||
import { ElectronExtensionService } from 'vs/workbench/services/extensions/electron-sandbox/electronExtensionService';
|
||||
|
||||
export class NativeExtensionService extends ElectronExtensionService {
|
||||
protected override _createExtensionHost(runningLocation: ExtensionRunningLocation, isInitialStart: boolean): IExtensionHost | null {
|
||||
if (runningLocation.kind === ExtensionHostKind.LocalProcess) {
|
||||
return this._instantiationService.createInstance(NativeLocalProcessExtensionHost, runningLocation, this._createLocalExtensionHostDataProvider(isInitialStart, runningLocation));
|
||||
}
|
||||
return super._createExtensionHost(runningLocation, isInitialStart);
|
||||
}
|
||||
}
|
||||
|
||||
registerSingleton(IExtensionService, NativeExtensionService);
|
|
@ -3,7 +3,9 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { createServer, Server } from 'net';
|
||||
/* eslint-disable code-import-patterns */
|
||||
/* eslint-disable code-layering */
|
||||
|
||||
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import * as platform from 'vs/base/common/platform';
|
||||
import { StopWatch } from 'vs/base/common/stopwatch';
|
||||
|
@ -15,11 +17,12 @@ import { ILogService } from 'vs/platform/log/common/log';
|
|||
import { IPCExtHostConnection, writeExtHostConnection } from 'vs/workbench/services/extensions/common/extensionHostEnv';
|
||||
import { createMessageOfType, MessageType } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
|
||||
import { ExtensionHostProcess, ExtHostMessagePortCommunication, IExtHostCommunication, SandboxLocalProcessExtensionHost } from 'vs/workbench/services/extensions/electron-sandbox/localProcessExtensionHost';
|
||||
import { process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
|
||||
|
||||
export class NativeLocalProcessExtensionHost extends SandboxLocalProcessExtensionHost {
|
||||
protected override async _start(): Promise<IMessagePassingProtocol> {
|
||||
const canUseUtilityProcess = await this._extensionHostStarter.canUseUtilityProcess();
|
||||
if (canUseUtilityProcess && this._configurationService.getValue<boolean | undefined>('extensions.experimental.useUtilityProcess')) {
|
||||
if (canUseUtilityProcess && (this._configurationService.getValue<boolean | undefined>('extensions.experimental.useUtilityProcess') || process.sandboxed)) {
|
||||
const communication = this._toDispose.add(new ExtHostMessagePortCommunication(this._logService));
|
||||
return this._startWithCommunication(communication);
|
||||
} else {
|
||||
|
@ -31,7 +34,7 @@ export class NativeLocalProcessExtensionHost extends SandboxLocalProcessExtensio
|
|||
|
||||
interface INamedPipePreparedData {
|
||||
pipeName: string;
|
||||
namedPipeServer: Server;
|
||||
namedPipeServer: import('net').Server;
|
||||
}
|
||||
|
||||
class ExtHostNamedPipeCommunication extends Disposable implements IExtHostCommunication<INamedPipePreparedData> {
|
||||
|
@ -44,8 +47,9 @@ class ExtHostNamedPipeCommunication extends Disposable implements IExtHostCommun
|
|||
super();
|
||||
}
|
||||
|
||||
prepare(): Promise<INamedPipePreparedData> {
|
||||
return new Promise<{ pipeName: string; namedPipeServer: Server }>((resolve, reject) => {
|
||||
async prepare(): Promise<INamedPipePreparedData> {
|
||||
const { createServer } = await import('net');
|
||||
return new Promise<{ pipeName: string; namedPipeServer: import('net').Server }>((resolve, reject) => {
|
||||
const pipeName = createRandomIPCHandle();
|
||||
|
||||
const namedPipeServer = createServer();
|
|
@ -4,10 +4,19 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { ExtensionHostKind, ExtensionRunningLocation, IExtensionHost, IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { ElectronExtensionService } from 'vs/workbench/services/extensions/electron-sandbox/electronExtensionService';
|
||||
import { NativeLocalProcessExtensionHost } from 'vs/workbench/services/extensions/electron-sandbox/nativeLocalProcessExtensionHost';
|
||||
import { process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
|
||||
|
||||
export class SandboxExtensionService extends ElectronExtensionService {
|
||||
protected override _createExtensionHost(runningLocation: ExtensionRunningLocation, isInitialStart: boolean): IExtensionHost | null {
|
||||
if (!process.sandboxed && runningLocation.kind === ExtensionHostKind.LocalProcess) {
|
||||
// TODO@bpasero remove me once electron utility process has landed
|
||||
return this._instantiationService.createInstance(NativeLocalProcessExtensionHost, runningLocation, this._createLocalExtensionHostDataProvider(isInitialStart, runningLocation));
|
||||
}
|
||||
return super._createExtensionHost(runningLocation, isInitialStart);
|
||||
}
|
||||
}
|
||||
|
||||
registerSingleton(IExtensionService, SandboxExtensionService);
|
||||
|
|
|
@ -4,51 +4,157 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// The `node` & `electron-browser` layer is deprecated for workbench!
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// #######################################################################
|
||||
// ### ###
|
||||
// ### !!! PLEASE ADD COMMON IMPORTS INTO WORKBENCH.COMMON.MAIN.TS !!! ###
|
||||
// ### ###
|
||||
// #######################################################################
|
||||
|
||||
//#region --- workbench common
|
||||
|
||||
import 'vs/workbench/workbench.common.main';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench common & sandbox
|
||||
//#region --- workbench (desktop main)
|
||||
|
||||
import 'vs/workbench/workbench.sandbox.main';
|
||||
import 'vs/workbench/electron-sandbox/desktop.main';
|
||||
import 'vs/workbench/electron-sandbox/desktop.contribution';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench parts
|
||||
|
||||
import 'vs/workbench/electron-sandbox/parts/dialogs/dialog.contribution';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench services
|
||||
|
||||
import 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService';
|
||||
import 'vs/workbench/services/dialogs/electron-sandbox/fileDialogService';
|
||||
import 'vs/workbench/services/workspaces/electron-sandbox/workspacesService';
|
||||
import 'vs/workbench/services/textMate/browser/nativeTextMateService';
|
||||
import 'vs/workbench/services/menubar/electron-sandbox/menubarService';
|
||||
import 'vs/workbench/services/issue/electron-sandbox/issueService';
|
||||
import 'vs/workbench/services/update/electron-sandbox/updateService';
|
||||
import 'vs/workbench/services/url/electron-sandbox/urlService';
|
||||
import 'vs/workbench/services/lifecycle/electron-sandbox/lifecycleService';
|
||||
import 'vs/workbench/services/title/electron-sandbox/titleService';
|
||||
import 'vs/workbench/services/host/electron-sandbox/nativeHostService';
|
||||
import 'vs/workbench/services/request/electron-sandbox/requestService';
|
||||
import 'vs/workbench/services/extensionResourceLoader/electron-sandbox/extensionResourceLoaderService';
|
||||
import 'vs/workbench/services/clipboard/electron-sandbox/clipboardService';
|
||||
import 'vs/workbench/services/contextmenu/electron-sandbox/contextmenuService';
|
||||
import 'vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService';
|
||||
import 'vs/workbench/services/configurationResolver/electron-sandbox/configurationResolverService';
|
||||
import 'vs/workbench/services/accessibility/electron-sandbox/accessibilityService';
|
||||
import 'vs/workbench/services/path/electron-sandbox/pathService';
|
||||
import 'vs/workbench/services/themes/electron-sandbox/nativeHostColorSchemeService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionUrlTrustService';
|
||||
import 'vs/workbench/services/credentials/electron-sandbox/credentialsService';
|
||||
import 'vs/workbench/services/encryption/electron-sandbox/encryptionService';
|
||||
import 'vs/workbench/services/localization/electron-sandbox/languagePackService';
|
||||
import 'vs/workbench/services/telemetry/electron-sandbox/telemetryService';
|
||||
import 'vs/workbench/services/extensions/electron-sandbox/extensionHostStarter';
|
||||
import 'vs/platform/extensionManagement/electron-sandbox/extensionsScannerService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementServerService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncMachinesService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncAccountService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncStoreManagementService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataAutoSyncService';
|
||||
import 'vs/workbench/services/timer/electron-sandbox/timerService';
|
||||
import 'vs/workbench/services/environment/electron-sandbox/shellEnvironmentService';
|
||||
import 'vs/workbench/services/integrity/electron-sandbox/integrityService';
|
||||
import 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupService';
|
||||
import 'vs/workbench/services/checksum/electron-sandbox/checksumService';
|
||||
import 'vs/platform/remote/electron-sandbox/sharedProcessTunnelService';
|
||||
import 'vs/workbench/services/tunnel/electron-sandbox/tunnelService';
|
||||
import 'vs/platform/diagnostics/electron-sandbox/diagnosticsService';
|
||||
import 'vs/platform/profiling/electron-sandbox/profilingService';
|
||||
import 'vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService';
|
||||
import 'vs/workbench/services/files/electron-sandbox/elevatedFileService';
|
||||
import 'vs/workbench/services/search/electron-sandbox/searchService';
|
||||
import 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService';
|
||||
import 'vs/workbench/services/userDataSync/browser/userDataSyncEnablementService';
|
||||
import 'vs/workbench/services/extensions/electron-sandbox/sandboxExtensionService';
|
||||
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// The `node` & `electron-browser` layer is deprecated for workbench!
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
import 'vs/workbench/services/extensions/electron-browser/nativeExtensionService';
|
||||
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//
|
||||
// NOTE: Please do NOT register services here. Use `registerSingleton()`
|
||||
// from `workbench.common.main.ts` if the service is shared between
|
||||
// desktop and web or `workbench.sandbox.main.ts` if the service
|
||||
// is desktop only.
|
||||
//
|
||||
// The `node` & `electron-browser` layer is deprecated for workbench!
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IUserDataInitializationService, UserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit';
|
||||
|
||||
registerSingleton(IUserDataInitializationService, UserDataInitializationService);
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench contributions
|
||||
|
||||
// Logs
|
||||
import 'vs/workbench/contrib/logs/electron-sandbox/logs.contribution';
|
||||
|
||||
// Localizations
|
||||
import 'vs/workbench/contrib/localization/electron-sandbox/localization.contribution';
|
||||
|
||||
// Explorer
|
||||
import 'vs/workbench/contrib/files/electron-sandbox/files.contribution';
|
||||
import 'vs/workbench/contrib/files/electron-sandbox/fileActions.contribution';
|
||||
|
||||
// CodeEditor Contributions
|
||||
import 'vs/workbench/contrib/codeEditor/electron-sandbox/codeEditor.contribution';
|
||||
|
||||
// Debug
|
||||
import 'vs/workbench/contrib/debug/electron-sandbox/extensionHostDebugService';
|
||||
|
||||
// Extensions Management
|
||||
import 'vs/workbench/contrib/extensions/electron-sandbox/extensions.contribution';
|
||||
|
||||
// Issues
|
||||
import 'vs/workbench/contrib/issue/electron-sandbox/issue.contribution';
|
||||
|
||||
// Remote
|
||||
import 'vs/workbench/contrib/remote/electron-sandbox/remote.contribution';
|
||||
|
||||
// Configuration Exporter
|
||||
import 'vs/workbench/contrib/configExporter/electron-sandbox/configurationExportHelper.contribution';
|
||||
|
||||
// Terminal
|
||||
import 'vs/workbench/contrib/terminal/electron-sandbox/terminal.contribution';
|
||||
|
||||
// Themes Support
|
||||
import 'vs/workbench/contrib/themes/browser/themes.test.contribution';
|
||||
|
||||
// User Data Sync
|
||||
import 'vs/workbench/contrib/userDataSync/electron-sandbox/userDataSync.contribution';
|
||||
|
||||
// Output
|
||||
import 'vs/workbench/contrib/output/electron-sandbox/outputChannelModelService';
|
||||
|
||||
// Tags
|
||||
import 'vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService';
|
||||
import 'vs/workbench/contrib/tags/electron-sandbox/tags.contribution';
|
||||
|
||||
// Performance
|
||||
import 'vs/workbench/contrib/performance/electron-sandbox/performance.contribution';
|
||||
|
||||
// Tasks
|
||||
import 'vs/workbench/contrib/tasks/electron-sandbox/taskService';
|
||||
|
||||
// External terminal
|
||||
import 'vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution';
|
||||
|
||||
// Webview
|
||||
import 'vs/workbench/contrib/webview/electron-sandbox/webview.contribution';
|
||||
|
||||
// Splash
|
||||
import 'vs/workbench/contrib/splash/electron-sandbox/splash.contribution';
|
||||
|
||||
// Local History
|
||||
import 'vs/workbench/contrib/localHistory/electron-sandbox/localHistory.contribution';
|
||||
|
||||
//#endregion
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
// #######################################################################
|
||||
// ### ###
|
||||
// ### !!! PLEASE ADD COMMON IMPORTS INTO WORKBENCH.COMMON.MAIN.TS !!! ###
|
||||
// ### ###
|
||||
// #######################################################################
|
||||
|
||||
|
||||
//#region --- workbench common & sandbox
|
||||
|
||||
import 'vs/workbench/workbench.sandbox.main';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench (desktop main)
|
||||
|
||||
import 'vs/workbench/electron-sandbox/desktop.main';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench services
|
||||
|
||||
import 'vs/workbench/services/extensions/electron-sandbox/sandboxExtensionService';
|
||||
|
||||
//#endregion
|
|
@ -1,159 +0,0 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
// #######################################################################
|
||||
// ### ###
|
||||
// ### !!! PLEASE ADD COMMON IMPORTS INTO WORKBENCH.COMMON.MAIN.TS !!! ###
|
||||
// ### ###
|
||||
// #######################################################################
|
||||
|
||||
//#region --- workbench common
|
||||
|
||||
import 'vs/workbench/workbench.common.main';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench (desktop main)
|
||||
|
||||
import 'vs/workbench/electron-sandbox/desktop.main';
|
||||
import 'vs/workbench/electron-sandbox/desktop.contribution';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench parts
|
||||
|
||||
import 'vs/workbench/electron-sandbox/parts/dialogs/dialog.contribution';
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench services
|
||||
|
||||
import 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService';
|
||||
import 'vs/workbench/services/dialogs/electron-sandbox/fileDialogService';
|
||||
import 'vs/workbench/services/workspaces/electron-sandbox/workspacesService';
|
||||
import 'vs/workbench/services/textMate/browser/nativeTextMateService';
|
||||
import 'vs/workbench/services/menubar/electron-sandbox/menubarService';
|
||||
import 'vs/workbench/services/issue/electron-sandbox/issueService';
|
||||
import 'vs/workbench/services/update/electron-sandbox/updateService';
|
||||
import 'vs/workbench/services/url/electron-sandbox/urlService';
|
||||
import 'vs/workbench/services/lifecycle/electron-sandbox/lifecycleService';
|
||||
import 'vs/workbench/services/title/electron-sandbox/titleService';
|
||||
import 'vs/workbench/services/host/electron-sandbox/nativeHostService';
|
||||
import 'vs/workbench/services/request/electron-sandbox/requestService';
|
||||
import 'vs/workbench/services/extensionResourceLoader/electron-sandbox/extensionResourceLoaderService';
|
||||
import 'vs/workbench/services/clipboard/electron-sandbox/clipboardService';
|
||||
import 'vs/workbench/services/contextmenu/electron-sandbox/contextmenuService';
|
||||
import 'vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService';
|
||||
import 'vs/workbench/services/configurationResolver/electron-sandbox/configurationResolverService';
|
||||
import 'vs/workbench/services/accessibility/electron-sandbox/accessibilityService';
|
||||
import 'vs/workbench/services/path/electron-sandbox/pathService';
|
||||
import 'vs/workbench/services/themes/electron-sandbox/nativeHostColorSchemeService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionUrlTrustService';
|
||||
import 'vs/workbench/services/credentials/electron-sandbox/credentialsService';
|
||||
import 'vs/workbench/services/encryption/electron-sandbox/encryptionService';
|
||||
import 'vs/workbench/services/localization/electron-sandbox/languagePackService';
|
||||
import 'vs/workbench/services/telemetry/electron-sandbox/telemetryService';
|
||||
import 'vs/workbench/services/extensions/electron-sandbox/extensionHostStarter';
|
||||
import 'vs/platform/extensionManagement/electron-sandbox/extensionsScannerService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementServerService';
|
||||
import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncMachinesService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncAccountService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncStoreManagementService';
|
||||
import 'vs/workbench/services/userDataSync/electron-sandbox/userDataAutoSyncService';
|
||||
import 'vs/workbench/services/timer/electron-sandbox/timerService';
|
||||
import 'vs/workbench/services/environment/electron-sandbox/shellEnvironmentService';
|
||||
import 'vs/workbench/services/integrity/electron-sandbox/integrityService';
|
||||
import 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupService';
|
||||
import 'vs/workbench/services/checksum/electron-sandbox/checksumService';
|
||||
import 'vs/platform/remote/electron-sandbox/sharedProcessTunnelService';
|
||||
import 'vs/workbench/services/tunnel/electron-sandbox/tunnelService';
|
||||
import 'vs/platform/diagnostics/electron-sandbox/diagnosticsService';
|
||||
import 'vs/platform/profiling/electron-sandbox/profilingService';
|
||||
import 'vs/platform/telemetry/electron-sandbox/customEndpointTelemetryService';
|
||||
import 'vs/workbench/services/files/electron-sandbox/elevatedFileService';
|
||||
import 'vs/workbench/services/search/electron-sandbox/searchService';
|
||||
import 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService';
|
||||
import 'vs/workbench/services/userDataSync/browser/userDataSyncEnablementService';
|
||||
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IUserDataInitializationService, UserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit';
|
||||
|
||||
registerSingleton(IUserDataInitializationService, UserDataInitializationService);
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
//#region --- workbench contributions
|
||||
|
||||
// Logs
|
||||
import 'vs/workbench/contrib/logs/electron-sandbox/logs.contribution';
|
||||
|
||||
// Localizations
|
||||
import 'vs/workbench/contrib/localization/electron-sandbox/localization.contribution';
|
||||
|
||||
// Explorer
|
||||
import 'vs/workbench/contrib/files/electron-sandbox/files.contribution';
|
||||
import 'vs/workbench/contrib/files/electron-sandbox/fileActions.contribution';
|
||||
|
||||
// CodeEditor Contributions
|
||||
import 'vs/workbench/contrib/codeEditor/electron-sandbox/codeEditor.contribution';
|
||||
|
||||
// Debug
|
||||
import 'vs/workbench/contrib/debug/electron-sandbox/extensionHostDebugService';
|
||||
|
||||
// Extensions Management
|
||||
import 'vs/workbench/contrib/extensions/electron-sandbox/extensions.contribution';
|
||||
|
||||
// Issues
|
||||
import 'vs/workbench/contrib/issue/electron-sandbox/issue.contribution';
|
||||
|
||||
// Remote
|
||||
import 'vs/workbench/contrib/remote/electron-sandbox/remote.contribution';
|
||||
|
||||
// Configuration Exporter
|
||||
import 'vs/workbench/contrib/configExporter/electron-sandbox/configurationExportHelper.contribution';
|
||||
|
||||
// Terminal
|
||||
import 'vs/workbench/contrib/terminal/electron-sandbox/terminal.contribution';
|
||||
|
||||
// Themes Support
|
||||
import 'vs/workbench/contrib/themes/browser/themes.test.contribution';
|
||||
|
||||
// User Data Sync
|
||||
import 'vs/workbench/contrib/userDataSync/electron-sandbox/userDataSync.contribution';
|
||||
|
||||
// Output
|
||||
import 'vs/workbench/contrib/output/electron-sandbox/outputChannelModelService';
|
||||
|
||||
// Tags
|
||||
import 'vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService';
|
||||
import 'vs/workbench/contrib/tags/electron-sandbox/tags.contribution';
|
||||
|
||||
// Performance
|
||||
import 'vs/workbench/contrib/performance/electron-sandbox/performance.contribution';
|
||||
|
||||
// Tasks
|
||||
import 'vs/workbench/contrib/tasks/electron-sandbox/taskService';
|
||||
|
||||
// External terminal
|
||||
import 'vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution';
|
||||
|
||||
// Webview
|
||||
import 'vs/workbench/contrib/webview/electron-sandbox/webview.contribution';
|
||||
|
||||
// Splash
|
||||
import 'vs/workbench/contrib/splash/electron-sandbox/splash.contribution';
|
||||
|
||||
// Local History
|
||||
import 'vs/workbench/contrib/localHistory/electron-sandbox/localHistory.contribution';
|
||||
|
||||
//#endregion
|
Loading…
Reference in a new issue