Merge remote-tracking branch origin/main into feature/font-picker

This commit is contained in:
Simon Siefke
2024-11-28 18:46:51 +01:00
1594 changed files with 212098 additions and 37403 deletions

View File

@@ -51,9 +51,8 @@ import { DiskFileSystemProvider } from '../../platform/files/node/diskFileSystem
import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js';
import { IInstantiationService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js';
import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js';
import { IProcessMainService, IIssueMainService } from '../../platform/issue/common/issue.js';
import { IssueMainService } from '../../platform/issue/electron-main/issueMainService.js';
import { ProcessMainService } from '../../platform/issue/electron-main/processMainService.js';
import { IProcessMainService } from '../../platform/process/common/process.js';
import { ProcessMainService } from '../../platform/process/electron-main/processMainService.js';
import { IKeyboardLayoutMainService, KeyboardLayoutMainService } from '../../platform/keyboardLayout/electron-main/keyboardLayoutMainService.js';
import { ILaunchMainService, LaunchMainService } from '../../platform/launch/electron-main/launchMainService.js';
import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from '../../platform/lifecycle/electron-main/lifecycleMainService.js';
@@ -103,7 +102,7 @@ import { ExtensionsScannerService } from '../../platform/extensionManagement/nod
import { UserDataProfilesHandler } from '../../platform/userDataProfile/electron-main/userDataProfilesHandler.js';
import { ProfileStorageChangesListenerChannel } from '../../platform/userDataProfile/electron-main/userDataProfileStorageIpc.js';
import { Promises, RunOnceScheduler, runWhenGlobalIdle } from '../../base/common/async.js';
import { resolveMachineId, resolveSqmId, resolvedevDeviceId } from '../../platform/telemetry/electron-main/telemetryUtils.js';
import { resolveMachineId, resolveSqmId, resolvedevDeviceId, validatedevDeviceId } from '../../platform/telemetry/electron-main/telemetryUtils.js';
import { ExtensionsProfileScannerService } from '../../platform/extensionManagement/node/extensionsProfileScannerService.js';
import { LoggerChannel } from '../../platform/log/electron-main/logIpc.js';
import { ILoggerMainService } from '../../platform/log/electron-main/loggerService.js';
@@ -119,7 +118,6 @@ import { IAuxiliaryWindowsMainService } from '../../platform/auxiliaryWindow/ele
import { AuxiliaryWindowsMainService } from '../../platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.js';
import { normalizeNFC } from '../../base/common/normalization.js';
import { ICSSDevelopmentService, CSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js';
import { ExtensionSignatureVerificationService, IExtensionSignatureVerificationService } from '../../platform/extensionManagement/node/extensionSignatureVerificationService.js';
/**
* The main VS Code application. There will only ever be one instance,
@@ -163,6 +161,7 @@ export class CodeApplication extends Disposable {
// !!! DO NOT CHANGE without consulting the documentation !!!
//
const isUrlFromWindow = (requestingUrl?: string | undefined) => requestingUrl?.startsWith(`${Schemas.vscodeFileResource}://${VSCODE_AUTHORITY}`);
const isUrlFromWebview = (requestingUrl: string | undefined) => requestingUrl?.startsWith(`${Schemas.vscodeWebview}://`);
const allowedPermissionsInWebview = new Set([
@@ -170,21 +169,42 @@ export class CodeApplication extends Disposable {
'clipboard-sanitized-write',
]);
<<<<<<< HEAD
const allowedPermissionsDefault = new Set(['font-access', 'local-fonts']);
=======
const allowedPermissionsInCore = new Set([
'media',
'local-fonts',
]);
>>>>>>> origin/main
session.defaultSession.setPermissionRequestHandler((_webContents, permission, callback, details) => {
if (isUrlFromWebview(details.requestingUrl)) {
return callback(allowedPermissionsInWebview.has(permission));
}
<<<<<<< HEAD
return callback(allowedPermissionsDefault.has(permission));
=======
if (isUrlFromWindow(details.requestingUrl)) {
return callback(allowedPermissionsInCore.has(permission));
}
return callback(false);
>>>>>>> origin/main
});
session.defaultSession.setPermissionCheckHandler((_webContents, permission, _origin, details) => {
if (isUrlFromWebview(details.requestingUrl)) {
return allowedPermissionsInWebview.has(permission);
}
<<<<<<< HEAD
return allowedPermissionsDefault.has(permission);
=======
if (isUrlFromWindow(details.requestingUrl)) {
return allowedPermissionsInCore.has(permission);
}
return false;
>>>>>>> origin/main
});
//#endregion
@@ -615,7 +635,14 @@ export class CodeApplication extends Disposable {
// Set lifecycle phase to `Eventually` after a short delay and when idle (min 2.5sec, max 5sec)
const eventuallyPhaseScheduler = this._register(new RunOnceScheduler(() => {
this._register(runWhenGlobalIdle(() => this.lifecycleMainService.phase = LifecycleMainPhase.Eventually, 2500));
this._register(runWhenGlobalIdle(() => {
// Signal phase: eventually
this.lifecycleMainService.phase = LifecycleMainPhase.Eventually;
// Eventually Post Open Window Tasks
this.eventuallyAfterWindowOpen();
}, 2500));
}, 2500));
eventuallyPhaseScheduler.schedule();
}
@@ -1014,9 +1041,6 @@ export class CodeApplication extends Disposable {
services.set(IDiagnosticsMainService, new SyncDescriptor(DiagnosticsMainService, undefined, false /* proxied to other processes */));
services.set(IDiagnosticsService, ProxyChannel.toService(getDelayedChannel(sharedProcessReady.then(client => client.getChannel('diagnostics')))));
// Issues
services.set(IIssueMainService, new SyncDescriptor(IssueMainService, [this.userEnv]));
// Process
services.set(IProcessMainService, new SyncDescriptor(ProcessMainService, [this.userEnv]));
@@ -1105,11 +1129,6 @@ export class CodeApplication extends Disposable {
// Dev Only: CSS service (for ESM)
services.set(ICSSDevelopmentService, new SyncDescriptor(CSSDevelopmentService, undefined, true));
if (this.productService.quality !== 'stable') {
// extensions signature verification service
services.set(IExtensionSignatureVerificationService, new SyncDescriptor(ExtensionSignatureVerificationService, undefined, true));
}
// Init services that require it
await Promises.settled([
backupMainService.initialize(),
@@ -1151,21 +1170,10 @@ export class CodeApplication extends Disposable {
mainProcessElectronServer.registerChannel('userDataProfiles', userDataProfilesService);
sharedProcessClient.then(client => client.registerChannel('userDataProfiles', userDataProfilesService));
if (this.productService.quality !== 'stable') {
// Extension signature verification service
const extensionSignatureVerificationService = accessor.get(IExtensionSignatureVerificationService);
sharedProcessClient.then(client => client.registerChannel('signatureVerificationService',
ProxyChannel.fromService(extensionSignatureVerificationService, disposables)));
}
// Update
const updateChannel = new UpdateChannel(accessor.get(IUpdateService));
mainProcessElectronServer.registerChannel('update', updateChannel);
// Issues
const issueChannel = ProxyChannel.fromService(accessor.get(IIssueMainService), disposables);
mainProcessElectronServer.registerChannel('issue', issueChannel);
// Process
const processChannel = ProxyChannel.fromService(accessor.get(IProcessMainService), disposables);
mainProcessElectronServer.registerChannel('process', processChannel);
@@ -1460,4 +1468,11 @@ export class CodeApplication extends Disposable {
this.windowsMainService?.sendToFocused('vscode:showArgvParseWarning');
}
}
private eventuallyAfterWindowOpen(): void {
// Validate Device ID is up to date (delay this as it has shown significant perf impact)
// Refs: https://github.com/microsoft/vscode/issues/234064
validatedevDeviceId(this.stateService, this.logService);
}
}