Bug 1298504, ensure existing listeners are correctly counted before disabling some device APIs, r=mccr8

This commit is contained in:
Olli Pettay 2016-09-05 19:34:30 +03:00
parent 8744d0ccf8
commit 9530ccd561

View File

@ -654,6 +654,7 @@ EventListenerManager::RemoveEventListenerInternal(
uint32_t count = mListeners.Length();
uint32_t typeCount = 0;
bool deviceType = IsDeviceType(aEventMessage);
bool didRemove = false;
RefPtr<EventListenerManager> 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);
}
}
}