forked from mirrors/gecko-dev
MozReview-Commit-ID: 9Xwmlk8jp9B --HG-- extra : transplant_source : %AD%9Ck%EF%C7%C78%CD%28%8B%D7%8E%2B%E3%13%7D%A1%08-%9F
330 lines
12 KiB
JavaScript
330 lines
12 KiB
JavaScript
function* runTestOnPrivacyPrefPane(testFunc) {
|
|
info("runTestOnPrivacyPrefPane entered");
|
|
let tab = yield 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);
|
|
yield 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("acceptCookies"),
|
|
win.document.getElementById("acceptThirdPartyLabel"),
|
|
win.document.getElementById("acceptThirdPartyMenu")
|
|
];
|
|
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 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("acceptThirdPartyLabel"),
|
|
win.document.getElementById("acceptThirdPartyMenu"),
|
|
win.document.getElementById("keepUntil"),
|
|
win.document.getElementById("keepCookiesUntil"),
|
|
];
|
|
controls.forEach(function(control) {
|
|
ok(control, "the dependent cookie controls should exist");
|
|
});
|
|
let acceptcookies = win.document.getElementById("acceptCookies");
|
|
ok(acceptcookies, "the accept cookies checkbox should exist");
|
|
|
|
function expect_disabled(disabled) {
|
|
controls.forEach(function(control) {
|
|
is(control.disabled, disabled,
|
|
control.getAttribute("id") + " should " + (disabled ? "" : "not ") + "be disabled");
|
|
});
|
|
}
|
|
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
pbautostart.checked = false;
|
|
controlChanged(pbautostart);
|
|
expect_disabled(false);
|
|
|
|
acceptcookies.checked = false;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(true);
|
|
|
|
acceptcookies.checked = true;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(false);
|
|
|
|
let accessthirdparty = controls.shift();
|
|
acceptcookies.checked = false;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(true);
|
|
ok(accessthirdparty.disabled, "access third party button should be disabled");
|
|
|
|
pbautostart.checked = false;
|
|
controlChanged(pbautostart);
|
|
expect_disabled(true);
|
|
ok(accessthirdparty.disabled, "access third party button should be disabled");
|
|
|
|
acceptcookies.checked = true;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(false);
|
|
ok(!accessthirdparty.disabled, "access third party button should be enabled");
|
|
}
|
|
|
|
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"),
|
|
win.document.getElementById("acceptCookies")
|
|
];
|
|
controls.forEach(function(control) {
|
|
ok(control, "the micro-management controls should exist");
|
|
});
|
|
|
|
let thirdPartyCookieMenu = win.document.getElementById("acceptThirdPartyMenu");
|
|
ok(thirdPartyCookieMenu, "the third-party cookie control should exist");
|
|
|
|
function expect_checked(checked) {
|
|
controls.forEach(function(control) {
|
|
is(control.checked, checked,
|
|
control.getAttribute("id") + " should " + (checked ? "not " : "") + "be checked");
|
|
});
|
|
|
|
is(thirdPartyCookieMenu.value == "always" || thirdPartyCookieMenu.value == "visited", checked, "third-party cookies should " + (checked ? "not " : "") + "be limited");
|
|
}
|
|
|
|
// 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);
|
|
thirdPartyCookieMenu.value = "never";
|
|
controlChanged(thirdPartyCookieMenu);
|
|
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.document.querySelectorAll("#privacyPreferences > preference");
|
|
for (let pref of prefs)
|
|
gPrefCache.set(pref.name, pref.value);
|
|
}
|
|
|
|
function reset_preferences(win) {
|
|
let prefs = win.document.querySelectorAll("#privacyPreferences > preference");
|
|
for (let pref of prefs)
|
|
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));
|
|
}
|
|
}
|