Bug 1287706 part 6 - Separate notifying listener removal to an independent method. r?smaug
MozReview-Commit-ID: EE4fp4eqzqK
--- a/dom/events/EventListenerManager.cpp
+++ b/dom/events/EventListenerManager.cpp
@@ -601,16 +601,30 @@ EventListenerManager::DisableDevice(Even
#endif // MOZ_B2G
default:
NS_WARNING("Disabling an unknown device sensor.");
break;
}
}
void
+EventListenerManager::NotifyEventListenerRemoved(nsIAtom* aUserType)
+{
+ mNoListenerForEvent = eVoidEvent;
+ mNoListenerForEventAtom = nullptr;
+ if (mTarget && aUserType) {
+ mTarget->EventListenerRemoved(aUserType);
+ }
+ if (mIsMainThreadELM && mTarget) {
+ EventListenerService::NotifyAboutMainThreadListenerChange(mTarget,
+ aUserType);
+ }
+}
+
+void
EventListenerManager::RemoveEventListenerInternal(
EventListenerHolder aListenerHolder,
EventMessage aEventMessage,
nsIAtom* aUserType,
const nsAString& aTypeString,
const EventListenerFlags& aFlags,
bool aAllEvents)
{
@@ -629,26 +643,17 @@ EventListenerManager::RemoveEventListene
if (EVENT_TYPE_EQUALS(listener, aEventMessage, aUserType, aTypeString,
aAllEvents)) {
++typeCount;
if (listener->mListener == aListenerHolder &&
listener->mFlags.EqualsForRemoval(aFlags)) {
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;
}
--typeCount;
}
}
}
@@ -898,24 +903,17 @@ EventListenerManager::RemoveEventHandler
return;
}
EventMessage eventMessage = nsContentUtils::GetEventMessage(aName);
Listener* listener = FindEventHandler(eventMessage, aName, aTypeString);
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);
}
}
nsresult
EventListenerManager::CompileEventHandlerInternal(Listener* aListener,
const nsAString* aBody,
Element* aElement)
{
--- a/dom/events/EventListenerManager.h
+++ b/dom/events/EventListenerManager.h
@@ -589,16 +589,17 @@ protected:
bool aAllEvents = false);
void RemoveEventListenerInternal(EventListenerHolder aListener,
EventMessage aEventMessage,
nsIAtom* aUserType,
const nsAString& aTypeString,
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();
already_AddRefed<nsPIDOMWindowInner> GetTargetAsInnerWindow() const;
bool ListenerCanHandle(const Listener* aListener,
const WidgetEvent* aEvent,
EventMessage aEventMessage) const;