bool EventTarget::fireEventListeners(Event& event) { ASSERT_WITH_SECURITY_IMPLICATION(!NoEventDispatchAssertion::isEventDispatchForbidden()); ASSERT(event.isInitialized()); EventTargetData* d = eventTargetData(); if (!d) return true; EventListenerVector* legacyListenersVector = nullptr; const AtomicString& legacyTypeName = legacyType(event); if (!legacyTypeName.isEmpty()) legacyListenersVector = d->eventListenerMap.find(legacyTypeName); EventListenerVector* listenersVector = d->eventListenerMap.find(event.type()); if (listenersVector) fireEventListeners(event, d, *listenersVector); else if (legacyListenersVector) { AtomicString typeName = event.type(); event.setType(legacyTypeName); fireEventListeners(event, d, *legacyListenersVector); event.setType(typeName); } return !event.defaultPrevented(); }
bool EventTarget::fireEventListeners(Event* event) { ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); ASSERT(event && !event->type().isEmpty()); EventTargetData* d = eventTargetData(); if (!d) return true; EventListenerVector* legacyListenersVector = nullptr; AtomicString legacyTypeName = legacyType(event); if (!legacyTypeName.isEmpty()) legacyListenersVector = d->eventListenerMap.find(legacyTypeName); EventListenerVector* listenersVector = d->eventListenerMap.find(event->type()); if (listenersVector) { fireEventListeners(event, d, *listenersVector); } else if (legacyListenersVector) { AtomicString unprefixedTypeName = event->type(); event->setType(legacyTypeName); fireEventListeners(event, d, *legacyListenersVector); event->setType(unprefixedTypeName); } Editor::countEvent(executionContext(), event); countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); return !event->defaultPrevented(); }
bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) { event->setTarget(this); event->setCurrentTarget(this); event->setEventPhase(Event::AT_TARGET); bool defaultWasNotPrevented = fireEventListeners(event.get()); event->setEventPhase(0); return defaultWasNotPrevented; }
bool EventTarget::dispatchEvent(Event& event) { ASSERT(event.isInitialized()); ASSERT(!event.isBeingDispatched()); event.setTarget(this); event.setCurrentTarget(this); event.setEventPhase(Event::AT_TARGET); bool defaultPrevented = fireEventListeners(event); event.setEventPhase(0); return defaultPrevented; }
bool EventTarget::fireEventListeners(Event* event) { ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); ASSERT(event && !event->type().isEmpty()); EventTargetData* d = eventTargetData(); if (!d) return true; EventListenerVector* legacyListenersVector = 0; AtomicString legacyTypeName = legacyType(event); if (!legacyTypeName.isEmpty()) legacyListenersVector = d->eventListenerMap.find(legacyTypeName); EventListenerVector* listenersVector = d->eventListenerMap.find(event->type()); if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled() && (event->type() == EventTypeNames::animationiteration || event->type() == EventTypeNames::animationend || event->type() == EventTypeNames::animationstart) // Some code out-there uses custom events to dispatch unprefixed animation events manually, // we can safely remove all this block when cssAnimationUnprefixedEnabled is always on, this // is really a special case. DO NOT ADD MORE EVENTS HERE. && event->interfaceName() != EventNames::CustomEvent) listenersVector = 0; if (listenersVector) { fireEventListeners(event, d, *listenersVector); } else if (legacyListenersVector) { AtomicString unprefixedTypeName = event->type(); event->setType(legacyTypeName); fireEventListeners(event, d, *legacyListenersVector); event->setType(unprefixedTypeName); } Editor::countEvent(executionContext(), event); countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); return !event->defaultPrevented(); }