fune/browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js
Mark Banner 691543ee89 Bug 1486739 - Add missing dangling commas in browser/, services/, taskcluster/ and toolkit/. r=mossop
Automatic changes by ESLint, except for manual corrections for .xml files.

Differential Revision: https://phabricator.services.mozilla.com/D4439

--HG--
extra : moz-landing-system : lando
2018-08-31 05:59:17 +00:00

326 lines
12 KiB
JavaScript

// This file gets imported into the same scope as head.js.
/* import-globals-from head.js */
async function runTestOnPrivacyPrefPane(testFunc) {
info("runTestOnPrivacyPrefPane entered");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences", true, true);
let browser = tab.linkedBrowser;
info("loaded about:preferences");
browser.contentWindow.gotoPref("panePrivacy");
info("viewing privacy pane, executing testFunc");
testFunc(browser.contentWindow);
BrowserTestUtils.removeTab(tab);
}
function controlChanged(element) {
element.doCommand();
}
// We can only test the panes that don't trigger a preference update
function test_pane_visibility(win) {
let modes = {
"remember": "historyRememberPane",
"custom": "historyCustomPane",
};
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let historypane = win.document.getElementById("historyPane");
ok(historypane, "history mode pane should exist");
for (let mode in modes) {
historymode.value = mode;
controlChanged(historymode);
is(historypane.selectedPanel, win.document.getElementById(modes[mode]),
"The correct pane should be selected for the " + mode + " mode");
is_element_visible(historypane.selectedPanel,
"Correct pane should be visible for the " + mode + " mode");
}
}
function test_dependent_elements(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
ok(pbautostart, "the private browsing auto-start checkbox should exist");
let controls = [
win.document.getElementById("rememberHistory"),
win.document.getElementById("rememberForms"),
win.document.getElementById("keepUntil"),
win.document.getElementById("keepCookiesUntil"),
win.document.getElementById("alwaysClear"),
];
controls.forEach(function(control) {
ok(control, "the dependent controls should exist");
});
let independents = [
win.document.getElementById("blockCookies"),
];
independents.forEach(function(control) {
ok(control, "the independent controls should exist");
});
let cookieexceptions = win.document.getElementById("cookieExceptions");
ok(cookieexceptions, "the cookie exceptions button should exist");
let keepuntil = win.document.getElementById("keepCookiesUntil");
ok(keepuntil, "the keep cookies until menulist should exist");
let alwaysclear = win.document.getElementById("alwaysClear");
ok(alwaysclear, "the clear data on close checkbox should exist");
let rememberhistory = win.document.getElementById("rememberHistory");
ok(rememberhistory, "the remember history checkbox should exist");
let rememberforms = win.document.getElementById("rememberForms");
ok(rememberforms, "the remember forms checkbox should exist");
let alwaysclearsettings = win.document.getElementById("clearDataSettings");
ok(alwaysclearsettings, "the clear data settings button should exist");
function expect_disabled(disabled) {
controls.forEach(function(control) {
is(control.disabled, disabled,
control.getAttribute("id") + " should " + (disabled ? "" : "not ") + "be disabled");
});
is(keepuntil.value, disabled ? 2 : 0,
"the keep cookies until menulist value should be as expected");
if (disabled) {
ok(!alwaysclear.checked,
"the clear data on close checkbox value should be as expected");
ok(!rememberhistory.checked,
"the remember history checkbox value should be as expected");
ok(!rememberforms.checked,
"the remember forms checkbox value should be as expected");
}
}
function check_independents(expected) {
independents.forEach(function(control) {
is(control.disabled, expected,
control.getAttribute("id") + " should " + (expected ? "" : "not ") + "be disabled");
});
ok(!cookieexceptions.disabled,
"the cookie exceptions button should never be disabled");
ok(alwaysclearsettings.disabled,
"the clear data settings button should always be disabled");
}
// controls should only change in custom mode
historymode.value = "remember";
controlChanged(historymode);
expect_disabled(false);
check_independents(false);
// setting the mode to custom shouldn't change anything
historymode.value = "custom";
controlChanged(historymode);
expect_disabled(false);
check_independents(false);
}
function test_dependent_cookie_elements(win) {
let keepUntil = win.document.getElementById("keepUntil");
let keepCookiesUntil = win.document.getElementById("keepCookiesUntil");
let blockCookiesLabel = win.document.getElementById("blockCookiesLabel");
let blockCookiesMenu = win.document.getElementById("blockCookiesMenu");
let controls = [blockCookiesLabel, blockCookiesMenu, keepUntil, keepCookiesUntil];
controls.forEach(function(control) {
ok(control, "the dependent cookie controls should exist");
});
let blockcookies = win.document.getElementById("blockCookies");
ok(blockcookies, "the block cookies checkbox should exist");
function expect_disabled(disabled, c = controls) {
c.forEach(function(control) {
is(control.disabled, disabled,
control.getAttribute("id") + " should " + (disabled ? "" : "not ") + "be disabled");
});
}
blockcookies.value = "disallow";
controlChanged(blockcookies);
expect_disabled(false);
blockcookies.value = "allow";
controlChanged(blockcookies);
expect_disabled(true, [blockCookiesLabel, blockCookiesMenu]);
expect_disabled(false, [keepUntil, keepCookiesUntil]);
blockCookiesMenu.value = "always";
controlChanged(blockCookiesMenu);
expect_disabled(true, [keepUntil, keepCookiesUntil]);
expect_disabled(false, [blockCookiesLabel, blockCookiesMenu]);
if (win.contentBlockingCookiesAndSiteDataRejectTrackersEnabled) {
blockCookiesMenu.value = "trackers";
} else {
blockCookiesMenu.value = "unvisited";
}
controlChanged(blockCookiesMenu);
expect_disabled(false);
let historymode = win.document.getElementById("historyMode");
// The History mode setting for "never remember history" should still
// disable the "keep cookies until..." menu.
historymode.value = "dontremember";
controlChanged(historymode);
expect_disabled(true, [keepUntil, keepCookiesUntil]);
expect_disabled(false, [blockCookiesLabel, blockCookiesMenu]);
historymode.value = "remember";
controlChanged(historymode);
expect_disabled(false);
}
function test_dependent_clearonclose_elements(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
ok(pbautostart, "the private browsing auto-start checkbox should exist");
let alwaysclear = win.document.getElementById("alwaysClear");
ok(alwaysclear, "the clear data on close checkbox should exist");
let alwaysclearsettings = win.document.getElementById("clearDataSettings");
ok(alwaysclearsettings, "the clear data settings button should exist");
function expect_disabled(disabled) {
is(alwaysclearsettings.disabled, disabled,
"the clear data settings should " + (disabled ? "" : "not ") + "be disabled");
}
historymode.value = "custom";
controlChanged(historymode);
pbautostart.checked = false;
controlChanged(pbautostart);
alwaysclear.checked = false;
controlChanged(alwaysclear);
expect_disabled(true);
alwaysclear.checked = true;
controlChanged(alwaysclear);
expect_disabled(false);
alwaysclear.checked = false;
controlChanged(alwaysclear);
expect_disabled(true);
}
function test_dependent_prefs(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let controls = [
win.document.getElementById("rememberHistory"),
win.document.getElementById("rememberForms"),
];
controls.forEach(function(control) {
ok(control, "the micro-management controls should exist");
});
function expect_checked(checked) {
controls.forEach(function(control) {
is(control.checked, checked,
control.getAttribute("id") + " should " + (checked ? "" : "not ") + "be checked");
});
}
// controls should be checked in remember mode
historymode.value = "remember";
controlChanged(historymode);
expect_checked(true);
// even if they're unchecked in custom mode
historymode.value = "custom";
controlChanged(historymode);
controls.forEach(function(control) {
control.checked = false;
controlChanged(control);
});
expect_checked(false);
historymode.value = "remember";
controlChanged(historymode);
expect_checked(true);
}
function test_historymode_retention(mode, expect) {
return function test_historymode_retention_fn(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
if ((historymode.value == "remember" && mode == "dontremember") ||
(historymode.value == "dontremember" && mode == "remember") ||
(historymode.value == "custom" && mode == "dontremember")) {
return;
}
if (expect !== undefined) {
is(historymode.value, expect,
"history mode is expected to remain " + expect);
}
historymode.value = mode;
controlChanged(historymode);
};
}
function test_custom_retention(controlToChange, expect, valueIncrement) {
return function test_custom_retention_fn(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
if (expect !== undefined) {
is(historymode.value, expect,
"history mode is expected to remain " + expect);
}
historymode.value = "custom";
controlChanged(historymode);
controlToChange = win.document.getElementById(controlToChange);
ok(controlToChange, "the control to change should exist");
switch (controlToChange.localName) {
case "checkbox":
controlToChange.checked = !controlToChange.checked;
break;
case "textbox":
controlToChange.value = parseInt(controlToChange.value) + valueIncrement;
break;
case "menulist":
controlToChange.value = valueIncrement;
break;
}
controlChanged(controlToChange);
};
}
function test_locbar_suggestion_retention(suggestion, autocomplete) {
return function(win) {
let elem = win.document.getElementById(suggestion + "Suggestion");
ok(elem, "Suggest " + suggestion + " checkbox should exist.");
elem.click();
is(Services.prefs.getBoolPref("browser.urlbar.autocomplete.enabled"), autocomplete,
"browser.urlbar.autocomplete.enabled pref should be " + autocomplete);
};
}
const gPrefCache = new Map();
function cache_preferences(win) {
let prefs = win.Preferences.getAll();
for (let pref of prefs)
gPrefCache.set(pref.name, pref.value);
}
function reset_preferences(win) {
let prefs = win.Preferences.getAll();
for (let pref of prefs)
// Avoid assigning undefined, which means clearing a "user"/test pref value
if (gPrefCache.has(pref.name))
pref.value = gPrefCache.get(pref.name);
}
function run_test_subset(subset) {
info("subset: " + Array.from(subset, x => x.name).join(",") + "\n");
SpecialPowers.pushPrefEnv({"set": [["browser.preferences.instantApply", true]]});
let tests = [cache_preferences, ...subset, reset_preferences];
for (let test of tests) {
add_task(runTestOnPrivacyPrefPane.bind(undefined, test));
}
}