Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* A setting-control hidden via `setting.visible = false` should not surface
* in search results, even when its visible text is rendered into a nested
* custom element's shadow DOM (e.g. a moz-checkbox > label). Recursing into
* shadow roots without skipping `hidden` subtrees would otherwise match
* labels on controls the user can't see.
*/
add_task(async function test_hidden_control_excluded_from_search() {
const HIDDEN_LABEL = "somehiddencontroltestlabel";
const VISIBLE_LABEL = "somevisiblecontroltestlabel";
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let doc = gBrowser.selectedBrowser.contentDocument;
let win = doc.documentGlobal;
win.Preferences.addSetting({
id: "hiddenSearchSetting",
visible: () => false,
get: () => true,
});
win.Preferences.addSetting({
id: "visibleSearchSetting",
get: () => true,
});
win.SettingGroupManager.registerGroup("hiddenSearchGroup", {
headingLevel: 2,
items: [
{
id: "visibleSearchSetting",
controlAttrs: { label: VISIBLE_LABEL },
},
{
id: "hiddenSearchSetting",
controlAttrs: { label: HIDDEN_LABEL },
},
],
});
let group = doc.createElement("setting-group");
group.setAttribute("groupid", "hiddenSearchGroup");
group.setAttribute("data-category", "panePrivacy");
doc.getElementById("mainPrefPane").appendChild(group);
win.initSettingGroup("hiddenSearchGroup");
await group.updateComplete;
let controls = group.querySelectorAll("setting-control");
is(controls.length, 2, "Both setting-controls were rendered");
let hiddenControl = group.querySelector(
"setting-control[id$='hiddenSearchSetting']"
);
ok(hiddenControl?.hidden, "Setting-control with visible:false is hidden");
// Check visible control's label can be found in search.
await runSearchInput(VISIBLE_LABEL);
let noResultsEl = doc.getElementById("no-results-message");
is_element_hidden(noResultsEl, "Visible control's label is found in search");
// Clear and search for the hidden control's label.
let searchInput = doc.getElementById("searchInput");
searchInput.focus();
let cleared = BrowserTestUtils.waitForEvent(
win,
"PreferencesSearchCompleted",
evt => evt.detail == ""
);
let count = VISIBLE_LABEL.length;
while (count--) {
EventUtils.sendKey("BACK_SPACE", win);
}
await cleared;
await runSearchInput(HIDDEN_LABEL);
is_element_visible(
noResultsEl,
"Hidden control's shadow-DOM label should not surface in search results"
);
group.remove();
gBrowser.removeCurrentTab();
});