Skip to content

Commit

Permalink
[PM-15190] hide empty ciphers from autofill (#12491)
Browse files Browse the repository at this point in the history
* hide empty ciphers from autofill

---------

Co-authored-by: Evan Bassler <[email protected]>
  • Loading branch information
evan-livefront and Evan Bassler authored Jan 7, 2025
1 parent d422e85 commit 0bd988d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 1 deletion.
12 changes: 11 additions & 1 deletion apps/browser/src/autofill/background/overlay.background.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1923,7 +1923,17 @@ describe("OverlayBackground", () => {

it("returns true if the overlay login ciphers are populated", async () => {
overlayBackground["inlineMenuCiphers"] = new Map([
["inline-menu-cipher-0", mock<CipherView>({ type: CipherType.Login })],
[
"inline-menu-cipher-0",
mock<CipherView>({
type: CipherType.Login,
login: {
username: "username1",
password: "password1",
uri: "https://example.com",
},
}),
],
]);
await overlayBackground["getInlineMenuCipherData"]();

Expand Down
23 changes: 23 additions & 0 deletions apps/browser/src/autofill/background/overlay.background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import { InlineMenuFormFieldData } from "../services/abstractions/autofill-overl
import { AutofillService, PageDetail } from "../services/abstractions/autofill.service";
import { InlineMenuFieldQualificationService } from "../services/abstractions/inline-menu-field-qualifications.service";
import {
areKeyValuesNull,
generateDomainMatchPatterns,
generateRandomChars,
isInvalidResponseStatusCode,
Expand Down Expand Up @@ -556,6 +557,28 @@ export class OverlayBackground implements OverlayBackgroundInterface {

for (let cipherIndex = 0; cipherIndex < inlineMenuCiphersArray.length; cipherIndex++) {
const [inlineMenuCipherId, cipher] = inlineMenuCiphersArray[cipherIndex];

switch (cipher.type) {
case CipherType.Card:
if (areKeyValuesNull(cipher.card)) {
continue;
}
break;

case CipherType.Identity:
if (areKeyValuesNull(cipher.identity)) {
continue;
}
break;

case CipherType.Login:
if (
areKeyValuesNull(cipher.login, ["username", "password", "totp", "fido2Credentials"])
) {
continue;
}
break;
}
if (!this.focusedFieldMatchesFillType(cipher.type)) {
continue;
}
Expand Down
17 changes: 17 additions & 0 deletions apps/browser/src/autofill/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -544,3 +544,20 @@ export const specialCharacterToKeyMap: Record<string, string> = {
"?": "questionCharacterDescriptor",
"/": "forwardSlashCharacterDescriptor",
};

/**
* Checks if all the values corresponding to the specified keys in an object are null.
* If no keys are specified, checks all keys in the object.
*
* @param obj - The object to check.
* @param keys - An optional array of keys to check in the object. Defaults to all keys.
* @returns Returns true if all values for the specified keys (or all keys if none are provided) are null; otherwise, false.
*/
export function areKeyValuesNull<T extends Record<string, any>>(
obj: T,
keys?: Array<keyof T>,
): boolean {
const keysToCheck = keys && keys.length > 0 ? keys : (Object.keys(obj) as Array<keyof T>);

return keysToCheck.every((key) => obj[key] == null);
}

0 comments on commit 0bd988d

Please sign in to comment.