diff --git a/apps/browser/src/background/runtime.background.ts b/apps/browser/src/background/runtime.background.ts index da9e196410b..7a6f293f8d1 100644 --- a/apps/browser/src/background/runtime.background.ts +++ b/apps/browser/src/background/runtime.background.ts @@ -75,6 +75,8 @@ export default class RuntimeBackground { this.systemService.cancelProcessReload(); if (item) { + await BrowserApi.focusWindow(item.commandToRetry.sender.tab.windowId); + await BrowserApi.focusTab(item.commandToRetry.sender.tab.id); await BrowserApi.tabSendMessageData( item.commandToRetry.sender.tab, "unlockCompleted", @@ -103,7 +105,7 @@ export default class RuntimeBackground { await this.main.openPopup(); break; case "promptForLogin": - BrowserApi.openBitwardenExtensionTab("popup/index.html", true, sender.tab); + BrowserApi.openBitwardenExtensionTab("popup/index.html", true); break; case "openAddEditCipher": { const addEditCipherUrl = @@ -111,7 +113,7 @@ export default class RuntimeBackground { ? "popup/index.html#/edit-cipher" : "popup/index.html#/edit-cipher?cipherId=" + msg.data.cipherId; - BrowserApi.openBitwardenExtensionTab(addEditCipherUrl, true, sender.tab); + BrowserApi.openBitwardenExtensionTab(addEditCipherUrl, true); break; } case "closeTab": diff --git a/apps/browser/src/browser/browserApi.ts b/apps/browser/src/browser/browserApi.ts index 22c8f68c524..e93fcceb0df 100644 --- a/apps/browser/src/browser/browserApi.ts +++ b/apps/browser/src/browser/browserApi.ts @@ -129,24 +129,27 @@ export class BrowserApi { return Promise.resolve(chrome.extension.getViews({ type: "popup" }).length > 0); } - static createNewTab(url: string, active = true, openerTab?: chrome.tabs.Tab) { - chrome.tabs.create({ url: url, active: active, openerTabId: openerTab?.id }); + static createNewTab(url: string, active = true): Promise { + return new Promise((resolve) => + chrome.tabs.create({ url: url, active: active }, (tab) => resolve(tab)) + ); } - static openBitwardenExtensionTab( - relativeUrl: string, - active = true, - openerTab?: chrome.tabs.Tab - ) { - if (relativeUrl.includes("uilocation=tab")) { - this.createNewTab(relativeUrl, active, openerTab); - return; + static async focusWindow(windowId: number) { + await chrome.windows.update(windowId, { focused: true }); + } + + static async openBitwardenExtensionTab(relativeUrl: string, active = true) { + let url = relativeUrl; + if (!relativeUrl.includes("uilocation=tab")) { + const fullUrl = chrome.extension.getURL(relativeUrl); + const parsedUrl = new URL(fullUrl); + parsedUrl.searchParams.set("uilocation", "tab"); + url = parsedUrl.toString(); } - const fullUrl = chrome.extension.getURL(relativeUrl); - const parsedUrl = new URL(fullUrl); - parsedUrl.searchParams.set("uilocation", "tab"); - this.createNewTab(parsedUrl.toString(), active, openerTab); + const createdTab = await this.createNewTab(url, active); + this.focusWindow(createdTab.windowId); } static async closeBitwardenExtensionTab() { @@ -163,10 +166,6 @@ export class BrowserApi { const tabToClose = tabs[tabs.length - 1]; chrome.tabs.remove(tabToClose.id); - - if (tabToClose.openerTabId) { - this.focusTab(tabToClose.openerTabId); - } } static messageListener(