Bug 1894239: Enable MOZ_SELECTABLE_PROFILES by default. r=jhirsch,omc-reviewers,niklas,emcminn,mconley

This also removes some tests of `MOZ_SELECTABLE_PROFILES` from `browser/components/profiles` files
where the test is pointless because that test is excluded from the build if `MOZ_SELECTABLE_PROFILES`
is unset.

Differential Revision: https://phabricator.services.mozilla.com/D227372
This commit is contained in:
Dave Townsend
2024-11-01 17:08:27 +00:00
parent 60d975e6b2
commit 0085ce80d2
20 changed files with 293 additions and 329 deletions

View File

@@ -21,7 +21,8 @@ var gProfiles = {
"PROFILES_ENABLED",
"browser.profiles.enabled",
false,
this.toggleProfileButtonVisibility.bind(this)
this.toggleProfileButtonVisibility.bind(this),
() => SelectableProfileService?.isEnabled
);
if (!this.PROFILES_ENABLED) {

View File

@@ -73,7 +73,9 @@ add_task(async function () {
async function openSubViewsRecursively(currentView) {
let navButtons = Array.from(
// Ensure that only enabled buttons are tested
currentView.querySelectorAll(".subviewbutton-nav:not([disabled])")
currentView.querySelectorAll(
".subviewbutton-nav:not([disabled]):not([hidden])"
)
);
if (!navButtons) {
return;

View File

@@ -1957,10 +1957,7 @@ BrowserGlue.prototype = {
lazy.DoHController.init();
if (
AppConstants.MOZ_SELECTABLE_PROFILES &&
Services.prefs.getBoolPref("browser.profiles.enabled", false)
) {
if (AppConstants.MOZ_SELECTABLE_PROFILES) {
lazy.SelectableProfileService.init().catch(console.error);
}

View File

@@ -588,9 +588,9 @@ const TargetingGetters = {
},
get canCreateSelectableProfiles() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
return null;
return false;
}
return !!lazy.SelectableProfileService?.groupToolkitProfile;
return lazy.SelectableProfileService?.isEnabled ?? false;
},
get hasSelectableProfiles() {
return !!lazy.profileStoreID;

View File

@@ -219,6 +219,16 @@ add_task(async function check_canCreateSelectableProfiles() {
return;
}
is(
await ASRouterTargeting.Environment.canCreateSelectableProfiles,
false,
"The new profiles feature doesn't support standalone profiles which are used in automation."
);
// We have to fake there being a real profile available and enable the profiles feature
await pushPrefs(["browser.profiles.enabled", "someValue"]);
await SelectableProfileService.resetProfileService({ currentProfile: {} });
is(
await ASRouterTargeting.Environment.canCreateSelectableProfiles,
true,
@@ -231,6 +241,8 @@ add_task(async function check_canCreateSelectableProfiles() {
message,
"should select correct item by canCreateSelectableProfiles"
);
await SelectableProfileService.resetProfileService(null);
});
add_task(async function check_hasSelectableProfiles() {

View File

@@ -118,6 +118,13 @@ class SelectableProfileServiceClass {
this.#asyncShutdownBlocker = () => this.uninit();
}
get isEnabled() {
return (
Services.prefs.getBoolPref("browser.profiles.enabled", false) &&
!!(this.#storeID || this.#groupToolkitProfile)
);
}
/**
* For use in testing only, override the profile service with a mock version
* and reset state accordingly.
@@ -258,6 +265,10 @@ class SelectableProfileServiceClass {
);
}
if (!this.isEnabled) {
return;
}
// If the storeID doesn't exist, we don't want to create the db until we
// need to so we early return.
if (!this.storeID) {

View File

@@ -6,13 +6,6 @@
const NEW_PROFILE_NAME = "This is a new profile name";
add_task(async function test_create_profile_name() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
// `mochitest-browser` suite `add_task` does not yet support
// `properties.skip_if`.
ok(true, "Skipping because !AppConstants.MOZ_SELECTABLE_PROFILES");
return;
}
await SpecialPowers.pushPrefEnv({
set: [["browser.profiles.profile-name.updated", false]],
});

View File

@@ -6,13 +6,6 @@
const NEW_PROFILE_NAME = "This is a new profile name";
add_task(async function test_edit_profile_name() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
// `mochitest-browser` suite `add_task` does not yet support
// `properties.skip_if`.
ok(true, "Skipping because !AppConstants.MOZ_SELECTABLE_PROFILES");
return;
}
await initGroupDatabase();
let profile = SelectableProfileService.currentProfile;
Assert.ok(profile, "Should have a profile now");

View File

@@ -4,13 +4,6 @@
"use strict";
add_task(async function test_dbLazilyCreated() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
// `mochitest-browser` suite `add_task` does not yet support
// `properties.skip_if`.
ok(true, "Skipping because !AppConstants.MOZ_SELECTABLE_PROFILES");
return;
}
Assert.ok(
!SelectableProfileService.initialized,
`Selectable Profile Service should not be initialized because the default profile has no storeID`

View File

@@ -4,13 +4,6 @@
"use strict";
add_task(async function test_selector_window() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
// `mochitest-browser` suite `add_task` does not yet support
// `properties.skip_if`.
ok(true, "Skipping because !AppConstants.MOZ_SELECTABLE_PROFILES");
return;
}
await initGroupDatabase();
let profile = SelectableProfileService.currentProfile;

View File

@@ -8,13 +8,6 @@ const { SelectableProfile } = ChromeUtils.importESModule(
);
add_task(async function test_updateDefaultProfileOnWindowSwitch() {
if (!AppConstants.MOZ_SELECTABLE_PROFILES) {
// `mochitest-browser` suite `add_task` does not yet support
// `properties.skip_if`.
ok(true, "Skipping because !AppConstants.MOZ_SELECTABLE_PROFILES");
return;
}
await initGroupDatabase();
let currentProfile = SelectableProfileService.currentProfile;
let profileRootDir = await currentProfile.rootDir;

View File

@@ -3,11 +3,7 @@ https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_recover_storeID() {
add_task(async function test_recover_storeID() {
startProfileService();
Services.prefs.setCharPref("toolkit.profiles.storeID", "foobar");
@@ -30,5 +26,4 @@ add_task(
!Services.prefs.prefHasUserValue("toolkit.profiles.storeID"),
"Should have cleared the storeID pref"
);
}
);
});

View File

@@ -7,11 +7,7 @@ const { Sqlite } = ChromeUtils.importESModule(
"resource://gre/modules/Sqlite.sys.mjs"
);
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_recover_storeID() {
add_task(async function test_recover_storeID() {
startProfileService();
Services.prefs.setCharPref("toolkit.profiles.storeID", "foobar");
@@ -28,9 +24,7 @@ add_task(
openNotExclusive: true,
});
let path = getRelativeProfilePath(
getProfileService().currentProfile.rootDir
);
let path = getRelativeProfilePath(getProfileService().currentProfile.rootDir);
// Slightly annoying we have to replicate this...
await db.execute(`CREATE TABLE IF NOT EXISTS "Profiles" (
@@ -59,10 +53,7 @@ add_task(
const SelectableProfileService = getSelectableProfileService();
await SelectableProfileService.init();
Assert.ok(
SelectableProfileService.initialized,
"Did initialize the service"
);
Assert.ok(SelectableProfileService.initialized, "Did initialize the service");
let profile = SelectableProfileService.currentProfile;
Assert.ok(profile, "Should have a current profile");
@@ -72,5 +63,4 @@ add_task(
"foobar",
"Should have updated the store ID on the profile"
);
}
);
});

View File

@@ -5,11 +5,7 @@ https://creativecommons.org/publicdomain/zero/1.0/ */
add_setup(initSelectableProfileService);
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_launcher() {
add_task(async function test_launcher() {
// mock() returns an object with a fake `runw` method that, when
// called, records its arguments.
let input = [];
@@ -35,5 +31,4 @@ add_task(
}
Assert.deepEqual(expected, input[1], "Expected runw arguments");
}
);
});

View File

@@ -3,11 +3,7 @@ https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_SelectableProfileAndServiceExist() {
add_task(async function test_SelectableProfileAndServiceExist() {
const { SelectableProfile } = ChromeUtils.importESModule(
"resource:///modules/profiles/SelectableProfile.sys.mjs"
);
@@ -17,5 +13,4 @@ add_task(
ok(SelectableProfile, "SelectableProfile exists");
ok(SelectableProfileService, "SelectableProfileService exists");
}
);
});

View File

@@ -3,14 +3,23 @@ https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_SelectableProfileLifecycle() {
add_task(async function test_SelectableProfileLifecycle() {
startProfileService();
const SelectableProfileService = getSelectableProfileService();
Services.prefs.setBoolPref("browser.profiles.enabled", false);
await SelectableProfileService.init();
Assert.ok(
!SelectableProfileService.isEnabled,
"Service should not be enabled"
);
Services.prefs.setBoolPref("browser.profiles.enabled", true);
await SelectableProfileService.init();
Assert.ok(
SelectableProfileService.isEnabled,
"Service should now be enabled"
);
let profiles = await SelectableProfileService.getAllProfiles();
@@ -48,9 +57,7 @@ add_task(
let selectableProfile = profiles[0];
let profile = await SelectableProfileService.getProfile(
selectableProfile.id
);
let profile = await SelectableProfileService.getProfile(selectableProfile.id);
for (let attr of ["id", "name", "path"]) {
Assert.equal(
@@ -108,5 +115,4 @@ add_task(
!profileLocalDirExists,
"Profile local dir was successfully removed"
);
}
);
});

View File

@@ -5,11 +5,7 @@ https://creativecommons.org/publicdomain/zero/1.0/ */
add_setup(initSelectableProfileService);
add_task(
{
skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
},
async function test_SharedPrefsLifecycle() {
add_task(async function test_SharedPrefsLifecycle() {
const SelectableProfileService = getSelectableProfileService();
let prefs = await SelectableProfileService.getAllPrefs();
@@ -69,5 +65,4 @@ add_task(
);
await SelectableProfileService.deleteProfileGroup();
}
);
});

View File

@@ -2,6 +2,10 @@
head = "../../../../../toolkit/profile/test/xpcshell/head.js head.js"
firefox-appdir = "browser"
prefs = [
"browser.profiles.enabled=true",
]
["test_fail_recover_storeID.js"]
["test_recover_storeID.js"]

View File

@@ -1092,16 +1092,10 @@ with only_when(target_is_osx):
# Profile Management
# ==============================================================
# Selectable profiles are temporarily gated behind a build flag
# while we build and stabilize the backend (bug 1893315).
# Selectable profiles are enabled by default.
option(
env="MOZ_SELECTABLE_PROFILES",
help="Enable experimental and unstable profile groups",
)
set_define("MOZ_SELECTABLE_PROFILES", True, when="MOZ_SELECTABLE_PROFILES")
set_config("MOZ_SELECTABLE_PROFILES", True, when="MOZ_SELECTABLE_PROFILES")
set_define("MOZ_SELECTABLE_PROFILES", True)
set_config("MOZ_SELECTABLE_PROFILES", True)
project_flag(
"MOZ_DEDICATED_PROFILES",

View File

@@ -33,10 +33,12 @@ xreDirProvider.setUserDataDirectory(gDataHome, false);
xreDirProvider.setUserDataDirectory(gDataHomeLocal, true);
Services.dirsvc.set("UAppData", gDataHome);
let gProfilesRoot = gDataHome.clone();
gProfilesRoot.append("profiles");
Services.dirsvc.set("DefProfRt", gProfilesRoot);
let gProfilesTemp = gDataHomeLocal.clone();
gProfilesTemp.append("profiles");
if (!AppConstants.XP_UNIX || AppConstants.platform == "macosx") {
gProfilesRoot.append("Profiles");
gProfilesTemp.append("Profiles");
}
Services.dirsvc.set("DefProfRt", gProfilesRoot);
Services.dirsvc.set("DefProfLRt", gProfilesTemp);
let gIsDefaultApp = false;