Bug 1933479 - Add tab close button on hover to vertical tabs when sidebar is collapse...
[gecko.git] / toolkit / components / formautofill / FormAutofillContent.sys.mjs
blobbbbb51757e9e55f0cd4afd9e048c38a9aebf5254
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /**
6  * Form Autofill content process module.
7  */
9 /* eslint-disable no-use-before-define */
11 const lazy = {};
13 ChromeUtils.defineESModuleGetters(lazy, {
14   FormAutofill: "resource://autofill/FormAutofill.sys.mjs",
15 });
17 const formFillController = Cc[
18   "@mozilla.org/satchel/form-fill-controller;1"
19 ].getService(Ci.nsIFormFillController);
21 /**
22  * Handles content's interactions for the process.
23  *
24  */
25 export var FormAutofillContent = {
26   /**
27    * @type {Set} Set of the fields with usable values in any saved profile.
28    */
29   get savedFieldNames() {
30     return Services.cpmm.sharedData.get("FormAutofill:savedFieldNames");
31   },
33   get focusedInput() {
34     return formFillController.focusedInput;
35   },
37   /**
38    * @type {boolean} Flag indicating whether a focus action requiring
39    * the popup to be active is pending.
40    */
41   _popupPending: false,
43   init() {
44     this.log = lazy.FormAutofill.defineLogGetter(this, "FormAutofillContent");
45     this.debug("init");
47     // eslint-disable-next-line mozilla/balanced-listeners
48     Services.cpmm.sharedData.addEventListener("change", this);
49   },
51   showPopup() {
52     if (Services.cpmm.sharedData.get("FormAutofill:enabled")) {
53       this.debug("updateActiveElement: opening pop up");
54       formFillController.showPopup();
55     } else {
56       this.debug(
57         "updateActiveElement: Deferring pop-up until Autofill is ready"
58       );
59       this._popupPending = true;
60     }
61   },
63   handleEvent(evt) {
64     switch (evt.type) {
65       case "change": {
66         if (!evt.changedKeys.includes("FormAutofill:enabled")) {
67           return;
68         }
69         if (Services.cpmm.sharedData.get("FormAutofill:enabled")) {
70           if (this._popupPending) {
71             this._popupPending = false;
72             this.debug("handleEvent: Opening deferred popup");
73             formFillController.showPopup();
74           }
75         }
76         break;
77       }
78     }
79   },
82 FormAutofillContent.init();