fune/toolkit/components/satchel/FillHelpers.sys.mjs
Dimi 0fa0555629 Bug 1894889 - Trigger autocomplete action from the parent process r=credential-management-reviewers,geckoview-reviewers,NeilDeakin,owlish
This patch adds the following messages to the autocomplete item:
1. For address and credit card autofill, use the `FormAutofill:FillForm` message.
2. For login autofill, use the `PasswordManager:OnFieldAutoComplete` message.
3. For generated password autofill, use the `PasswordManager:FillGeneratedPassword` message.
After adding the above three messages, every autocomplete item that performs an action
upon being clicked has a corresponding `fillMessageName`.

Here is how the new architecture works:

1. Whenever a user selects an autocomplete entry, the `AutoCompleteChild` sends
   the `AutoComplete:SelectEntry` message to the parent process.
2. `AutoCompleteParent` extracts `fillMessageName` from the message and uses
   the prefix of the message name to determine which actor should process this message.
3. The `OnFieldAutoCompleteEntrySelected` method of the actor is called. The actor in
   the parent process determines what action to take.

Differential Revision: https://phabricator.services.mozilla.com/D209353
2024-05-21 19:06:35 +00:00

41 lines
1.5 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// This item shows image, label & secondary.
// Once selected it will send fillMessageName with fillMessageData
// to the parent actor and response will be used to fill into the field.
export class GenericAutocompleteItem {
comment = "";
style = "generic";
value = "";
constructor(image, label, secondary, fillMessageName, fillMessageData) {
this.image = image;
this.label = label;
this.comment = JSON.stringify({
secondary,
fillMessageName,
fillMessageData,
});
}
}
/**
* Show confirmation tooltip
*
* @param {object} browser - An object representing the browser.
* @param {string} messageId - Message ID from browser/confirmationHints.ftl
* @param {string} [anchorId="identity-icon-box"] - ID of the element to anchor the hint to.
The "password-notification-icon" and "notification-popup-box" are hidden
at the point of showing the hint (for *most* cases), so approximate the
location with the next closest, visible icon as the anchor.
*/
export function showConfirmation(
browser,
messageId,
anchorId = "identity-icon-box"
) {
const anchor = browser.ownerDocument.getElementById(anchorId);
anchor.ownerGlobal.ConfirmationHint.show(anchor, messageId, {});
}