From 9530ccd561dd75f274d75b51740999d9bc1c524c Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Mon, 5 Sep 2016 19:34:30 +0300 Subject: [PATCH] Bug 1298504, ensure existing listeners are correctly counted before disabling some device APIs, r=mccr8 --- dom/events/EventListenerManager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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); + } } }