diff --git a/browser/base/content/test/browser-pageinfo/browser_pageinfo_security.js b/browser/base/content/test/browser-pageinfo/browser_pageinfo_security.js index 114cf88..42ff22a 100644 --- a/browser/base/content/test/browser-pageinfo/browser_pageinfo_security.js +++ b/browser/base/content/test/browser-pageinfo/browser_pageinfo_security.js @@ -497,6 +497,45 @@ add_task(async function test_SavedPasswords() { } }); +// Test that "View Saved Passwords" opens about:logins in a focused browser window. +add_task(async function test_ViewSavedPasswords_focusesBrowserWindow() { + await BrowserTestUtils.withNewTab(TEST_ORIGIN, async function () { + let pageInfo = BrowserCommands.pageInfo(TEST_ORIGIN, "securityTab"); + await BrowserTestUtils.waitForEvent(pageInfo, "load"); + await SimpleTest.promiseFocus(pageInfo); + let pageInfoDoc = pageInfo.document; + let viewPasswordsButton = pageInfoDoc.getElementById( + "security-view-password" + ); + await TestUtils.waitForCondition( + () => BrowserTestUtils.isVisible(viewPasswordsButton), + "View Saved Passwords button should be visible." + ); + is( + Services.focus.activeWindow, + pageInfo, + "Page Info window is focused before clicking the button" + ); + + let tabPromise = BrowserTestUtils.waitForNewTab( + gBrowser, + "about:logins?filter=example.com&entryPoint=Pageinfo" + ); + viewPasswordsButton.click(); + let tab = await tabPromise; + + is(gBrowser.selectedTab, tab, "about:logins tab is selected"); + await TestUtils.waitForCondition( + () => Services.focus.activeWindow == window, + "Browser window containing about:logins should be focused" + ); + ok(!pageInfo.closed, "Page Info window stays open"); + + BrowserTestUtils.removeTab(tab); + pageInfo.close(); + }); +}); + // Clean up in case we missed anything... add_task(async function cleanup() { await SiteDataTestUtils.clear(); diff --git a/toolkit/components/passwordmgr/LoginHelper.sys.mjs b/toolkit/components/passwordmgr/LoginHelper.sys.mjs index 17d2cd0..d3dd555 100644 --- a/toolkit/components/passwordmgr/LoginHelper.sys.mjs +++ b/toolkit/components/passwordmgr/LoginHelper.sys.mjs @@ -1231,7 +1231,8 @@ export const LoginHelper = { }, /** - * Open the password manager window. + * Open the password manager in a new tab and bring the browser window + * containing it to the foreground. * * @param {Window} window * the window from where we want to open the dialog @@ -1272,6 +1273,10 @@ export const LoginHelper = { }); tab.setAttribute("preselect-login", preselectedLogin); + + // The caller may live in a different window (e.g. Page Info), so bring + // the browser window showing about:logins to the foreground. + browser.documentGlobal.focus(); }, /**