[PM-4415] Implementing a method for capturing submission of forms through anchor elements

This commit is contained in:
Cesar Gonzalez 2024-10-08 09:03:08 -05:00
parent 8001e8103e
commit b4c0919a28
No known key found for this signature in database
GPG Key ID: 3381A5457F8CCECF
3 changed files with 20 additions and 8 deletions

View File

@ -870,14 +870,7 @@ export class IdentityAutoFillConstants {
};
}
export const SubmitLoginButtonNames: string[] = [
"login",
"signin",
"submit",
"continue",
"next",
"go",
];
export const SubmitLoginButtonNames: string[] = ["login", "signin", "submit", "continue", "next"];
export const SubmitChangePasswordButtonNames: string[] = [
"change",

View File

@ -34,6 +34,7 @@ import {
elementIsFillableFormField,
elementIsSelectElement,
getAttributeBoolean,
nodeIsAnchorElement,
nodeIsButtonElement,
nodeIsTypeSubmitElement,
sendExtensionMessage,
@ -434,6 +435,12 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
formElement.addEventListener(EVENTS.SUBMIT, this.handleFormFieldSubmitEvent);
const closesSubmitButton = await this.findSubmitButton(formElement);
if (!closesSubmitButton) {
await this.setupSubmitListenerOnFormlessField(formFieldElement);
return;
}
this.setupSubmitButtonEventListeners(closesSubmitButton);
}
}
@ -508,6 +515,14 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
if (submitButtonElement) {
return submitButtonElement;
}
// If the submit button is not a traditional button element, check for an anchor element that contains submission keywords.
const submitAnchorElement = await this.querySubmitButtonElement(element, "a", (node: Node) =>
nodeIsAnchorElement(node),
);
if (submitAnchorElement) {
return submitAnchorElement;
}
}
/**

View File

@ -323,6 +323,10 @@ export function nodeIsButtonElement(node: Node): node is HTMLButtonElement {
);
}
export function nodeIsAnchorElement(node: Node): node is HTMLAnchorElement {
return nodeIsElement(node) && elementIsInstanceOf<HTMLAnchorElement>(node, "a");
}
/**
* Returns a boolean representing the attribute value of an element.
*