diff --git a/content/events/src/nsEventListenerManager.cpp b/content/events/src/nsEventListenerManager.cpp index 211aa72708cb..17b2fd2d583d 100644 --- a/content/events/src/nsEventListenerManager.cpp +++ b/content/events/src/nsEventListenerManager.cpp @@ -228,10 +228,11 @@ nsEventListenerManager::AddEventListenerInternal( uint32_t count = mListeners.Length(); for (uint32_t i = 0; i < count; i++) { ls = &mListeners.ElementAt(i); - if (ls->mListener == aListener && - ls->mListenerIsHandler == aHandler && + // mListener == aListener is the last one, since it can be a bit slow. + if (ls->mListenerIsHandler == aHandler && ls->mFlags == aFlags && - EVENT_TYPE_EQUALS(ls, aType, aTypeAtom, aTypeString, aAllEvents)) { + EVENT_TYPE_EQUALS(ls, aType, aTypeAtom, aTypeString, aAllEvents) && + ls->mListener == aListener) { return; } }