Bug 1449631 part 3. Remove nsIDOMEventTarget::RemoveSystemEventListener. r=smaug

MozReview-Commit-ID: F67Od8surQ8
This commit is contained in:
Boris Zbarsky 2018-04-05 13:42:40 -04:00
parent 1dce94cf16
commit 7c94e8697f
10 changed files with 37 additions and 65 deletions

View file

@ -1133,22 +1133,16 @@ NS_IMETHODIMP
ChromeTooltipListener::RemoveTooltipListener()
{
if (mEventTarget) {
nsresult rv = NS_OK;
#ifndef XP_WIN
rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("keydown"),
this, false);
NS_ENSURE_SUCCESS(rv, rv);
mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("keydown"),
this, false);
#endif
rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousedown"),
this, false);
NS_ENSURE_SUCCESS(rv, rv);
rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mouseout"),
this, false);
NS_ENSURE_SUCCESS(rv, rv);
rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousemove"),
this, false);
NS_ENSURE_SUCCESS(rv, rv);
mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousedown"),
this, false);
mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mouseout"),
this, false);
mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousemove"),
this, false);
mTooltipListenerInstalled = false;
}

View file

@ -404,11 +404,9 @@ ScreenOrientation::UnlockDeviceOrientation()
// Remove event listener in case of fullscreen lock.
nsCOMPtr<EventTarget> target = do_QueryInterface(GetOwner()->GetDoc());
if (target) {
DebugOnly<nsresult> rv =
target->RemoveSystemEventListener(NS_LITERAL_STRING("fullscreenchange"),
mFullScreenListener,
/* useCapture */ true);
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "RemoveSystemEventListener failed");
target->RemoveSystemEventListener(NS_LITERAL_STRING("fullscreenchange"),
mFullScreenListener,
/* useCapture */ true);
}
mFullScreenListener = nullptr;
@ -628,11 +626,8 @@ ScreenOrientation::VisibleEventListener::HandleEvent(nsIDOMEvent* aEvent)
ScreenOrientation* orientation = screen->Orientation();
MOZ_ASSERT(orientation);
rv = target->RemoveSystemEventListener(NS_LITERAL_STRING("visibilitychange"),
this, true);
if (NS_WARN_IF(rv.Failed())) {
return rv.StealNSResult();
}
target->RemoveSystemEventListener(NS_LITERAL_STRING("visibilitychange"),
this, true);
if (doc->CurrentOrientationType() != orientation->DeviceType(CallerType::System)) {
doc->SetCurrentOrientation(orientation->DeviceType(CallerType::System),
@ -684,9 +679,7 @@ ScreenOrientation::FullScreenEventListener::HandleEvent(nsIDOMEvent* aEvent)
hal::UnlockScreenOrientation();
nsresult rv = target->RemoveSystemEventListener(NS_LITERAL_STRING("fullscreenchange"),
this, true);
NS_ENSURE_SUCCESS(rv, rv);
target->RemoveSystemEventListener(NS_LITERAL_STRING("fullscreenchange"),
this, true);
return NS_OK;
}

View file

@ -4481,8 +4481,6 @@ nsGlobalWindowInner::GetOwnerGlobalForBindings()
return nsPIDOMWindowOuter::GetFromCurrentInner(this);
}
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(nsGlobalWindowInner)
NS_IMETHODIMP
nsGlobalWindowInner::DispatchEvent(nsIDOMEvent* aEvent, bool* aRetVal)
{

View file

@ -6475,8 +6475,6 @@ nsGlobalWindowOuter::GetOwnerGlobalForBindings()
return this;
}
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(nsGlobalWindowOuter)
NS_IMETHODIMP
nsGlobalWindowOuter::DispatchEvent(nsIDOMEvent* aEvent, bool* aRetVal)
{

View file

@ -1089,8 +1089,6 @@ nsINode::AddSystemEventListener(const nsAString& aType,
aWantsUntrusted);
}
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(nsINode)
nsresult
nsINode::GetEventTargetParent(EventChainPreVisitor& aVisitor)
{

View file

@ -72,8 +72,6 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(nsWindowRoot)
NS_IMPL_DOMTARGET_DEFAULTS(nsWindowRoot)
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(nsWindowRoot)
NS_IMETHODIMP
nsWindowRoot::DispatchEvent(nsIDOMEvent* aEvt, bool *aRetVal)
{

View file

@ -175,8 +175,6 @@ DOMEventTargetHelper::GetDocumentIfCurrent() const
return win->GetDoc();
}
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(DOMEventTargetHelper)
NS_IMETHODIMP
DOMEventTargetHelper::AddEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,

View file

@ -50,6 +50,20 @@ EventTarget::RemoveEventListener(const nsAString& aType,
}
}
void
EventTarget::RemoveSystemEventListener(const nsAString& aType,
nsIDOMEventListener *aListener,
bool aUseCapture)
{
EventListenerManager* elm = GetExistingListenerManager();
if (elm) {
EventListenerFlags flags;
flags.mInSystemGroup = true;
flags.mCapture = aUseCapture;
elm->RemoveEventListenerByType(aListener, aType, flags);
}
}
EventHandlerNonNull*
EventTarget::GetEventHandler(nsAtom* aType, const nsAString& aTypeString)
{

View file

@ -65,6 +65,14 @@ public:
void RemoveEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,
bool aUseCapture);
/**
* RemoveSystemEventListener() should be used if you have used
* AddSystemEventListener().
*/
void RemoveSystemEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,
bool aUseCapture);
bool DispatchEvent(Event& aEvent, CallerType aCallerType, ErrorResult& aRv);
nsIGlobalObject* GetParentObject() const

View file

@ -139,15 +139,6 @@ interface nsIDOMEventTarget : nsISupports
}
%}
/**
* removeSystemEventListener() should be used if you have used
* addSystemEventListener().
*/
[noscript] void removeSystemEventListener(
in DOMString type,
in nsIDOMEventListener listener,
[optional] in boolean aUseCapture);
/**
* This method allows the dispatch of events into the implementations
* event model. Events dispatched in this manner will have the same
@ -249,22 +240,4 @@ mozilla::dom::EventTarget* _class::GetTargetForDOMEvent() { return this; } \
mozilla::dom::EventTarget* _class::GetTargetForEventTargetChain() { return this; } \
nsresult _class::WillHandleEvent(mozilla::EventChainPostVisitor& aVisitor) { return NS_OK; }
#define NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(aClass) \
NS_IMETHODIMP \
aClass::RemoveSystemEventListener(const nsAString& aType, \
nsIDOMEventListener *aListener, \
bool aUseCapture) \
{ \
mozilla::EventListenerManager* listenerManager = \
GetExistingListenerManager(); \
if (!listenerManager) { \
return NS_OK; \
} \
mozilla::EventListenerFlags flags; \
flags.mInSystemGroup = true; \
flags.mCapture = aUseCapture; \
listenerManager->RemoveEventListenerByType(aListener, aType, flags); \
return NS_OK; \
}
%}