forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			251 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
	
		
			7.1 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.firefoxRelay.feature", undefined],
 | |
|         ["signon.rememberSignons", true],
 | |
|       ],
 | |
|       expected: "hidden",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "available"],
 | |
|         ["signon.rememberSignons", true],
 | |
|       ],
 | |
|       expected: "checked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "enabled"],
 | |
|         ["signon.rememberSignons", true],
 | |
|       ],
 | |
|       expected: "checked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "disabled"],
 | |
|         ["signon.rememberSignons", true],
 | |
|       ],
 | |
|       expected: "unchecked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", undefined],
 | |
|         ["signon.rememberSignons", false],
 | |
|       ],
 | |
|       expected: "hidden",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "available"],
 | |
|         ["signon.rememberSignons", false],
 | |
|       ],
 | |
|       expected: "checked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "enabled"],
 | |
|         ["signon.rememberSignons", false],
 | |
|       ],
 | |
|       expected: "checked",
 | |
|     },
 | |
|     {
 | |
|       initialPrefs: [
 | |
|         ["signon.firefoxRelay.feature", "disabled"],
 | |
|         ["signon.rememberSignons", false],
 | |
|       ],
 | |
|       expected: "unchecked",
 | |
|     },
 | |
|   ];
 | |
|   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) {
 | |
|         const doc = browser.contentDocument;
 | |
|         const relayGroup = doc.getElementById("relayIntegrationBox");
 | |
|         const checkbox = doc.getElementById("relayIntegration");
 | |
|         const savePasswords = doc.getElementById("savePasswords");
 | |
|         doc.getElementById("passwordSettings").scrollIntoView();
 | |
| 
 | |
|         Assert.equal(
 | |
|           checkbox.disabled,
 | |
|           !savePasswords.checked,
 | |
|           "#relayIntegration checkbox disabled when #passwordAutofillCheckbox is unchecked"
 | |
|         );
 | |
| 
 | |
|         switch (test.expected) {
 | |
|           case "hidden":
 | |
|             is_element_hidden(relayGroup, "#relayIntegrationBox is hidden");
 | |
|             break;
 | |
|           case "checked":
 | |
|             is_element_visible(relayGroup, "#relayIntegrationBox is visible");
 | |
|             Assert.ok(
 | |
|               checkbox.checked,
 | |
|               "#relayIntegration checkbox is checked"
 | |
|             );
 | |
|             break;
 | |
|           case "unchecked":
 | |
|             is_element_visible(relayGroup, "#relayIntegrationBox is visible");
 | |
|             Assert.ok(
 | |
|               !checkbox.checked,
 | |
|               "#relayIntegration checkbox is un-checked"
 | |
|             );
 | |
|             break;
 | |
|           default:
 | |
|             Assert.ok(false, "Unknown expected state: " + test.expected);
 | |
|             break;
 | |
|         }
 | |
|       }
 | |
|     );
 | |
|     await SpecialPowers.popPrefEnv();
 | |
|   }
 | |
| });
 | |
| 
 | |
| add_task(async function toggleRelayIntegration() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["signon.firefoxRelay.feature", "enabled"],
 | |
|       ["signon.rememberSignons", true],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     {
 | |
|       gBrowser,
 | |
|       url: "about:preferences#privacy",
 | |
|     },
 | |
|     async browser => {
 | |
|       await SimpleTest.promiseFocus(browser);
 | |
| 
 | |
|       // the preferences "Search" bar obscures the checkbox if we scrollIntoView and try to click on it
 | |
|       // so use keyboard events instead
 | |
|       const doc = browser.contentDocument;
 | |
|       const relayCheckbox = doc.getElementById("relayIntegration");
 | |
|       relayCheckbox.focus();
 | |
|       Assert.equal(doc.activeElement, relayCheckbox, "checkbox is focused");
 | |
|       Assert.equal(
 | |
|         relayCheckbox.checked,
 | |
|         true,
 | |
|         "#relayIntegration checkbox is not checked"
 | |
|       );
 | |
| 
 | |
|       async function clickOnFeatureCheckbox(
 | |
|         expectedPrefValue,
 | |
|         expectedCheckValue,
 | |
|         message
 | |
|       ) {
 | |
|         const prefChanged = TestUtils.waitForPrefChange(
 | |
|           "signon.firefoxRelay.feature"
 | |
|         );
 | |
|         EventUtils.synthesizeKey(" ");
 | |
|         await prefChanged;
 | |
|         Assert.equal(
 | |
|           Services.prefs.getStringPref("signon.firefoxRelay.feature"),
 | |
|           expectedPrefValue,
 | |
|           message
 | |
|         );
 | |
|         Assert.equal(
 | |
|           relayCheckbox.checked,
 | |
|           expectedCheckValue,
 | |
|           `#relayIntegration checkbox is ${
 | |
|             expectedCheckValue ? "checked" : "unchecked"
 | |
|           }`
 | |
|         );
 | |
|       }
 | |
| 
 | |
|       await clickOnFeatureCheckbox(
 | |
|         "disabled",
 | |
|         false,
 | |
|         'Turn integration off from "enabled" feature state'
 | |
|       );
 | |
|       await clickOnFeatureCheckbox(
 | |
|         "available",
 | |
|         true,
 | |
|         'Turn integration on from "enabled" feature state'
 | |
|       );
 | |
|       await clickOnFeatureCheckbox(
 | |
|         "disabled",
 | |
|         false,
 | |
|         'Turn integration off from "enabled" feature state'
 | |
|       );
 | |
|     }
 | |
|   );
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function toggleRememberSignon() {
 | |
|   // toggling rememberSignons checkbox should make generation checkbox disabled
 | |
|   SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["signon.firefoxRelay.feature", "available"],
 | |
|       ["signon.rememberSignons", true],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     {
 | |
|       gBrowser,
 | |
|       url: "about:preferences#privacy",
 | |
|     },
 | |
|     async function (browser) {
 | |
|       const doc = browser.contentDocument;
 | |
|       const checkbox = doc.getElementById("savePasswords");
 | |
|       const relayCheckbox = doc.getElementById("relayIntegration");
 | |
| 
 | |
|       Assert.ok(
 | |
|         !relayCheckbox.disabled,
 | |
|         "generation checkbox is not initially disabled"
 | |
|       );
 | |
| 
 | |
|       await SimpleTest.promiseFocus(browser);
 | |
|       const 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();
 | |
|       Assert.equal(doc.activeElement, checkbox, "checkbox is focused");
 | |
|       EventUtils.synthesizeKey(" ");
 | |
| 
 | |
|       await prefChanged;
 | |
|       Assert.ok(!checkbox.checked, "#savePasswords checkbox is un-checked");
 | |
|       Assert.ok(
 | |
|         relayCheckbox.disabled,
 | |
|         "Relay integration checkbox becomes disabled"
 | |
|       );
 | |
|     }
 | |
|   );
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function testLockedRelayPreference() {
 | |
|   // Locking relay preference should disable checkbox
 | |
|   Services.prefs.lockPref("signon.firefoxRelay.feature");
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     {
 | |
|       gBrowser,
 | |
|       url: "about:preferences#privacy",
 | |
|     },
 | |
|     async function (browser) {
 | |
|       const doc = browser.contentDocument;
 | |
|       const relayCheckbox = doc.getElementById("relayIntegration");
 | |
| 
 | |
|       Assert.ok(relayCheckbox.disabled, "Relay checkbox should be disabled");
 | |
|     }
 | |
|   );
 | |
| 
 | |
|   Services.prefs.unlockPref("signon.firefoxRelay.feature");
 | |
| });
 | 
