Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
/*
* Tests that profile is inside App Group container when MOZ_APP_GROUP is set.
*/
add_task(async function test_appgroup_profile_location() {
if (AppConstants.MOZ_UPDATE_CHANNEL != "nightly") {
return;
}
Services.env.set("MOZ_APP_GROUP", "1");
const profileName = "testappgroup";
const service = getProfileService();
const profile = service.createProfile(null, profileName);
profile.lock({});
service.flush();
registerCleanupFunction(() => {
if (profile) {
profile.remove(true);
service.flush();
}
Services.env.set("MOZ_APP_GROUP", "");
});
const profileDir = profile.rootDir;
const APP_GROUP_PATH =
"Group Containers/43AQ936H96.org.mozilla.firefox.browserprofiles";
Assert.ok(
profileDir.path.includes(APP_GROUP_PATH),
"Profile should be inside App Group container when MOZ_APP_GROUP is set"
);
const uAppData = Services.dirsvc.get("UAppData", Ci.nsIFile);
const iniFile = uAppData.clone();
iniFile.append("profiles.ini");
const factory = Cc["@mozilla.org/xpcom/ini-parser-factory;1"].getService(
Ci.nsIINIParserFactory
);
const ini = factory.createINIParser(iniFile);
// Find the section whose name matches our profile.
let sectionName = null;
const sections = ini.getSections();
while (sections.hasMore()) {
const s = sections.getNext();
let name = "";
try {
name = ini.getString(s, "Name");
} catch (_) {}
if (name === profileName) {
sectionName = s;
break;
}
}
Assert.ok(sectionName, "profiles.ini contains a section for this profile");
// Ensure profiles.ini stores a relative entry.
Assert.equal(
ini.getString(sectionName, "IsRelative"),
"1",
"IsRelative=1 for App Group profile"
);
const relPath = ini.getString(sectionName, "Path");
Assert.ok(!relPath.startsWith("/"), "profiles.ini Path is not absolute");
Assert.ok(
relPath.includes("/Profiles/"),
"profiles.ini Path contains /Profiles/"
);
// localDir should also be under the App Group container.
const localDir = profile.localDir;
Assert.ok(
localDir.path.includes(APP_GROUP_PATH) &&
localDir.path.includes("/Library/Caches/Profiles/"),
"localDir should be under App Group Library/Caches/Profiles"
);
const localTail = localDir.path.split("/Profiles/")[1];
const rootTail = profileDir.path.split("/Profiles/")[1];
Assert.equal(
localTail,
rootTail,
"localDir keeps the same Profiles/ tail as rootDir"
);
});