diff --git a/dom/events/EventListenerManager.cpp b/dom/events/EventListenerManager.cpp index fa235d8e6b26..bf3916760696 100644 --- a/dom/events/EventListenerManager.cpp +++ b/dom/events/EventListenerManager.cpp @@ -654,6 +654,7 @@ EventListenerManager::RemoveEventListenerInternal( uint32_t count = mListeners.Length(); uint32_t typeCount = 0; bool deviceType = IsDeviceType(aEventMessage); + bool didRemove = false; RefPtr kungFuDeathGrip(this); @@ -665,18 +666,22 @@ EventListenerManager::RemoveEventListenerInternal( if (listener->mListener == aListenerHolder && listener->mFlags.EqualsForRemoval(aFlags)) { mListeners.RemoveElementAt(i); + didRemove = true; --count; - NotifyEventListenerRemoved(aUserType); + --i; if (!deviceType) { - return; + break; } --typeCount; } } } - if (!aAllEvents && deviceType && typeCount == 0) { - DisableDevice(aEventMessage); + if(didRemove) { + NotifyEventListenerRemoved(aUserType); + if (!aAllEvents && deviceType && typeCount == 0) { + DisableDevice(aEventMessage); + } } }