summaryrefslogtreecommitdiffstats
path: root/browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js')
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js165
1 files changed, 165 insertions, 0 deletions
diff --git a/browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js b/browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js
new file mode 100644
index 0000000000..ca054e449a
--- /dev/null
+++ b/browser/components/aboutlogins/tests/browser/browser_osAuthDialog.js
@@ -0,0 +1,165 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function test() {
+ info(
+ `updatechannel: ${UpdateUtils.getUpdateChannel(false)}; platform: ${
+ AppConstants.platform
+ }`
+ );
+ if (!OSKeyStoreTestUtils.canTestOSKeyStoreLogin()) {
+ Assert.ok(
+ true,
+ `skipping test since oskeystore cannot be automated in this environment`
+ );
+ return;
+ }
+
+ TEST_LOGIN1 = await addLogin(TEST_LOGIN1);
+
+ await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:logins",
+ });
+
+ registerCleanupFunction(function () {
+ Services.logins.removeAllUserFacingLogins();
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ });
+
+ // Show OS auth dialog when Reveal Password checkbox is checked if not on a new login
+ let osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ revealCheckbox.click();
+ });
+ await osAuthDialogShown;
+ info("OS auth dialog shown and canceled");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ Assert.ok(
+ !revealCheckbox.checked,
+ "reveal checkbox should be unchecked if OS auth dialog canceled"
+ );
+ });
+ osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ revealCheckbox.click();
+ });
+ await osAuthDialogShown;
+ info("OS auth dialog shown and authenticated");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ Assert.ok(
+ revealCheckbox.checked,
+ "reveal checkbox should be checked if OS auth dialog authenticated"
+ );
+ });
+
+ info("'Edit' shouldn't show the prompt since the user has authenticated now");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ Assert.ok(
+ !loginItem.dataset.editing,
+ "Not in edit mode before clicking 'Edit'"
+ );
+ let editButton = loginItem.shadowRoot.querySelector(".edit-button");
+ editButton.click();
+
+ await ContentTaskUtils.waitForCondition(
+ () => loginItem.dataset.editing,
+ "waiting for 'edit' mode"
+ );
+ Assert.ok(loginItem.dataset.editing, "In edit mode");
+ });
+
+ info("Test that the OS auth prompt is shown after about:logins is reopened");
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:logins",
+ });
+
+ // Show OS auth dialog since the page has been reloaded.
+ osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ revealCheckbox.click();
+ });
+ await osAuthDialogShown;
+ info("OS auth dialog shown and canceled");
+
+ // Show OS auth dialog since the previous attempt was canceled
+ osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ revealCheckbox.click();
+ info("clicking on reveal checkbox to hide the password");
+ revealCheckbox.click();
+ });
+ await osAuthDialogShown;
+ info("OS auth dialog shown and passed");
+
+ // Show OS auth dialog since the timeout will have expired
+ osAuthDialogShown = forceAuthTimeoutAndWaitForOSKeyStoreLogin({
+ loginResult: true,
+ });
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ info("clicking on reveal checkbox to reveal password");
+ revealCheckbox.click();
+ });
+ info("waiting for os auth dialog");
+ await osAuthDialogShown;
+ info("OS auth dialog shown and passed after timeout expiration");
+
+ // Disable the OS auth feature and confirm the prompt doesn't appear
+ await SpecialPowers.pushPrefEnv({
+ set: [["signon.management.page.os-auth.enabled", false]],
+ });
+ info("Reload about:logins to reset the timeout");
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:logins",
+ });
+
+ info("'Edit' shouldn't show the prompt since the feature has been disabled");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
+ let loginItem = content.document.querySelector("login-item");
+ Assert.ok(
+ !loginItem.dataset.editing,
+ "Not in edit mode before clicking 'Edit'"
+ );
+ let editButton = loginItem.shadowRoot.querySelector(".edit-button");
+ editButton.click();
+
+ await ContentTaskUtils.waitForCondition(
+ () => loginItem.dataset.editing,
+ "waiting for 'edit' mode"
+ );
+ Assert.ok(loginItem.dataset.editing, "In edit mode");
+ });
+});