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);