Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Errors
- This test failed 2 times in the preceding 30 days. quicksearch this test
- Manifest: browser/components/preferences/tests/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
// Show the ETP status section in the privacy pane.
["browser.settings-redesign.etpStatus.enabled", true],
// Ensure we start from ETP "standard".
["browser.contentblocking.category", "standard"],
],
});
});
/**
* Helper for waiting for and asserting the ETP status item state.
* Can be called both when the item already changed or when we need to wait for the change.
*
* @param {Document} doc - The preferences document.
* @param {*} options - The expected ETP status item state.
* @param {string} options.l10nId - The expected l10nId attribute value.
* @param {string} options.description - The expected description attribute value.
*/
async function waitForAndAssertEtpStatusItemState(doc, { l10nId }) {
let etpStatusItem = doc.getElementById("etpStatusItem");
Assert.ok(
BrowserTestUtils.isVisible(etpStatusItem),
"ETP status box item should be visible"
);
let condition = () => {
return etpStatusItem.getAttribute("data-l10n-id") == l10nId;
};
if (!condition()) {
await BrowserTestUtils.waitForMutationCondition(
etpStatusItem,
{ attributes: true, attributeFilter: ["data-l10n-id", "description"] },
condition
);
}
Assert.equal(etpStatusItem.getAttribute("data-l10n-id"), l10nId);
}
// Test that the ETP status section updates correctly when changing the ETP category.
add_task(async function test_status_categories() {
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let doc = gBrowser.contentDocument;
await waitForAndAssertEtpStatusItemState(doc, {
l10nId: "preferences-etp-level-standard",
});
info("Switch to ETP `strict`");
Services.prefs.setStringPref("browser.contentblocking.category", "strict");
await waitForAndAssertEtpStatusItemState(doc, {
l10nId: "preferences-etp-level-strict",
});
info("Switch to ETP `custom`");
Services.prefs.setStringPref("browser.contentblocking.category", "custom");
await waitForAndAssertEtpStatusItemState(doc, {
l10nId: "preferences-etp-level-custom",
});
info("Switch back to default ETP `standard`");
Services.prefs.clearUserPref("browser.contentblocking.category");
await waitForAndAssertEtpStatusItemState(doc, {
l10nId: "preferences-etp-level-standard",
});
gBrowser.removeCurrentTab();
});
// Test that the protections dashboard link in the ETP status section opens the about:protections page.
add_task(async function test_protections_dashboard_link() {
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let doc = gBrowser.contentDocument;
let protectionsDashboardLink = doc.getElementById("protectionsDashboardLink");
Assert.ok(
BrowserTestUtils.isVisible(protectionsDashboardLink),
"Protections dashboard link is visible."
);
let linkPromise = BrowserTestUtils.waitForNewTab(
gBrowser,
"about:protections"
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#protectionsDashboardLink",
{},
gBrowser.selectedBrowser
);
let tab = await linkPromise;
Assert.equal(
tab.linkedBrowser.currentURI.spec,
"about:protections",
"Protections dashboard link opened the about:protections page."
);
// about:protections tab.
BrowserTestUtils.removeTab(tab);
// Preferences tab.
gBrowser.removeCurrentTab();
});