forked from mirrors/gecko-dev
		
	 691543ee89
			
		
	
	
		691543ee89
		
	
	
	
	
		
			
			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
		
			
				
	
	
		
			326 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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));
 | |
|   }
 | |
| }
 |