forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			199 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| add_task(async function initialState() {
 | |
|   // check pref permutations to verify the UI opens in the correct state
 | |
|   const prefTests = [
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.rememberSignons", true],
 | |
|         ["signon.generation.available", true],
 | |
|         ["signon.generation.enabled", true],
 | |
|         ["signon.autofillForms", true],
 | |
|       ],
 | |
|       expected: "checked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.rememberSignons", true],
 | |
|         ["signon.generation.available", true],
 | |
|         ["signon.generation.enabled", false],
 | |
|         ["signon.autofillForms", false],
 | |
|       ],
 | |
|       expected: "unchecked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.rememberSignons", true],
 | |
|         ["signon.generation.available", false],
 | |
|         ["signon.generation.enabled", false],
 | |
|       ],
 | |
|       expected: "hidden",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.rememberSignons", false],
 | |
|         ["signon.generation.available", true],
 | |
|         ["signon.generation.enabled", true],
 | |
|         ["signon.autofillForms", true],
 | |
|       ],
 | |
|       expected: "disabled",
 | |
|     },
 | |
|   ];
 | |
|   for (let test of prefTests) {
 | |
|     // set initial pref values
 | |
|     info("initialState, testing with: " + JSON.stringify(test));
 | |
|     await SpecialPowers.pushPrefEnv({ set: test.initialPrefs });
 | |
| 
 | |
|     // open about:privacy in a tab
 | |
|     // verify expected conditions
 | |
|     await BrowserTestUtils.withNewTab(
 | |
|       {
 | |
|         gBrowser,
 | |
|         url: "about:preferences#privacy",
 | |
|       },
 | |
|       async function (browser) {
 | |
|         let doc = browser.contentDocument;
 | |
|         let generatePasswordsCheckbox = doc.getElementById("generatePasswords");
 | |
|         let autofillFormsCheckbox = doc.getElementById(
 | |
|           "passwordAutofillCheckbox"
 | |
|         );
 | |
|         doc.getElementById("passwordSettings").scrollIntoView();
 | |
| 
 | |
|         info("initialState, assert on expected state:" + test.expected);
 | |
|         switch (test.expected) {
 | |
|           case "hidden":
 | |
|             is_element_hidden(
 | |
|               generatePasswordsCheckbox,
 | |
|               "#generatePasswords checkbox is hidden"
 | |
|             );
 | |
|             break;
 | |
|           case "checked":
 | |
|             is_element_visible(
 | |
|               generatePasswordsCheckbox,
 | |
|               "#generatePasswords checkbox is visible"
 | |
|             );
 | |
|             ok(
 | |
|               generatePasswordsCheckbox.checked,
 | |
|               "#generatePasswords checkbox is checked"
 | |
|             );
 | |
|             ok(
 | |
|               autofillFormsCheckbox.checked,
 | |
|               "#passwordAutofillCheckbox is checked"
 | |
|             );
 | |
|             break;
 | |
|           case "unchecked":
 | |
|             ok(
 | |
|               !generatePasswordsCheckbox.checked,
 | |
|               "#generatePasswords checkbox is un-checked"
 | |
|             );
 | |
|             ok(
 | |
|               !autofillFormsCheckbox.checked,
 | |
|               "#passwordAutofillCheckbox is un-checked"
 | |
|             );
 | |
|             break;
 | |
|           case "disabled":
 | |
|             ok(
 | |
|               generatePasswordsCheckbox.disabled,
 | |
|               "#generatePasswords checkbox is disabled"
 | |
|             );
 | |
|             ok(
 | |
|               autofillFormsCheckbox.disabled,
 | |
|               "#passwordAutofillCheckbox is disabled"
 | |
|             );
 | |
|             break;
 | |
|           default:
 | |
|             ok(false, "Unknown expected state: " + test.expected);
 | |
|         }
 | |
|       }
 | |
|     );
 | |
|     await SpecialPowers.popPrefEnv();
 | |
|   }
 | |
| });
 | |
| 
 | |
| add_task(async function toggleGenerationEnabled() {
 | |
|   // clicking the checkbox should toggle the pref
 | |
|   SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["signon.generation.available", true],
 | |
|       ["signon.generation.enabled", false],
 | |
|       ["signon.rememberSignons", true],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     {
 | |
|       gBrowser,
 | |
|       url: "about:preferences#privacy",
 | |
|     },
 | |
|     async function (browser) {
 | |
|       let doc = browser.contentDocument;
 | |
|       let checkbox = doc.getElementById("generatePasswords");
 | |
| 
 | |
|       info("waiting for the browser to have focus");
 | |
|       await SimpleTest.promiseFocus(browser);
 | |
|       let prefChanged = TestUtils.waitForPrefChange(
 | |
|         "signon.generation.enabled"
 | |
|       );
 | |
| 
 | |
|       // the preferences "Search" bar obscures the checkbox if we scrollIntoView and try to click on it
 | |
|       // so use keyboard events instead
 | |
|       checkbox.focus();
 | |
|       is(doc.activeElement, checkbox, "checkbox is focused");
 | |
|       EventUtils.synthesizeKey(" ");
 | |
| 
 | |
|       info("waiting for pref to change");
 | |
|       await prefChanged;
 | |
|       ok(checkbox.checked, "#generatePasswords checkbox is checked");
 | |
|       ok(
 | |
|         Services.prefs.getBoolPref("signon.generation.enabled"),
 | |
|         "enabled pref is now true"
 | |
|       );
 | |
|     }
 | |
|   );
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function toggleRememberSignon() {
 | |
|   // toggling rememberSignons checkbox should make generation checkbox disabled
 | |
|   SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["signon.generation.available", true],
 | |
|       ["signon.generation.enabled", true],
 | |
|       ["signon.rememberSignons", true],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     {
 | |
|       gBrowser,
 | |
|       url: "about:preferences#privacy",
 | |
|     },
 | |
|     async function (browser) {
 | |
|       let doc = browser.contentDocument;
 | |
|       let checkbox = doc.getElementById("savePasswords");
 | |
|       let generationCheckbox = doc.getElementById("generatePasswords");
 | |
| 
 | |
|       ok(
 | |
|         !generationCheckbox.disabled,
 | |
|         "generation checkbox is not initially disabled"
 | |
|       );
 | |
| 
 | |
|       info("waiting for the browser to have focus");
 | |
|       await SimpleTest.promiseFocus(browser);
 | |
|       let prefChanged = TestUtils.waitForPrefChange("signon.rememberSignons");
 | |
| 
 | |
|       // the preferences "Search" bar obscures the checkbox if we scrollIntoView and try to click on it
 | |
|       // so use keyboard events instead
 | |
|       checkbox.focus();
 | |
|       is(doc.activeElement, checkbox, "checkbox is focused");
 | |
|       EventUtils.synthesizeKey(" ");
 | |
| 
 | |
|       info("waiting for pref to change");
 | |
|       await prefChanged;
 | |
|       ok(!checkbox.checked, "#savePasswords checkbox is un-checked");
 | |
|       ok(generationCheckbox.disabled, "generation checkbox becomes disabled");
 | |
|     }
 | |
|   );
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | 
