Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/profile/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
/*
* Tests that asyncFlushCurrentProfile succeeds if we startup into
* the default managed profile for a profile group (see bug 1963173).
*/
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async () => {
let hash = xreDirProvider.getInstallHash();
let defaultProfile = makeRandomProfileDir("default");
let otherProfile = makeRandomProfileDir("other");
let absoluteProfile = gProfD.clone();
absoluteProfile.append("absolute");
absoluteProfile.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
let storeID = "b0bacafe";
let profilesIni = {
profiles: [
{
name: "default",
path: defaultProfile.leafName,
storeID,
default: true,
},
],
installs: {
[hash]: {
default: defaultProfile.leafName,
},
},
};
writeProfilesIni(profilesIni);
Services.prefs.setCharPref("toolkit.profiles.storeID", storeID);
let service = getProfileService();
selectStartupProfile();
// Overwrite profiles.ini: simulate another instance launching, getting
// app focus, and flushing to disk, overwriting the default path.
let overwriteProfilesIni = () => {
let updated = {
profiles: [
{
name: "default",
path: otherProfile.leafName,
storeID,
default: true,
},
],
installs: {
[hash]: {
default: otherProfile.leafName,
},
},
};
writeProfilesIni(updated);
let profileData = readProfilesIni();
Assert.equal(
profileData.profiles[0].path,
otherProfile.leafName,
"Default path should now be the unmanaged profile path"
);
};
overwriteProfilesIni();
// Now, simulate the default profile receiving app focus: asyncFlush would
// fail, since profiles.ini has been updated since startup, but we should
// then fall back to asyncFlushCurrentProfile, which should succeed.
let asyncRewriteDefault = async (expectedPath, expectedRelative) => {
await service.asyncFlushCurrentProfile();
let profileData = readProfilesIni();
Assert.equal(
profileData.profiles[0].path,
expectedPath,
"AsyncFlushCurrentProfile should have updated the path to the path of the current managed profile"
);
Assert.equal(
profileData.profiles[0].isRelative,
expectedRelative,
"AsyncFlushCurrentProfile should have updated IsRelative correctly"
);
Assert.equal(
profileData.installs[hash].default,
expectedPath,
"AsyncFlushCurrentProfile should have updated the path to the path of the current managed profile"
);
};
await asyncRewriteDefault(defaultProfile.leafName, true);
// Just to be sure, repeat the other instance setting itself to default,
// then this instance flushing over top of those changes.
overwriteProfilesIni();
await asyncRewriteDefault(defaultProfile.leafName, true);
// Now change the root dir and flush.
service.currentProfile.rootDir = absoluteProfile;
await asyncRewriteDefault(absoluteProfile.path, false);
}
);