mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 08:13:42 +00:00
[PM-3914] Refactor Browser Extension Popout Windows (#6296)
* [PM-3914] Refactor Browser Extension Popouts * [PM-3914] Refactor Browser Extension Popouts * [PM-3914] Refactor Browser Extension Popouts * [PM-3914] Adding enums for the browser popout type * [PM-3914] Making the methods for getting a window in a targeted manner public * [PM-3914] Refactoing implementation * [PM-3914] Updating deprecated api call * [PM-3914] Fixing issues found when testing behavior * [PM-3914] Reimplementing behavior based on feedback from platform team * [PM-3914] Adding method of ensuring previously opened single action window is force closed for vault item password reprompts * [PM-3914] Taking into consideration feedback regarding the browser popup utils service and implementating requested changes * [PM-3914] Removing unnecesssary class dependencies * [PM-3914] Adding method for uniquely setting up password reprompt windows * [PM-3914] Modifying method * [PM-3914] Adding jest tests and documentation for AuthPopoutWindow util * [PM-3914] Adding jest tests and documentation for VaultPopoutWindow * [PM-3914] Adding jest tests for the debouncing method within autofill service * [PM-3914] Adding jest tests for the new BrowserApi methods * [PM-3914] Adding jest tests to the BrowserPopupUtils class * [PM-3914] Updating inPrivateMode reference * [PM-3914] Updating inPrivateMode reference * [PM-3914] Modifying comment * [PM-3914] Moviing implementation for openCurrentPagePopout to the BrowserPopupUtils * [PM-3914] Applying feedback * [PM-3914] Applying feedback * [PM-3914] Applying feedback * [PM-3983] Refactoring implementation of `setContentScrollY` to facilitate having a potential delay * [PM-3914] Applying feedback regarding setContentScrollY to the implementation * [PM-3914] Modifying early return within the run method of the ContextMenuClickedHandler * [PM-3914] Adding test for VaultPopoutWindow * [PM-3914] Applying work done within PM-4366 to facilitate opening the popout window as a popup rather than a normal window * [PM-3914] Updating the BrowserApi.removeTab method to leverage a callback structure for the promise rather than an async away structure * [PM-3036] Adding jest tests for added passkeys popout windows * [PM-3914] Adjsuting logic for turning off the warning when FIDO2 credentials are saved * [PM-3914] Fixing height to design * [PM-3914] Fixing call to Fido2 Popout * [PM-3914] Fixing add/edit from fido2 popout * [PM-3914] Fixing add/edit from fido2 popout * [PM-3914] Fixing jest tests for updated elements * [PM-3914] Reverting how context menu actions are passed to the view component * [PM-3914] Reverting re-instantiation of config service within main.background.ts * [PM-3914] Adding jest test for BrowserAPI removeTab method * [PM-3914] Adding method to handle parsing the popout url path * [PM-3914] Removing JSDOC comment elements * [PM-3914] Removing await from method call * [PM-3914] Simplifying implementation on add/edit * [PM-3032] Adding more direct reference to view item action in context menus * [PM-3914] Adjusting routing on Fido2 component to pass the singleActionPopout param to the route when opening the add-edit component * [PM-3914] Adding singleActionPopout param to the fido2 component routing * [PM-3914] Updating implementation details for how we build the extension url path * [PM-3914] Reworking implementation for isSingleActionPopoutOpen to clean up iterative logic * [PM-3914] Merging work from master and fixing merge conflicts * [PM-3914] Fixing merge conflict introduced from master * [PM-3914] Reworking closure of single action popouts to ensure they close the window instead of attempting to close the tab * [PM-3914] Fixing issue within Opera where lock and login routes can persist if user opens the extension popout in a new window before locking or logging out * [PM-3914] Setting the extensionUrls that are cheked as a variable outside of the scope fo the openUlockPopout method to ensure it does not have to be rebuilt each time the method is called
This commit is contained in:
@@ -8,9 +8,13 @@ import { SystemService } from "@bitwarden/common/platform/abstractions/system.se
|
||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
|
||||
|
||||
import {
|
||||
closeUnlockPopout,
|
||||
openSsoAuthResultPopout,
|
||||
openTwoFactorAuthPopout,
|
||||
} from "../auth/popup/utils/auth-popout-window";
|
||||
import { AutofillService } from "../autofill/services/abstractions/autofill.service";
|
||||
import { BrowserApi } from "../platform/browser/browser-api";
|
||||
import { BrowserPopoutWindowService } from "../platform/popup/abstractions/browser-popout-window.service";
|
||||
import { BrowserStateService } from "../platform/services/abstractions/browser-state.service";
|
||||
import { BrowserEnvironmentService } from "../platform/services/browser-environment.service";
|
||||
import BrowserPlatformUtilsService from "../platform/services/browser-platform-utils.service";
|
||||
@@ -37,8 +41,7 @@ export default class RuntimeBackground {
|
||||
private environmentService: BrowserEnvironmentService,
|
||||
private messagingService: MessagingService,
|
||||
private logService: LogService,
|
||||
private configService: ConfigServiceAbstraction,
|
||||
private browserPopoutWindowService: BrowserPopoutWindowService
|
||||
private configService: ConfigServiceAbstraction
|
||||
) {
|
||||
// onInstalled listener must be wired up before anything else, so we do it in the ctor
|
||||
chrome.runtime.onInstalled.addListener((details: any) => {
|
||||
@@ -82,8 +85,6 @@ export default class RuntimeBackground {
|
||||
}
|
||||
|
||||
async processMessage(msg: any, sender: chrome.runtime.MessageSender) {
|
||||
const cipherId = msg.data?.cipherId;
|
||||
|
||||
switch (msg.command) {
|
||||
case "loggedIn":
|
||||
case "unlocked": {
|
||||
@@ -91,7 +92,7 @@ export default class RuntimeBackground {
|
||||
|
||||
if (this.lockedVaultPendingNotifications?.length > 0) {
|
||||
item = this.lockedVaultPendingNotifications.pop();
|
||||
await this.browserPopoutWindowService.closeUnlockPrompt();
|
||||
await closeUnlockPopout();
|
||||
}
|
||||
|
||||
await this.main.refreshBadge();
|
||||
@@ -129,49 +130,6 @@ export default class RuntimeBackground {
|
||||
case "openPopup":
|
||||
await this.main.openPopup();
|
||||
break;
|
||||
case "promptForLogin":
|
||||
case "bgReopenPromptForLogin":
|
||||
await this.browserPopoutWindowService.openUnlockPrompt(sender.tab?.windowId);
|
||||
break;
|
||||
case "passwordReprompt":
|
||||
if (cipherId) {
|
||||
await this.browserPopoutWindowService.openPasswordRepromptPrompt(sender.tab?.windowId, {
|
||||
cipherId: cipherId,
|
||||
senderTabId: sender.tab.id,
|
||||
action: msg.data?.action,
|
||||
});
|
||||
}
|
||||
break;
|
||||
case "openAddEditCipher": {
|
||||
const isNewCipher = !cipherId;
|
||||
const cipherType = msg.data?.cipherType;
|
||||
const senderTab = sender.tab;
|
||||
|
||||
if (!senderTab) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (isNewCipher) {
|
||||
await this.browserPopoutWindowService.openCipherCreation(senderTab.windowId, {
|
||||
cipherType,
|
||||
senderTabId: senderTab.id,
|
||||
senderTabURI: senderTab.url,
|
||||
});
|
||||
} else {
|
||||
await this.browserPopoutWindowService.openCipherEdit(senderTab.windowId, {
|
||||
cipherId,
|
||||
senderTabId: senderTab.id,
|
||||
senderTabURI: senderTab.url,
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case "closeTab":
|
||||
setTimeout(() => {
|
||||
BrowserApi.closeBitwardenExtensionTab();
|
||||
}, msg.delay ?? 0);
|
||||
break;
|
||||
case "triggerAutofillScriptInjection":
|
||||
await this.autofillService.injectAutofillScripts(
|
||||
sender,
|
||||
@@ -266,12 +224,7 @@ export default class RuntimeBackground {
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
BrowserApi.createNewTab(
|
||||
"popup/index.html?uilocation=popout#/sso?code=" +
|
||||
encodeURIComponent(msg.code) +
|
||||
"&state=" +
|
||||
encodeURIComponent(msg.state)
|
||||
);
|
||||
await openSsoAuthResultPopout(msg);
|
||||
} catch {
|
||||
this.logService.error("Unable to open sso popout tab");
|
||||
}
|
||||
@@ -285,10 +238,7 @@ export default class RuntimeBackground {
|
||||
return;
|
||||
}
|
||||
|
||||
const params =
|
||||
`webAuthnResponse=${encodeURIComponent(msg.data)};` +
|
||||
`remember=${encodeURIComponent(msg.remember)}`;
|
||||
BrowserApi.openBitwardenExtensionTab(`popup/index.html#/2fa;${params}`, false);
|
||||
await openTwoFactorAuthPopout(msg);
|
||||
break;
|
||||
}
|
||||
case "reloadPopup":
|
||||
|
||||
Reference in New Issue
Block a user