diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts
index 17e3ec159c3..1cbf915b06a 100644
--- a/apps/browser/src/autofill/background/notification.background.ts
+++ b/apps/browser/src/autofill/background/notification.background.ts
@@ -627,11 +627,11 @@ export default class NotificationBackground {
}
const username: string | null = data.username || null;
- const currentPassword = data.password || null;
- const newPassword = data.newPassword || null;
+ const currentPasswordFieldValue = data.password || null;
+ const newPasswordFieldValue = data.newPassword || null;
- if (authStatus === AuthenticationStatus.Locked && newPassword !== null) {
- await this.pushChangePasswordToQueue(null, loginDomain, newPassword, tab, true);
+ if (authStatus === AuthenticationStatus.Locked && newPasswordFieldValue !== null) {
+ await this.pushChangePasswordToQueue(null, loginDomain, newPasswordFieldValue, tab, true);
return true;
}
@@ -657,35 +657,49 @@ export default class NotificationBackground {
const [cipher] = ciphers;
if (
username !== null &&
- newPassword === null &&
+ newPasswordFieldValue === null &&
cipher.login.username.toLowerCase() === normalizedUsername &&
- cipher.login.password === currentPassword
+ cipher.login.password === currentPasswordFieldValue
) {
// Assumed to be a login
return false;
}
}
- if (currentPassword && !newPassword) {
+ if (
+ ciphers.length > 0 &&
+ currentPasswordFieldValue?.length &&
// Only use current password for change if no new password present.
- if (ciphers.length > 0) {
- await this.pushChangePasswordToQueue(
- ciphers.map((cipher) => cipher.id),
- loginDomain,
- currentPassword,
- tab,
- );
- return true;
+ !newPasswordFieldValue
+ ) {
+ const currentPasswordMatchesAnExistingValue = ciphers.some(
+ (cipher) =>
+ cipher.login?.password?.length && cipher.login.password === currentPasswordFieldValue,
+ );
+
+ // The password entered matched a stored cipher value with
+ // the same username (no change)
+ if (currentPasswordMatchesAnExistingValue) {
+ return false;
}
+
+ await this.pushChangePasswordToQueue(
+ ciphers.map((cipher) => cipher.id),
+ loginDomain,
+ currentPasswordFieldValue,
+ tab,
+ );
+
+ return true;
}
- if (newPassword) {
+ if (newPasswordFieldValue) {
// Otherwise include all known ciphers.
if (ciphers.length > 0) {
await this.pushChangePasswordToQueue(
ciphers.map((cipher) => cipher.id),
loginDomain,
- newPassword,
+ newPasswordFieldValue,
tab,
);
diff --git a/libs/components/src/navigation/side-nav.component.html b/libs/components/src/navigation/side-nav.component.html
index d2e6aeab2bb..0a0d4af3adc 100644
--- a/libs/components/src/navigation/side-nav.component.html
+++ b/libs/components/src/navigation/side-nav.component.html
@@ -23,7 +23,11 @@
(keydown)="handleKeyDown($event)"
>