diff --git a/dom/base/Element.h b/dom/base/Element.h index 611fde38f5..14c53ae465 100644 --- a/dom/base/Element.h +++ b/dom/base/Element.h @@ -1603,6 +1603,16 @@ private: // Data members EventStates mState; + +public: + // Public helper to add or remove event states + void SetEventState(mozilla::EventStates aState, bool aAdd) { + if (aAdd) { + this->AddStates(aState); + } else { + this->RemoveStates(aState); + } + } }; class RemoveFromBindingManagerRunnable : public mozilla::Runnable diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp index 27791100dc..be9c16d0ec 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp @@ -4067,7 +4067,11 @@ nsDOMWindowUtils::AddElementEventState(nsIDOMElement* aElement, uint64_t aState) if (!content) { return NS_ERROR_INVALID_ARG; } - content->AddStates(mozilla::EventStates(aState)); + mozilla::dom::Element* element = static_cast(content.get()); + if (!element) { + return NS_ERROR_INVALID_ARG; + } + element->SetEventState(mozilla::EventStates(aState), true); return NS_OK; } @@ -4079,6 +4083,10 @@ nsDOMWindowUtils::RemoveElementEventState(nsIDOMElement* aElement, uint64_t aSta if (!content) { return NS_ERROR_INVALID_ARG; } - content->RemoveStates(mozilla::EventStates(aState)); + mozilla::dom::Element* element = static_cast(content.get()); + if (!element) { + return NS_ERROR_INVALID_ARG; + } + element->SetEventState(mozilla::EventStates(aState), false); return NS_OK; } diff --git a/dom/base/nsDOMWindowUtils.h b/dom/base/nsDOMWindowUtils.h index ef827be41c..a398646a91 100644 --- a/dom/base/nsDOMWindowUtils.h +++ b/dom/base/nsDOMWindowUtils.h @@ -63,8 +63,6 @@ public: explicit nsDOMWindowUtils(nsGlobalWindow *aWindow); NS_DECL_ISUPPORTS NS_DECL_NSIDOMWINDOWUTILS - NS_IMETHOD AddElementEventState(nsIDOMElement* aElement, uint64_t aState) override; - NS_IMETHOD RemoveElementEventState(nsIDOMElement* aElement, uint64_t aState) override; protected: ~nsDOMWindowUtils(); diff --git a/toolkit/components/formautofill/FormAutofillContentService.js b/toolkit/components/formautofill/FormAutofillContentService.js index d5afd8062f..2406be1ff2 100644 --- a/toolkit/components/formautofill/FormAutofillContentService.js +++ b/toolkit/components/formautofill/FormAutofillContentService.js @@ -31,6 +31,19 @@ function FormHandler(aForm, aWindow) { this.window = aWindow; this.fieldDetails = []; + + // Add a reset event listener to clear autofill state + this.form.addEventListener("reset", () => { + console.log('Form reset detected, clearing autofill state'); + for (let element of this.form.elements) { + if (typeof element.setAutofilled === "function") { + element.setAutofilled(false); + console.log('setAutofilled(false) called on', element); + } + } + // Optionally, clear fieldDetails if you want to force re-collection + // this.fieldDetails = []; + }); } FormHandler.prototype = {