feat: remove CORS validation patch (#845)

This commit is contained in:
Baptiste Augrain 2021-09-17 23:25:34 +02:00 committed by GitHub
parent 573c0230c5
commit db02ad1133
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,144 +0,0 @@
diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js
index 0cc92ec..8ba8fb0 100644
--- a/src/bootstrap-window.js
+++ b/src/bootstrap-window.js
@@ -24,6 +24,7 @@
const bootstrapLib = bootstrap();
const preloadGlobals = sandboxGlobals();
const safeProcess = preloadGlobals.process;
+ const useCustomProtocol = safeProcess.sandboxed;
/**
* @typedef {import('./vs/base/parts/sandbox/common/sandboxTypes').ISandboxConfiguration} ISandboxConfiguration
@@ -107,9 +108,9 @@
window['MonacoEnvironment'] = {};
const loaderConfig = {
- baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`,
+ baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32' })}/out`,
'vs/nls': nlsConfig,
- preferScriptTags: true
+ preferScriptTags: useCustomProtocol
};
// use a trusted types policy when loading via script tags
@@ -143,6 +144,14 @@
loaderConfig.amdModulesPattern = /^vs\//;
}
+ // Cached data config (node.js loading only)
+ if (!useCustomProtocol && configuration.codeCachePath) {
+ loaderConfig.nodeCachedData = {
+ path: configuration.codeCachePath,
+ seed: modulePaths.join('')
+ };
+ }
+
// Signal before require.config()
if (typeof options?.beforeLoaderConfig === 'function') {
options.beforeLoaderConfig(loaderConfig);
diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts
index 41a3fe9..bbb06e3 100644
--- a/src/vs/base/common/network.ts
+++ b/src/vs/base/common/network.ts
@@ -166,16 +166,7 @@ class FileAccessImpl {
}
// Convert to `vscode-file` resource..
- if (
- // ...only ever for `file` resources
- uri.scheme === Schemas.file &&
- (
- // ...and we run in native environments
- platform.isNative ||
- // ...or web worker extensions on desktop
- (typeof platform.globals.importScripts === 'function' && platform.globals.origin === `${Schemas.vscodeFileResource}://${FileAccessImpl.FALLBACK_AUTHORITY}`)
- )
- ) {
+ if (uri.scheme === Schemas.file && typeof platform.globals.importScripts === 'function' && platform.globals.origin === `${Schemas.vscodeFileResource}://${FileAccessImpl.FALLBACK_AUTHORITY}`) {
return uri.with({
scheme: Schemas.vscodeFileResource,
// We need to provide an authority here so that it can serve
diff --git a/src/vs/platform/protocol/electron-main/protocolMainService.ts b/src/vs/platform/protocol/electron-main/protocolMainService.ts
index bde08d8..3f09ad1 100644
--- a/src/vs/platform/protocol/electron-main/protocolMainService.ts
+++ b/src/vs/platform/protocol/electron-main/protocolMainService.ts
@@ -72,9 +72,24 @@ export class ProtocolMainService extends Disposable implements IProtocolMainServ
//#region file://
private handleFileRequest(request: Electron.ProtocolRequest, callback: ProtocolCallback) {
- const uri = URI.parse(request.url);
+ const fileUri = URI.parse(request.url);
+
+ // first check by validRoots
+ if (this.validRoots.findSubstr(fileUri)) {
+ return callback({
+ path: fileUri.fsPath
+ });
+ }
- this.logService.error(`Refused to load resource ${uri.fsPath} from ${Schemas.file}: protocol (original URL: ${request.url})`);
+ // then check by validExtensions
+ if (this.validExtensions.has(extname(fileUri))) {
+ return callback({
+ path: fileUri.fsPath
+ });
+ }
+
+ // finally block to load the resource
+ this.logService.error(`${Schemas.file}: Refused to load resource ${fileUri.fsPath} from ${Schemas.file}: protocol (original URL: ${request.url})`);
return callback({ error: -3 /* ABORTED */ });
}
diff --git a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts
index 7cae207..1c54ac9 100644
--- a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts
+++ b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts
@@ -19,7 +19,7 @@ import { process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IProductService } from 'vs/platform/product/common/productService';
-import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
+import { IStorageService } from 'vs/platform/storage/common/storage';
export class TimerService extends AbstractTimerService {
@@ -91,24 +91,23 @@ registerSingleton(ITimerService, TimerService);
//#region cached data logic
-const lastRunningCommitStorageKey = 'perf/lastRunningCommit';
-let _didUseCachedData: boolean | undefined = undefined;
-
export function didUseCachedData(productService: IProductService, storageService: IStorageService, environmentService: INativeWorkbenchEnvironmentService): boolean {
- // browser code loading: only a guess based on
- // this being the first start with the commit
- // or subsequent
- if (typeof _didUseCachedData !== 'boolean') {
- if (!environmentService.configuration.codeCachePath || !productService.commit) {
- _didUseCachedData = false; // we only produce cached data whith commit and code cache path
- } else if (storageService.get(lastRunningCommitStorageKey, StorageScope.GLOBAL) === productService.commit) {
- _didUseCachedData = true; // subsequent start on same commit, assume cached data is there
- } else {
- storageService.store(lastRunningCommitStorageKey, productService.commit, StorageScope.GLOBAL, StorageTarget.MACHINE);
- _didUseCachedData = false; // first time start on commit, assume cached data is not yet there
+ if (!Boolean((<any>window).require.getConfig().nodeCachedData)) {
+ return false;
+ }
+ // There are loader events that signal if cached data was missing, rejected,
+ // or used. The former two mean no cached data.
+ let cachedDataFound = 0;
+ for (const event of require.getStats()) {
+ switch (event.type) {
+ case LoaderEventType.CachedDataRejected:
+ return false;
+ case LoaderEventType.CachedDataFound:
+ cachedDataFound += 1;
+ break;
}
}
- return _didUseCachedData;
+ return cachedDataFound > 0;
}
//#endregion