388 lines
12 KiB
JavaScript
388 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");
|
|
await browser.contentWindow.gotoPref("panePrivacy");
|
|
info("viewing privacy pane, executing testFunc");
|
|
await 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("deleteOnClose"),
|
|
win.document.getElementById("alwaysClear"),
|
|
];
|
|
controls.forEach(function (control) {
|
|
ok(control, "the dependent controls should exist");
|
|
});
|
|
let independents = [
|
|
win.document.getElementById("contentBlockingBlockCookiesCheckbox"),
|
|
];
|
|
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 deleteOnCloseCheckbox = win.document.getElementById("deleteOnClose");
|
|
ok(deleteOnCloseCheckbox, "the delete on close checkbox 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"
|
|
);
|
|
});
|
|
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 deleteOnCloseCheckbox = win.document.getElementById("deleteOnClose");
|
|
let deleteOnCloseNote = win.document.getElementById("deleteOnCloseNote");
|
|
let blockCookiesMenu = win.document.getElementById("blockCookiesMenu");
|
|
|
|
let controls = [blockCookiesMenu, deleteOnCloseCheckbox];
|
|
controls.forEach(function (control) {
|
|
ok(control, "the dependent cookie controls should exist");
|
|
});
|
|
let blockCookiesCheckbox = win.document.getElementById(
|
|
"contentBlockingBlockCookiesCheckbox"
|
|
);
|
|
ok(blockCookiesCheckbox, "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"
|
|
);
|
|
});
|
|
}
|
|
|
|
blockCookiesCheckbox.checked = true;
|
|
controlChanged(blockCookiesCheckbox);
|
|
expect_disabled(false);
|
|
|
|
blockCookiesCheckbox.checked = false;
|
|
controlChanged(blockCookiesCheckbox);
|
|
expect_disabled(true, [blockCookiesMenu]);
|
|
expect_disabled(false, [deleteOnCloseCheckbox]);
|
|
is_element_hidden(
|
|
deleteOnCloseNote,
|
|
"The notice for delete on close in permanent private browsing mode should be hidden."
|
|
);
|
|
|
|
blockCookiesMenu.value = "always";
|
|
controlChanged(blockCookiesMenu);
|
|
expect_disabled(true, [deleteOnCloseCheckbox]);
|
|
expect_disabled(false, [blockCookiesMenu]);
|
|
is_element_hidden(
|
|
deleteOnCloseNote,
|
|
"The notice for delete on close in permanent private browsing mode should be hidden."
|
|
);
|
|
|
|
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, [deleteOnCloseCheckbox]);
|
|
is_element_visible(
|
|
deleteOnCloseNote,
|
|
"The notice for delete on close in permanent private browsing mode should be visible."
|
|
);
|
|
expect_disabled(false, [blockCookiesMenu]);
|
|
|
|
historymode.value = "remember";
|
|
controlChanged(historymode);
|
|
expect_disabled(false);
|
|
is_element_hidden(
|
|
deleteOnCloseNote,
|
|
"The notice for delete on close in permanent private browsing mode should be hidden."
|
|
);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
async 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);
|
|
// Initial updates from prefs are not sync, so wait:
|
|
await TestUtils.waitForCondition(
|
|
() => controls[0].getAttribute("checked") == "true"
|
|
);
|
|
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 "menulist":
|
|
controlToChange.value = valueIncrement;
|
|
break;
|
|
}
|
|
controlChanged(controlToChange);
|
|
};
|
|
}
|
|
|
|
const gPrefCache = new Map();
|
|
|
|
function cache_preferences(win) {
|
|
let prefs = win.Preferences.getAll();
|
|
for (let pref of prefs) {
|
|
gPrefCache.set(pref.id, pref.value);
|
|
}
|
|
}
|
|
|
|
function reset_preferences(win) {
|
|
let prefs = win.Preferences.getAll();
|
|
// Avoid assigning undefined, which means clearing a "user"/test pref value
|
|
for (let pref of prefs) {
|
|
if (gPrefCache.has(pref.id)) {
|
|
pref.value = gPrefCache.get(pref.id);
|
|
}
|
|
}
|
|
}
|
|
|
|
function run_test_subset(subset) {
|
|
info("subset: " + Array.from(subset, x => x.name).join(",") + "\n");
|
|
let tests = [cache_preferences, ...subset, reset_preferences];
|
|
for (let test of tests) {
|
|
add_task(runTestOnPrivacyPrefPane.bind(undefined, test));
|
|
}
|
|
}
|