NS_IMETHODIMP EventListenerService::RemoveSystemEventListener(EventTarget *aTarget, const nsAString& aType, JS::Handle<JS::Value> aListener, bool aUseCapture, JSContext* aCx) { MOZ_ASSERT(aTarget, "Missing target"); NS_ENSURE_TRUE(aTarget, NS_ERROR_UNEXPECTED); RefPtr<EventListener> listener = ToEventListener(aCx, aListener); if (!listener) { return NS_ERROR_UNEXPECTED; } EventListenerManager* manager = aTarget->GetExistingListenerManager(); if (manager) { EventListenerFlags flags = aUseCapture ? TrustedEventsAtSystemGroupCapture() : TrustedEventsAtSystemGroupBubble(); manager->RemoveEventListenerByType(listener, aType, flags); } return NS_OK; }
NS_IMETHODIMP EventListenerService::AddSystemEventListener(nsIDOMEventTarget *aTarget, const nsAString& aType, nsIDOMEventListener* aListener, bool aUseCapture) { NS_PRECONDITION(aTarget, "Missing target"); NS_PRECONDITION(aListener, "Missing listener"); nsCOMPtr<EventTarget> eventTarget = do_QueryInterface(aTarget); NS_ENSURE_TRUE(eventTarget, NS_ERROR_NO_INTERFACE); EventListenerManager* manager = eventTarget->GetOrCreateListenerManager(); NS_ENSURE_STATE(manager); EventListenerFlags flags = aUseCapture ? TrustedEventsAtSystemGroupCapture() : TrustedEventsAtSystemGroupBubble(); manager->AddEventListenerByType(aListener, aType, flags); return NS_OK; }