Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '18.04' && asan OR os == 'linux' && os_version == '18.04' && tsan OR win11_2009 && asan
- Manifest: browser/components/preferences/tests/browser.toml
const PREFS = [
"browser.safebrowsing.phishing.enabled",
"browser.safebrowsing.malware.enabled",
"browser.safebrowsing.downloads.enabled",
"browser.safebrowsing.downloads.remote.block_potentially_unwanted",
"browser.safebrowsing.downloads.remote.block_uncommon",
];
let originals = PREFS.map(pref => [pref, Services.prefs.getBoolPref(pref)]);
let originalMalwareTable = Services.prefs.getCharPref(
"urlclassifier.malwareTable"
);
registerCleanupFunction(function () {
originals.forEach(([pref, val]) => Services.prefs.setBoolPref(pref, val));
Services.prefs.setCharPref(
"urlclassifier.malwareTable",
originalMalwareTable
);
});
// This test only opens the Preferences once, and then reloads the page
// each time that it wants to test various preference combinations. We
// only use one tab (instead of opening/closing for each test) for all
// to help improve test times on debug builds.
add_setup(async function () {
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
registerCleanupFunction(async function () {
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
});
// test the download protection preference
add_task(async function () {
async function checkPrefSwitch(val) {
Services.prefs.setBoolPref("browser.safebrowsing.downloads.enabled", val);
gBrowser.reload();
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
let doc = gBrowser.selectedBrowser.contentDocument;
let checkbox = doc.getElementById("blockDownloads");
let blockUncommon = doc.getElementById("blockUncommonUnwanted");
let checked = checkbox.checked;
is(checked, val, "downloads preference is initialized correctly");
// should be disabled when val is false (= pref is turned off)
is(
blockUncommon.hasAttribute("disabled"),
!val,
"block uncommon checkbox is set correctly"
);
// scroll the checkbox into view, otherwise the synthesizeMouseAtCenter will be ignored, and click it
checkbox.scrollIntoView();
EventUtils.synthesizeMouseAtCenter(
checkbox,
{},
gBrowser.selectedBrowser.contentWindow
);
// check that setting is now turned on or off
is(
Services.prefs.getBoolPref("browser.safebrowsing.downloads.enabled"),
!checked,
"safebrowsing.downloads preference is set correctly"
);
// check if the uncommon warning checkbox has updated
is(
blockUncommon.hasAttribute("disabled"),
val,
"block uncommon checkbox is set correctly"
);
}
await checkPrefSwitch(true);
await checkPrefSwitch(false);
});
requestLongerTimeout(2);
// test the unwanted/uncommon software warning preference
add_task(async function () {
async function checkPrefSwitch(val1, val2, isV2) {
Services.prefs.setBoolPref(
"browser.safebrowsing.downloads.remote.block_potentially_unwanted",
val1
);
Services.prefs.setBoolPref(
"browser.safebrowsing.downloads.remote.block_uncommon",
val2
);
let testMalwareTable = "goog-malware-" + (isV2 ? "shavar" : "proto");
testMalwareTable += ",test-malware-simple";
if (val1 && val2) {
testMalwareTable += ",goog-unwanted-" + (isV2 ? "shavar" : "proto");
testMalwareTable += ",moztest-unwanted-simple";
}
Services.prefs.setCharPref("urlclassifier.malwareTable", testMalwareTable);
gBrowser.reload();
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
let doc = gBrowser.selectedBrowser.contentDocument;
let checkbox = doc.getElementById("blockUncommonUnwanted");
let checked = checkbox.checked;
is(
checked,
val1 && val2,
"unwanted/uncommon preference is initialized correctly"
);
// scroll the checkbox into view, otherwise the synthesizeMouseAtCenter will be ignored, and click it
checkbox.scrollIntoView();
EventUtils.synthesizeMouseAtCenter(
checkbox,
{},
gBrowser.selectedBrowser.contentWindow
);
// check that both settings are now turned on or off
is(
Services.prefs.getBoolPref(
"browser.safebrowsing.downloads.remote.block_potentially_unwanted"
),
!checked,
"block_potentially_unwanted is set correctly"
);
is(
Services.prefs.getBoolPref(
"browser.safebrowsing.downloads.remote.block_uncommon"
),
!checked,
"block_uncommon is set correctly"
);
// when the preference is on, the malware table should include these ids
let malwareTable = Services.prefs
.getCharPref("urlclassifier.malwareTable")
.split(",");
if (isV2) {
is(
malwareTable.includes("goog-unwanted-shavar"),
!checked,
"malware table doesn't include goog-unwanted-shavar"
);
} else {
is(
malwareTable.includes("goog-unwanted-proto"),
!checked,
"malware table doesn't include goog-unwanted-proto"
);
}
is(
malwareTable.includes("moztest-unwanted-simple"),
!checked,
"malware table doesn't include moztest-unwanted-simple"
);
let sortedMalware = malwareTable.slice(0);
sortedMalware.sort();
Assert.deepEqual(
malwareTable,
sortedMalware,
"malware table has been sorted"
);
}
await checkPrefSwitch(true, true, false);
await checkPrefSwitch(false, true, false);
await checkPrefSwitch(true, false, false);
await checkPrefSwitch(false, false, false);
await checkPrefSwitch(true, true, true);
await checkPrefSwitch(false, true, true);
await checkPrefSwitch(true, false, true);
await checkPrefSwitch(false, false, true);
});