[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[] = [ export const SubmitLoginButtonNames: string[] = ["login", "signin", "submit", "continue", "next"];
"login",
"signin",
"submit",
"continue",
"next",
"go",
];
export const SubmitChangePasswordButtonNames: string[] = [ export const SubmitChangePasswordButtonNames: string[] = [
"change", "change",

View File

@ -34,6 +34,7 @@ import {
elementIsFillableFormField, elementIsFillableFormField,
elementIsSelectElement, elementIsSelectElement,
getAttributeBoolean, getAttributeBoolean,
nodeIsAnchorElement,
nodeIsButtonElement, nodeIsButtonElement,
nodeIsTypeSubmitElement, nodeIsTypeSubmitElement,
sendExtensionMessage, sendExtensionMessage,
@ -434,6 +435,12 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
formElement.addEventListener(EVENTS.SUBMIT, this.handleFormFieldSubmitEvent); formElement.addEventListener(EVENTS.SUBMIT, this.handleFormFieldSubmitEvent);
const closesSubmitButton = await this.findSubmitButton(formElement); const closesSubmitButton = await this.findSubmitButton(formElement);
if (!closesSubmitButton) {
await this.setupSubmitListenerOnFormlessField(formFieldElement);
return;
}
this.setupSubmitButtonEventListeners(closesSubmitButton); this.setupSubmitButtonEventListeners(closesSubmitButton);
} }
} }
@ -508,6 +515,14 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
if (submitButtonElement) { if (submitButtonElement) {
return 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. * Returns a boolean representing the attribute value of an element.
* *