Skip to content

Commit 8a652f9

Browse files
authored
🚀 sandbox - enable by default and remove setting 🚀 (microsoft#181638)
* sandbox - enable by default and remove setting * remove more * set flags again * fix lint * more cleanup
1 parent 4243880 commit 8a652f9

File tree

28 files changed

+65
-388
lines changed

28 files changed

+65
-388
lines changed

src/bootstrap-fork.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -235,26 +235,16 @@ function terminateWhenParentTerminates() {
235235
}
236236
}
237237

238-
// TODO@bpasero remove this when sandbox is final
239238
function configureCrashReporter() {
240-
const crashReporterSandboxedHint = process.env['VSCODE_CRASH_REPORTER_SANDBOXED_HINT'];
241-
if (crashReporterSandboxedHint) {
242-
addCrashReporterParameter('_sandboxed', 'true');
243-
}
244-
245239
const crashReporterProcessType = process.env['VSCODE_CRASH_REPORTER_PROCESS_TYPE'];
246240
if (crashReporterProcessType) {
247-
addCrashReporterParameter('processType', crashReporterProcessType);
248-
}
249-
}
250-
251-
function addCrashReporterParameter(key, value) {
252-
try {
253-
if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) {
254-
process['crashReporter'].addExtraParameter(key, value);
241+
try {
242+
if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) {
243+
process['crashReporter'].addExtraParameter('processType', crashReporterProcessType);
244+
}
245+
} catch (error) {
246+
console.error(error);
255247
}
256-
} catch (error) {
257-
console.error(error);
258248
}
259249
}
260250

