Skip to content

Commit 87a6ba5

Browse files
authored
fix default profile (microsoft#152915)
- send all profiles to window and shared process - set first profile as default profile
1 parent 668c538 commit 87a6ba5

File tree

20 files changed

+44
-50
lines changed

20 files changed

+44
-50
lines changed

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ import { InspectProfilingService as V8InspectProfilingService } from 'vs/platfor
100100
import { IV8InspectProfilingService } from 'vs/platform/profiling/common/profiling';
101101
import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService';
102102
import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/extensionsScannerService';
103-
import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
103+
import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
104104
import { ExtensionsProfileScannerService, IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService';
105105
import { PolicyChannelClient } from 'vs/platform/policy/common/policyIpc';
106106
import { IPolicyService, NullPolicyService } from 'vs/platform/policy/common/policy';
107+
import { UserDataProfilesNativeService } from 'vs/platform/userDataProfile/electron-sandbox/userDataProfile';
107108
import { OneDataSystemWebAppender } from 'vs/platform/telemetry/browser/1dsAppender';
108109

109110
class SharedProcessMain extends Disposable {
@@ -231,7 +232,7 @@ class SharedProcessMain extends Disposable {
231232
fileService.registerProvider(Schemas.vscodeUserData, userDataFileSystemProvider);
232233

233234
// User Data Profiles
234-
const userDataProfilesService = this._register(new UserDataProfilesService(this.configuration.defaultProfile, environmentService, fileService, logService));
235+
const userDataProfilesService = this._register(new UserDataProfilesNativeService(this.configuration.profiles, mainProcessService, environmentService, fileService, logService));
235236
services.set(IUserDataProfilesService, userDataProfilesService);
236237

237238
// Configuration

src/vs/code/electron-main/app.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,9 @@ export class CodeApplication extends Disposable {
711711
sharedProcessClient.then(client => client.registerChannel(LOCAL_FILE_SYSTEM_CHANNEL_NAME, fileSystemProviderChannel));
712712

713713
// Profiles
714-
mainProcessElectronServer.registerChannel('userDataProfiles', ProxyChannel.fromService(accessor.get(IUserDataProfilesMainService)));
714+
const userDataProfilesService = ProxyChannel.fromService(accessor.get(IUserDataProfilesMainService));
715+
mainProcessElectronServer.registerChannel('userDataProfiles', userDataProfilesService);
716+
sharedProcessClient.then(client => client.registerChannel('userDataProfiles', userDataProfilesService));
715717

716718
// Update
717719
const updateChannel = new UpdateChannel(accessor.get(IUpdateService));

src/vs/code/node/cliProcessMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class CliMain extends Disposable {
134134
fileService.registerProvider(Schemas.file, diskFileSystemProvider);
135135

136136
// User Data Profiles
137-
const userDataProfilesService = new UserDataProfilesService(undefined, environmentService, fileService, logService);
137+
const userDataProfilesService = new UserDataProfilesService(environmentService, fileService, logService);
138138
services.set(IUserDataProfilesService, userDataProfilesService);
139139

140140
// Policy

src/vs/platform/sharedProcess/electron-main/sharedProcess.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ export class SharedProcess extends Disposable implements ISharedProcess {
242242
appRoot: this.environmentMainService.appRoot,
243243
codeCachePath: this.environmentMainService.codeCachePath,
244244
backupWorkspacesPath: this.environmentMainService.backupWorkspacesPath,
245-
defaultProfile: this.userDataProfilesService.defaultProfile,
245+
profiles: this.userDataProfilesService.profiles,
246246
userEnv: this.userEnv,
247247
args: this.environmentMainService.args,
248248
logLevel: this.logService.getLevel(),

src/vs/platform/sharedProcess/node/sharedProcess.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface ISharedProcessConfiguration extends ISandboxConfiguration {
2929

3030
readonly backupWorkspacesPath: string;
3131

32-
readonly defaultProfile: UriDto<IUserDataProfile>;
32+
readonly profiles: UriDto<IUserDataProfile>[];
3333

3434
readonly policiesData?: IStringDictionary<{ definition: PolicyDefinition; value: PolicyValue }>;
3535
}

src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ suite('FileUserDataProvider', () => {
5252
await testObject.createFolder(backupWorkspaceHomeOnDisk);
5353

5454
environmentService = new TestEnvironmentService(userDataHomeOnDisk);
55-
userDataProfilesService = new UserDataProfilesService(undefined, environmentService, testObject, logService);
55+
userDataProfilesService = new UserDataProfilesService(environmentService, testObject, logService);
5656

5757
fileUserDataProvider = new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, logService);
5858
disposables.add(fileUserDataProvider);

src/vs/platform/userDataProfile/common/userDataProfile.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,23 +116,20 @@ export class UserDataProfilesService extends Disposable implements IUserDataProf
116116

117117
readonly profilesHome: URI;
118118

119-
protected _defaultProfile: IUserDataProfile;
120-
get defaultProfile(): IUserDataProfile { return this._defaultProfile; }
121-
119+
private readonly _defaultProfile = this.createDefaultUserDataProfile(false);
120+
get defaultProfile(): IUserDataProfile { return this.profiles[0] ?? this._defaultProfile; }
122121
get profiles(): IUserDataProfile[] { return []; }
123122

124123
protected readonly _onDidChangeProfiles = this._register(new Emitter<IUserDataProfile[]>());
125124
readonly onDidChangeProfiles = this._onDidChangeProfiles.event;
126125

127126
constructor(
128-
defaultProfile: UriDto<IUserDataProfile> | undefined,
129127
@IEnvironmentService protected readonly environmentService: IEnvironmentService,
130128
@IFileService protected readonly fileService: IFileService,
131129
@ILogService protected readonly logService: ILogService
132130
) {
133131
super();
134132
this.profilesHome = joinPath(this.environmentService.userRoamingDataHome, 'profiles');
135-
this._defaultProfile = defaultProfile ? reviveProfile(defaultProfile, this.profilesHome.scheme) : this.createDefaultUserDataProfile(false);
136133
}
137134

138135
newProfile(name: string, useDefaultFlags?: UseDefaultProfileFlags): CustomUserDataProfile {

src/vs/platform/userDataProfile/electron-main/userDataProfile.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export const IUserDataProfilesMainService = refineServiceDecorator<IUserDataProf
3232
export interface IUserDataProfilesMainService extends IUserDataProfilesService {
3333
readonly onWillCreateProfile: Event<WillCreateProfileEvent>;
3434
readonly onWillRemoveProfile: Event<WillRemoveProfileEvent>;
35-
getAllProfiles(): Promise<IUserDataProfile[]>;
3635
}
3736

3837
type UserDataProfilesObject = {
@@ -69,38 +68,34 @@ export class UserDataProfilesMainService extends UserDataProfilesService impleme
6968
@IFileService fileService: IFileService,
7069
@ILogService logService: ILogService,
7170
) {
72-
super(undefined, environmentService, fileService, logService);
71+
super(environmentService, fileService, logService);
7372
}
7473

7574
init(): void {
76-
if (this.storedProfiles.length) {
77-
this._defaultProfile = this.createDefaultUserDataProfile(true);
78-
}
75+
this._profilesObject = undefined;
7976
}
8077

8178
private _profilesObject: UserDataProfilesObject | undefined;
8279
private get profilesObject(): UserDataProfilesObject {
8380
if (!this._profilesObject) {
8481
const profiles = this.storedProfiles.map<IUserDataProfile>(storedProfile => toUserDataProfile(storedProfile.name, storedProfile.location, storedProfile.useDefaultFlags));
85-
profiles.unshift(this.defaultProfile);
86-
const workspaces = this.storedWorskpaceInfos.reduce((workspaces, workspaceProfileInfo) => {
87-
const profile = profiles.find(p => this.uriIdentityService.extUri.isEqual(p.location, workspaceProfileInfo.profile));
88-
if (profile) {
89-
workspaces.set(workspaceProfileInfo.workspace, profile);
82+
const workspaces = new ResourceMap<IUserDataProfile>();
83+
if (profiles.length) {
84+
profiles.unshift(this.createDefaultUserDataProfile(true));
85+
for (const workspaceProfileInfo of this.storedWorskpaceInfos) {
86+
const profile = profiles.find(p => this.uriIdentityService.extUri.isEqual(p.location, workspaceProfileInfo.profile));
87+
if (profile) {
88+
workspaces.set(workspaceProfileInfo.workspace, profile);
89+
}
9090
}
91-
return workspaces;
92-
}, new ResourceMap<IUserDataProfile>());
93-
this._profilesObject = { profiles: profiles, workspaces: workspaces };
91+
}
92+
this._profilesObject = { profiles, workspaces };
9493
}
9594
return this._profilesObject;
9695
}
9796

9897
override get profiles(): IUserDataProfile[] { return this.profilesObject.profiles; }
9998

100-
async getAllProfiles(): Promise<IUserDataProfile[]> {
101-
return this.profiles;
102-
}
103-
10499
override getProfile(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): IUserDataProfile {
105100
return this.profilesObject.workspaces.get(this.getWorkspace(workspaceIdentifier)) ?? this.defaultProfile;
106101
}

src/vs/platform/userDataProfile/electron-sandbox/userDataProfile.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,28 @@ import { UriDto } from 'vs/base/common/types';
77
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
88
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
99
import { IFileService } from 'vs/platform/files/common/files';
10+
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/services';
1011
import { ILogService } from 'vs/platform/log/common/log';
1112
import { IUserDataProfile, IUserDataProfilesService, reviveProfile, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
1213
import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace';
1314

1415
export class UserDataProfilesNativeService extends UserDataProfilesService implements IUserDataProfilesService {
1516

17+
private readonly channel: IChannel;
18+
1619
private _profiles: IUserDataProfile[] = [];
1720
override get profiles(): IUserDataProfile[] { return this._profiles; }
1821

1922
constructor(
20-
defaultProfile: UriDto<IUserDataProfile>,
21-
private readonly channel: IChannel,
23+
profiles: UriDto<IUserDataProfile>[],
24+
@IMainProcessService mainProcessService: IMainProcessService,
2225
@IEnvironmentService environmentService: IEnvironmentService,
2326
@IFileService fileService: IFileService,
2427
@ILogService logService: ILogService,
2528
) {
26-
super(defaultProfile, environmentService, fileService, logService);
27-
this.initializeProfiles();
28-
}
29-
30-
private async initializeProfiles(): Promise<void> {
31-
const result = await this.channel.call<UriDto<IUserDataProfile>[]>('getAllProfiles');
32-
this._profiles = result.map(profile => reviveProfile(profile, this.profilesHome.scheme));
29+
super(environmentService, fileService, logService);
30+
this.channel = mainProcessService.getChannel('userDataProfiles');
31+
this._profiles = profiles.map(profile => reviveProfile(profile, this.profilesHome.scheme));
3332
this._register(this.channel.listen<IUserDataProfile[]>('onDidChangeProfiles')((profiles) => {
3433
this._profiles = profiles.map(profile => reviveProfile(profile, this.profilesHome.scheme));
3534
this._onDidChangeProfiles.fire(this._profiles);

src/vs/platform/userDataSync/test/common/userDataSyncClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class UserDataSyncClient extends Disposable {
8383
fileService.registerProvider(Schemas.inMemory, new InMemoryFileSystemProvider());
8484
this.instantiationService.stub(IFileService, fileService);
8585

86-
const userDataProfilesService = this.instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(undefined, environmentService, fileService, logService));
86+
const userDataProfilesService = this.instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, logService));
8787

8888
this.instantiationService.stub(IStorageService, this._register(new InMemoryStorageService()));
8989

0 commit comments

Comments
 (0)