diff --git a/src/vs/platform/userDataProfile/common/userDataProfile.ts b/src/vs/platform/userDataProfile/common/userDataProfile.ts index 1d3cc902349..9df1359aed6 100644 --- a/src/vs/platform/userDataProfile/common/userDataProfile.ts +++ b/src/vs/platform/userDataProfile/common/userDataProfile.ts @@ -225,6 +225,10 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf } getProfile(workspaceIdentifier: WorkspaceIdentifier, profileToUseIfNotSet: IUserDataProfile): IUserDataProfile { + if (!this.enabled) { + return this.defaultProfile; + } + const workspace = this.getWorkspace(workspaceIdentifier); let profile = URI.isUri(workspace) ? this.profilesObject.workspaces.get(workspace) : this.profilesObject.emptyWindow; if (!profile) { diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts index b36b008adce..2e744b847fa 100644 --- a/src/vs/workbench/browser/web.main.ts +++ b/src/vs/workbench/browser/web.main.ts @@ -269,7 +269,9 @@ export class BrowserMain extends Disposable { // User Data Profiles const userDataProfilesService = new BrowserUserDataProfilesService(environmentService, fileService, uriIdentityService, logService); serviceCollection.set(IUserDataProfilesService, userDataProfilesService); - const userDataProfileService = new UserDataProfileService(userDataProfilesService.getProfile(isWorkspaceIdentifier(payload) || isSingleFolderWorkspaceIdentifier(payload) ? payload : 'empty-window', userDataProfilesService.defaultProfile), userDataProfilesService); + const lastActiveProfile = environmentService.lastActiveProfile ? userDataProfilesService.profiles.find(p => p.id === environmentService.lastActiveProfile) : undefined; + const currentProfile = userDataProfilesService.getProfile(isWorkspaceIdentifier(payload) || isSingleFolderWorkspaceIdentifier(payload) ? payload : 'empty-window', lastActiveProfile ?? userDataProfilesService.defaultProfile); + const userDataProfileService = new UserDataProfileService(currentProfile, userDataProfilesService); serviceCollection.set(IUserDataProfileService, userDataProfileService); // Long running services (workspace, config, storage) diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts index 122eba1dec7..1ed00644937 100644 --- a/src/vs/workbench/services/environment/browser/environmentService.ts +++ b/src/vs/workbench/services/environment/browser/environmentService.ts @@ -208,6 +208,9 @@ export class BrowserWorkbenchEnvironmentService implements IBrowserWorkbenchEnvi @memoize get disableWorkspaceTrust(): boolean { return !this.options.enableWorkspaceTrust; } + @memoize + get lastActiveProfile(): string | undefined { return this.payload?.get('lastActiveProfile'); } + editSessionId: string | undefined = this.options.editSessionId; private payload: Map | undefined; diff --git a/src/vs/workbench/services/host/browser/browserHostService.ts b/src/vs/workbench/services/host/browser/browserHostService.ts index 25fca6a0136..efba94ca42a 100644 --- a/src/vs/workbench/services/host/browser/browserHostService.ts +++ b/src/vs/workbench/services/host/browser/browserHostService.ts @@ -35,6 +35,7 @@ import { isTemporaryWorkspace, IWorkspaceContextService } from 'vs/platform/work import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { Schemas } from 'vs/base/common/network'; import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; +import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; /** * A workspace to open in the workbench can either be: @@ -112,7 +113,8 @@ export class BrowserHostService extends Disposable implements IHostService { @ILifecycleService private readonly lifecycleService: BrowserLifecycleService, @ILogService private readonly logService: ILogService, @IDialogService private readonly dialogService: IDialogService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService + @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, ) { super(); @@ -214,7 +216,7 @@ export class BrowserHostService extends Disposable implements IHostService { } private async doOpenWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise { - const payload = this.preservePayload(); + const payload = this.preservePayload(false /* not an empty window */); const fileOpenables: IFileToOpen[] = []; const foldersToAdd: IWorkspaceFolderCreationData[] = []; @@ -371,13 +373,11 @@ export class BrowserHostService extends Disposable implements IHostService { this.instantiationService.invokeFunction(accessor => fn(accessor)); } - private preservePayload(): Array | undefined { + private preservePayload(isEmptyWindow: boolean): Array | undefined { // Selectively copy payload: for now only extension debugging properties are considered - let newPayload: Array | undefined = undefined; - if (this.environmentService.extensionDevelopmentLocationURI) { - newPayload = new Array(); - + const newPayload: Array = new Array(); + if (!isEmptyWindow && this.environmentService.extensionDevelopmentLocationURI) { newPayload.push(['extensionDevelopmentPath', this.environmentService.extensionDevelopmentLocationURI.toString()]); if (this.environmentService.debugExtensionHost.debugId) { @@ -389,7 +389,11 @@ export class BrowserHostService extends Disposable implements IHostService { } } - return newPayload; + if (!this.userDataProfileService.currentProfile.isDefault) { + newPayload.push(['lastActiveProfile', this.userDataProfileService.currentProfile.id]); + } + + return newPayload.length ? newPayload : undefined; } private getRecentLabel(openable: IWindowOpenable): string { @@ -421,7 +425,10 @@ export class BrowserHostService extends Disposable implements IHostService { } private async doOpenEmptyWindow(options?: IOpenEmptyWindowOptions): Promise { - return this.doOpen(undefined, { reuse: options?.forceReuseWindow }); + return this.doOpen(undefined, { + reuse: options?.forceReuseWindow, + payload: this.preservePayload(true /* empty window */) + }); } private async doOpen(workspace: IWorkspace, options?: { reuse?: boolean; payload?: object }): Promise {