src/bootstrap-window.js

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,6 @@
4343
* }} [options]
4444
*/
4545
async function load(modulePaths, resultCallback, options) {
46-
const isDev = !!safeProcess.env['VSCODE_DEV'];
47-
48-
// Error handler (node.js enabled renderers only)
49-
let showDevtoolsOnError = isDev;
50-
if (!safeProcess.sandboxed) {
51-
safeProcess.on('uncaughtException', function (/** @type {string | Error} */ error) {
52-
onUnexpectedError(error, showDevtoolsOnError);
53-
});
54-
}
5546

5647
// Await window configuration from preload
5748
const timeout = setTimeout(() => { console.error(`[resolve window config] Could not resolve window configuration within 10 seconds, but will continue to wait...`); }, 10000);
@@ -68,28 +59,21 @@
6859

6960
// Developer settings
7061
const {
71-
forceDisableShowDevtoolsOnError,
7262
forceEnableDeveloperKeybindings,
7363
disallowReloadKeybinding,
7464
removeDeveloperKeybindingsAfterLoad
7565
} = typeof options?.configureDeveloperSettings === 'function' ? options.configureDeveloperSettings(configuration) : {
76-
forceDisableShowDevtoolsOnError: false,
7766
forceEnableDeveloperKeybindings: false,
7867
disallowReloadKeybinding: false,
7968
removeDeveloperKeybindingsAfterLoad: false
8069
};
81-
showDevtoolsOnError = isDev && !forceDisableShowDevtoolsOnError;
70+
const isDev = !!safeProcess.env['VSCODE_DEV'];
8271
const enableDeveloperKeybindings = isDev || forceEnableDeveloperKeybindings;
8372
let developerDeveloperKeybindingsDisposable;
8473
if (enableDeveloperKeybindings) {
8574
developerDeveloperKeybindingsDisposable = registerDeveloperKeybindings(disallowReloadKeybinding);
8675
}
8776

88-
// Enable ASAR support (node.js enabled renderers only)
89-
if (!safeProcess.sandboxed) {
90-
globalThis.MonacoBootstrap.enableASARSupport(configuration.appRoot);
91-
}
92-
9377
// Get the nls configuration into the process.env as early as possible
9478
const nlsConfig = globalThis.MonacoBootstrap.setupNLS();
9579

@@ -102,29 +86,11 @@
10286

10387
window.document.documentElement.setAttribute('lang', locale);
10488

105-
// Define `fs` as `original-fs` to disable ASAR support
106-
// in fs-operations (node.js enabled renderers only)
107-
if (!safeProcess.sandboxed) {
108-
require.define('fs', [], function () {
109-
return require.__$__nodeRequire('original-fs');
110-
});
111-
}
112-
11389
window['MonacoEnvironment'] = {};
11490

11591
// VSCODE_GLOBALS: node_modules
11692
globalThis._VSCODE_NODE_MODULES = new Proxy(Object.create(null), { get: (_target, mod) => (require.__$__nodeRequire ?? require)(String(mod)) });
11793

118-
if (!safeProcess.sandboxed) {
119-
// VSCODE_GLOBALS: package/product.json
120-
globalThis._VSCODE_PRODUCT_JSON = (require.__$__nodeRequire ?? require)(configuration.appRoot + '/product.json');
121-
if (process.env['VSCODE_DEV']) {
122-
// Patch product overrides when running out of sources
123-
try { globalThis._VSCODE_PRODUCT_JSON = Object.assign(globalThis._VSCODE_PRODUCT_JSON, (require.__$__nodeRequire ?? require)(configuration.appRoot + '/product.overrides.json')); } catch (error) { /* ignore */ }
124-
}
125-
globalThis._VSCODE_PACKAGE_JSON = (require.__$__nodeRequire ?? require)(configuration.appRoot + '/package.json');
126-
}
127-
12894
const loaderConfig = {
12995
baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`,
13096
'vs/nls': nlsConfig,
@@ -160,13 +126,6 @@
160126
'tas-client-umd': `${baseNodeModulesPath}/tas-client-umd/lib/tas-client-umd.js`
161127
};
162128

163-
// Allow to load built-in and other node.js modules via AMD
164-
// which has a fallback to using node.js `require`
165-
// (node.js enabled renderers only)
166-
if (!safeProcess.sandboxed) {
167-
loaderConfig.amdModulesPattern = /(^vs\/)|(^vscode-textmate$)|(^vscode-oniguruma$)|(^xterm$)|(^xterm-addon-canvas$)|(^xterm-addon-search$)|(^xterm-addon-unicode11$)|(^xterm-addon-webgl$)|(^@vscode\/iconv-lite-umd$)|(^jschardet$)|(^@vscode\/vscode-languagedetection$)|(^vscode-regexp-languagedetection$)|(^tas-client-umd$)/;
168-
}
169-
170129
// Signal before require.config()
171130
if (typeof options?.beforeLoaderConfig === 'function') {
172131
options.beforeLoaderConfig(loaderConfig);

src/bootstrap.js

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -50,41 +50,14 @@
5050

5151
//#region Add support for using node_modules.asar
5252

53-
/**
54-
* @param {string=} appRoot
55-
*/
56-
function enableASARSupport(appRoot) {
53+
function enableASARSupport() {
5754
if (!path || !Module || typeof process === 'undefined') {
5855
console.warn('enableASARSupport() is only available in node.js environments');
5956
return;
6057
}
6158

62-
const NODE_MODULES_PATH = appRoot ? path.join(appRoot, 'node_modules') : path.join(__dirname, '../node_modules');
63-
64-
// Windows only:
65-
// use both lowercase and uppercase drive letter
66-
// as a way to ensure we do the right check on
67-
// the node modules path: node.js might internally
68-
// use a different case compared to what we have
69-
/** @type {string | undefined} */
70-
let NODE_MODULES_ALTERNATIVE_PATH;
71-
if (appRoot /* only used from renderer until `sandbox` enabled */ && process.platform === 'win32') {
72-
const driveLetter = appRoot.substr(0, 1);
73-
74-
let alternativeDriveLetter;
75-
if (driveLetter.toLowerCase() !== driveLetter) {
76-
alternativeDriveLetter = driveLetter.toLowerCase();
77-
} else {
78-
alternativeDriveLetter = driveLetter.toUpperCase();
79-
}
80-
81-
NODE_MODULES_ALTERNATIVE_PATH = alternativeDriveLetter + NODE_MODULES_PATH.substr(1);
82-
} else {
83-
NODE_MODULES_ALTERNATIVE_PATH = undefined;
84-
}
85-
59+
const NODE_MODULES_PATH = path.join(__dirname, '../node_modules');
8660
const NODE_MODULES_ASAR_PATH = `${NODE_MODULES_PATH}.asar`;
87-
const NODE_MODULES_ASAR_ALTERNATIVE_PATH = NODE_MODULES_ALTERNATIVE_PATH ? `${NODE_MODULES_ALTERNATIVE_PATH}.asar` : undefined;
8861

8962
// @ts-ignore
9063
const originalResolveLookupPaths = Module._resolveLookupPaths;
@@ -93,23 +66,12 @@
9366
Module._resolveLookupPaths = function (request, parent) {
9467
const paths = originalResolveLookupPaths(request, parent);
9568
if (Array.isArray(paths)) {
96-
let asarPathAdded = false;
9769
for (let i = 0, len = paths.length; i < len; i++) {
9870
if (paths[i] === NODE_MODULES_PATH) {
99-
asarPathAdded = true;
10071
paths.splice(i, 0, NODE_MODULES_ASAR_PATH);
10172
break;
102-
} else if (paths[i] === NODE_MODULES_ALTERNATIVE_PATH) {
103-
asarPathAdded = true;
104-
paths.splice(i, 0, NODE_MODULES_ASAR_ALTERNATIVE_PATH);
105-
break;
10673
}
10774
}
108-
if (!asarPathAdded && appRoot) {
109-
// Assuming that adding just `NODE_MODULES_ASAR_PATH` is sufficient
110-
// because nodejs should find it even if it has a different drive letter case
111-
paths.push(NODE_MODULES_ASAR_PATH);
112-
}
11375
}
11476

11577
return paths;

src/main.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ const { getUNCHost, addUNCHostToAllowlist } = require('./vs/base/node/unc');
2727
const product = require('../product.json');
2828
const { app, protocol, crashReporter, Menu } = require('electron');
2929

30+
// Enable sandbox globally
31+
app.enableSandbox();
32+
3033
// Enable portable support
3134
const portable = bootstrapNode.configurePortable(product);
3235

src/vs/base/parts/sandbox/electron-sandbox/globals.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes
88
import { IpcRenderer, ProcessMemoryInfo, WebFrame } from 'vs/base/parts/sandbox/electron-sandbox/electronTypes';
99

1010
/**
11-
* In sandboxed renderers we cannot expose all of the `process` global of node.js
11+
* In Electron renderers we cannot expose all of the `process` global of node.js
1212
*/
1313
export interface ISandboxNodeProcess extends INodeProcess {
1414

@@ -29,20 +29,6 @@ export interface ISandboxNodeProcess extends INodeProcess {
2929
*/
3030
readonly type: string;
3131

32-
/**
33-
* Whether the process is sandboxed or not.
34-
*/
35-
readonly sandboxed: boolean;
36-
37-
/**
38-
* The `process.pid` property returns the PID of the process.
39-
*
40-
* @deprecated this property will be removed once sandbox is enabled.
41-
*
42-
* TODO@bpasero remove this property when sandbox is on
43-
*/
44-
readonly pid: number;
45-
4632
/**
4733
* A list of versions for the current node.js/electron configuration.
4834
*/

src/vs/base/parts/sandbox/electron-sandbox/preload.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,9 @@
252252
get platform() { return process.platform; },
253253
get arch() { return process.arch; },
254254
get env() { return { ...process.env }; },
255-
get pid() { return process.pid; },
256255
get versions() { return process.versions; },
257256
get type() { return 'renderer'; },
258257
get execPath() { return process.execPath; },
259-
get sandboxed() { return process.sandboxed; },
260258

261259
/**
262260
* @returns {string}

src/vs/code/electron-sandbox/issue/issueReporterModel.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ export interface IssueReporterData {
3434
experimentInfo?: string;
3535
restrictedMode?: boolean;
3636
isUnsupported?: boolean;
37-
isSandboxed?: boolean;
3837
}
3938

4039
export class IssueReporterModel {
@@ -78,7 +77,6 @@ ${this.getExtensionVersion()}
7877
VS Code version: ${this._data.versionInfo && this._data.versionInfo.vscodeVersion}
7978
OS version: ${this._data.versionInfo && this._data.versionInfo.os}
8079
Modes:${modes.length ? ' ' + modes.join(', ') : ''}
81-
Sandboxed: ${this._data.isSandboxed ? 'Yes' : 'No'}
8280
${this.getRemoteOSes()}
8381
${this.getInfos()}
8482
<!-- generated by issue reporter -->`;

src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ undefined
3434
VS Code version: undefined
3535
OS version: undefined
3636
Modes:
37-
Sandboxed: No
3837
3938
Extensions: none
4039
<!-- generated by issue reporter -->`);
@@ -66,7 +65,6 @@ undefined
6665
VS Code version: undefined
6766
OS version: undefined
6867
Modes:
69-
Sandboxed: No
7068
7169
<details>
7270
<summary>System Info</summary>
@@ -111,7 +109,6 @@ undefined
111109
VS Code version: undefined
112110
OS version: undefined
113111
Modes:
114-
Sandboxed: No
115112
116113
<details>
117114
<summary>System Info</summary>
@@ -167,7 +164,6 @@ undefined
167164
VS Code version: undefined
168165
OS version: undefined
169166
Modes:
170-
Sandboxed: No
171167
172168
<details>
173169
<summary>System Info</summary>
@@ -225,7 +221,6 @@ undefined
225221
VS Code version: undefined
226222
OS version: undefined
227223
Modes:
228-
Sandboxed: No
229224
Remote OS version: Linux x64 4.18.0
230225
231226
<details>
@@ -275,7 +270,6 @@ undefined
275270
VS Code version: undefined
276271
OS version: undefined
277272
Modes:
278-
Sandboxed: No
279273
280274
<details>
281275
<summary>System Info</summary>
@@ -307,7 +301,6 @@ undefined
307301
VS Code version: undefined
308302
OS version: undefined
309303
Modes: Restricted, Unsupported
310-
Sandboxed: No
311304
312305
Extensions: none
313306
<!-- generated by issue reporter -->`);

src/vs/platform/issue/common/issue.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ export interface IssueReporterData extends WindowData {
6464
experiments?: string;
6565
restrictedMode: boolean;
6666
isUnsupported: boolean;
67-
isSandboxed: boolean; // TODO@bpasero remove me once sandbox is final
6867
githubAccessToken: string;
6968
readonly issueTitle?: string;
7069
readonly issueBody?: string;

src/vs/platform/issue/electron-main/issueMainService.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,7 @@ export class IssueMainService implements IIssueMainService {
438438
enableWebSQL: false,
439439
spellcheck: false,
440440
zoomFactor: zoomLevelToZoomFactor(options.zoomLevel),
441-
sandbox: true,
442-
contextIsolation: true
441+
sandbox: true
443442
},
444443
alwaysOnTop: options.alwaysOnTop,
445444
experimentalDarkMode: true

0 commit comments

Comments
 (0)