summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js')
-rw-r--r--browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js330
1 files changed, 330 insertions, 0 deletions
diff --git a/browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js b/browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js
new file mode 100644
index 000000000..53c6d7d8a
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js
@@ -0,0 +1,330 @@
+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));
+ }
+}