Bug 1287706 part 6 - Separate notifying listener removal to an independent method. r=smaug

MozReview-Commit-ID: EE4fp4eqzqK

--HG--
extra : source : 51a979be13f77f84e69ea202ddb2838612b324c0
This commit is contained in:
Xidorn Quan 2016-07-28 12:00:06 +10:00
Родитель 5b8c16a02b
Коммит 55d860ca4a
2 изменённых файлов: 19 добавлений и 18 удалений

Просмотреть файл

@ -605,6 +605,22 @@ EventListenerManager::DisableDevice(EventMessage aEventMessage)
}
}
void
EventListenerManager::NotifyEventListenerRemoved(nsIAtom* aUserType)
{
// If the following code is changed, other callsites of EventListenerRemoved
// and NotifyAboutMainThreadListenerChange should be changed too.
mNoListenerForEvent = eVoidEvent;
mNoListenerForEventAtom = nullptr;
if (mTarget && aUserType) {
mTarget->EventListenerRemoved(aUserType);
}
if (mIsMainThreadELM && mTarget) {
EventListenerService::NotifyAboutMainThreadListenerChange(mTarget,
aUserType);
}
}
void
EventListenerManager::RemoveEventListenerInternal(
EventListenerHolder aListenerHolder,
@ -634,16 +650,7 @@ EventListenerManager::RemoveEventListenerInternal(
RefPtr<EventListenerManager> kungFuDeathGrip(this);
mListeners.RemoveElementAt(i);
--count;
mNoListenerForEvent = eVoidEvent;
mNoListenerForEventAtom = nullptr;
if (mTarget && aUserType) {
mTarget->EventListenerRemoved(aUserType);
}
if (mIsMainThreadELM && mTarget) {
EventListenerService::NotifyAboutMainThreadListenerChange(mTarget,
aUserType);
}
NotifyEventListenerRemoved(aUserType);
if (!deviceType) {
return;
}
@ -903,14 +910,7 @@ EventListenerManager::RemoveEventHandler(nsIAtom* aName,
if (listener) {
mListeners.RemoveElementAt(uint32_t(listener - &mListeners.ElementAt(0)));
mNoListenerForEvent = eVoidEvent;
mNoListenerForEventAtom = nullptr;
if (mTarget && aName) {
mTarget->EventListenerRemoved(aName);
}
if (mIsMainThreadELM && mTarget) {
EventListenerService::NotifyAboutMainThreadListenerChange(mTarget, aName);
}
NotifyEventListenerRemoved(aName);
}
}

Просмотреть файл

@ -602,6 +602,7 @@ protected:
const EventListenerFlags& aFlags,
bool aAllEvents = false);
void RemoveAllListeners();
void NotifyEventListenerRemoved(nsIAtom* aUserType);
const EventTypeData* GetTypeDataForIID(const nsIID& aIID);
const EventTypeData* GetTypeDataForEventName(nsIAtom* aName);
nsPIDOMWindowInner* GetInnerWindowForTarget();