summaryrefslogtreecommitdiffstats
path: root/browser/components/aboutlogins/tests/browser/browser_openSite.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/aboutlogins/tests/browser/browser_openSite.js')
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_openSite.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/browser/components/aboutlogins/tests/browser/browser_openSite.js b/browser/components/aboutlogins/tests/browser/browser_openSite.js
new file mode 100644
index 0000000000..f33d57a8e4
--- /dev/null
+++ b/browser/components/aboutlogins/tests/browser/browser_openSite.js
@@ -0,0 +1,94 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_setup(async function () {
+ TEST_LOGIN1 = await addLogin(TEST_LOGIN1);
+ await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:logins",
+ });
+ registerCleanupFunction(() => {
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ Services.logins.removeAllUserFacingLogins();
+ });
+});
+
+add_task(async function test_launch_login_item() {
+ let promiseNewTab = BrowserTestUtils.waitForNewTab(
+ gBrowser,
+ TEST_LOGIN1.origin + "/"
+ );
+
+ let browser = gBrowser.selectedBrowser;
+
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
+ let originInput = loginItem.shadowRoot.querySelector("a[name='origin']");
+ let EventUtils = ContentTaskUtils.getEventUtils(content);
+ // Use synthesizeMouseAtCenter to generate an event that more closely resembles the
+ // properties of the event object that will be seen when the user clicks the element
+ // (.click() sets originalTarget while synthesizeMouse has originalTarget as a Restricted object).
+ await EventUtils.synthesizeMouseAtCenter(originInput, {}, content);
+ });
+
+ info("waiting for new tab to get opened");
+ let newTab = await promiseNewTab;
+ Assert.ok(true, "New tab opened to " + TEST_LOGIN1.origin);
+ BrowserTestUtils.removeTab(newTab);
+
+ if (!OSKeyStoreTestUtils.canTestOSKeyStoreLogin()) {
+ return;
+ }
+
+ promiseNewTab = BrowserTestUtils.waitForNewTab(
+ gBrowser,
+ TEST_LOGIN1.origin + "/"
+ );
+ let reauthObserved = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
+ loginItem._editButton.click();
+ });
+ await reauthObserved;
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
+ loginItem._usernameInput.value += "-changed";
+
+ Assert.ok(
+ content.document.querySelector("confirmation-dialog").hidden,
+ "discard-changes confirmation-dialog should be hidden before opening the site"
+ );
+
+ let originInput = loginItem.shadowRoot.querySelector("a[name='origin']");
+ let EventUtils = ContentTaskUtils.getEventUtils(content);
+ // Use synthesizeMouseAtCenter to generate an event that more closely resembles the
+ // properties of the event object that will be seen when the user clicks the element
+ // (.click() sets originalTarget while synthesizeMouse has originalTarget as a Restricted object).
+ await EventUtils.synthesizeMouseAtCenter(originInput, {}, content);
+ });
+
+ info("waiting for new tab to get opened");
+ newTab = await promiseNewTab;
+ Assert.ok(true, "New tab opened to " + TEST_LOGIN1.origin);
+
+ let modifiedLogin = TEST_LOGIN1.clone();
+ modifiedLogin.timeLastUsed = 9000;
+ let storageChangedPromised = TestUtils.topicObserved(
+ "passwordmgr-storage-changed",
+ (_, data) => data == "modifyLogin"
+ );
+ Services.logins.modifyLogin(TEST_LOGIN1, modifiedLogin);
+ await storageChangedPromised;
+
+ BrowserTestUtils.removeTab(newTab);
+
+ await SpecialPowers.spawn(browser, [], async () => {
+ await ContentTaskUtils.waitForCondition(() => {
+ return !content.document.querySelector("confirmation-dialog").hidden;
+ }, "waiting for confirmation-dialog to appear");
+ Assert.ok(
+ !content.document.querySelector("confirmation-dialog").hidden,
+ "discard-changes confirmation-dialog should be visible after logging in to a site with a modified login present in the form"
+ );
+ });
+});