Bug 1963938 - Disable config-based prefs when locked r=reusable-components-reviewers,settings-reviewers,tgiles
Differential Revision: https://phabricator.services.mozilla.com/D247503
This commit is contained in:
committed by
mstriemer@mozilla.com
parent
5eef155802
commit
6c85e64f09
@@ -92,6 +92,7 @@
|
||||
);
|
||||
is(control.inputEl.dataset.l10nId, LABEL_L10N_ID, "Label is set");
|
||||
is(control.inputEl.checked, true, "checkbox is checked");
|
||||
is(control.inputEl.disabled, false, "checkbox is enabled");
|
||||
is(Services.prefs.getBoolPref(PREF), true, "pref is true");
|
||||
|
||||
let settingChanged = waitForSettingChange(setting);
|
||||
@@ -113,6 +114,21 @@
|
||||
"checkbox becomes checked after pfef change"
|
||||
);
|
||||
is(Services.prefs.getBoolPref(PREF), true, "pref is true");
|
||||
|
||||
// Pref locking
|
||||
settingChanged = waitForSettingChange(setting);
|
||||
Services.prefs.lockPref(PREF);
|
||||
await settingChanged;
|
||||
is(control.inputEl.disabled, true, "checkbox is disabled when locked");
|
||||
|
||||
settingChanged = waitForSettingChange(setting);
|
||||
Services.prefs.unlockPref(PREF);
|
||||
await settingChanged;
|
||||
is(
|
||||
control.inputEl.disabled,
|
||||
false,
|
||||
"checkbox is enabled when unlocked"
|
||||
);
|
||||
});
|
||||
|
||||
add_task(async function testSupportLinkCheckbox() {
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
is(checkboxes.length, 2, "Rendered two checkboxes");
|
||||
is(checkboxes[0].dataset.l10nId, LABEL_L10N_ID, "Label is set");
|
||||
is(checkboxes[0].checked, true, "First checkbox is checked");
|
||||
is(checkboxes[0].disabled, false, "First checkbox is enabled");
|
||||
is(Services.prefs.getBoolPref(PREF_ONE), true, "First pref is true");
|
||||
is(checkboxes[1].checked, false, "Second checkbox is unchecked");
|
||||
is(Services.prefs.getBoolPref(PREF_TWO), false, "Second pref is false");
|
||||
@@ -151,6 +152,23 @@
|
||||
"Second checkbox becomes unchecked after pref change"
|
||||
);
|
||||
is(Services.prefs.getBoolPref(PREF_TWO), false, "Second pref is false");
|
||||
|
||||
// Test pref locking
|
||||
settingChanged = waitForSettingChange(
|
||||
Preferences.getSetting(SETTING_ONE)
|
||||
);
|
||||
Services.prefs.lockPref(PREF_ONE);
|
||||
await settingChanged;
|
||||
|
||||
is(checkboxes[0].disabled, true, "Checkbox is disabled when locked");
|
||||
|
||||
settingChanged = waitForSettingChange(
|
||||
Preferences.getSetting(SETTING_ONE)
|
||||
);
|
||||
Services.prefs.unlockPref(PREF_ONE);
|
||||
await settingChanged;
|
||||
|
||||
is(checkboxes[0].disabled, false, "Checkbox is enabled when unlocked");
|
||||
});
|
||||
|
||||
add_task(async function testSupportLinkXulCheckbox() {
|
||||
|
||||
@@ -58,6 +58,7 @@ export class SettingControl extends MozLitElement {
|
||||
.checked=${this.value}
|
||||
.supportPage=${this.config.supportPage}
|
||||
data-subcategory=${ifDefined(this.config.subcategory)}
|
||||
?disabled=${this.setting.locked}
|
||||
@change=${this.onChange}
|
||||
></moz-checkbox>`;
|
||||
}
|
||||
|
||||
@@ -36,8 +36,14 @@ export class SettingGroup extends MozLitElement {
|
||||
checkbox.addEventListener("command", e =>
|
||||
setting.userChange(e.target.checked)
|
||||
);
|
||||
setting.on("change", () => (checkbox.checked = setting.value));
|
||||
checkbox.checked = setting.value;
|
||||
|
||||
function setValue() {
|
||||
checkbox.checked = setting.value;
|
||||
checkbox.disabled = setting.locked;
|
||||
}
|
||||
setting.on("change", setValue);
|
||||
setValue();
|
||||
|
||||
if (item.supportPage) {
|
||||
let container = document.createXULElement("hbox");
|
||||
container.setAttribute("align", "center");
|
||||
|
||||
@@ -714,6 +714,10 @@ const Preferences = (window.Preferences = (function () {
|
||||
}
|
||||
}
|
||||
|
||||
get locked() {
|
||||
return this.pref?.locked ?? false;
|
||||
}
|
||||
|
||||
get visible() {
|
||||
return this.config.visible ? this.config.visible() : true;
|
||||
}
|
||||
|
||||
@@ -145,6 +145,42 @@
|
||||
|
||||
is(setting.visible, false, "Setting is not visible");
|
||||
});
|
||||
|
||||
add_task(async function testPrefIsLocked() {
|
||||
const PREF_ID = "test.setting.locked";
|
||||
const SETTING_ID = "testSettingLocked";
|
||||
const NO_PREF_ID = "noSettingLocked";
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [[PREF_ID, false]],
|
||||
});
|
||||
Preferences.add({
|
||||
id: PREF_ID,
|
||||
type: "bool",
|
||||
});
|
||||
Preferences.addSetting({
|
||||
id: SETTING_ID,
|
||||
pref: PREF_ID,
|
||||
});
|
||||
Preferences.addSetting({
|
||||
id: NO_PREF_ID,
|
||||
get: () => true,
|
||||
});
|
||||
|
||||
let setting = Preferences.getSetting(SETTING_ID);
|
||||
ok(setting, "Got a setting object");
|
||||
|
||||
is(setting.locked, false, "Setting is not locked");
|
||||
|
||||
Services.prefs.lockPref(PREF_ID);
|
||||
is(setting.locked, true, "Setting is locked");
|
||||
|
||||
Services.prefs.unlockPref(PREF_ID);
|
||||
is(setting.locked, false, "Setting is not unlocked");
|
||||
|
||||
let noPrefSetting = Preferences.getSetting(NO_PREF_ID);
|
||||
ok(noPrefSetting, "Got a setting not backed by prefs");
|
||||
is(noPrefSetting.locked, false, "Non-pref setting is not locked");
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user