diff --git a/dom/events/EventListenerManager.cpp b/dom/events/EventListenerManager.cpp index 55fd596e4eecac91471374c44f503410a09c8bb4..83eb8a8cf76ea4ba99e0c5c469fb59507d4b700e 100644 --- a/dom/events/EventListenerManager.cpp +++ b/dom/events/EventListenerManager.cpp @@ -1007,6 +1007,8 @@ nsresult EventListenerManager::SetEventHandler(nsAtom* aName, bool aDeferCompilation, bool aPermitUntrustedEvents, Element* aElement) { + auto removeEventHandler = MakeScopeExit([&] { RemoveEventHandler(aName); }); + nsCOMPtr<Document> doc; nsCOMPtr<nsIScriptGlobalObject> global = GetScriptGlobalAndDocument(getter_AddRefs(doc)); @@ -1066,6 +1068,8 @@ nsresult EventListenerManager::SetEventHandler(nsAtom* aName, NS_ENSURE_TRUE(context, NS_ERROR_FAILURE); NS_ENSURE_STATE(global->HasJSGlobal()); + removeEventHandler.release(); + Listener* listener = SetEventHandlerInternal(aName, TypedEventHandler(), aPermitUntrustedEvents);