Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: third_party/WebKit/Source/core/events/EventTarget.cpp

Issue 1942723004: Change EventTarget callback APIs for add/RemoveEventListenerInternal. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix win32 signed/unsigned issue Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/events/EventTarget.cpp
diff --git a/third_party/WebKit/Source/core/events/EventTarget.cpp b/third_party/WebKit/Source/core/events/EventTarget.cpp
index 230c6756ff1dd0844ccd0969d4815389b1012a73..55f80e05075c26069a4d01113f5e57cbda2da11d 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.cpp
+++ b/third_party/WebKit/Source/core/events/EventTarget.cpp
@@ -160,17 +160,25 @@ bool EventTarget::addEventListenerInternal(const AtomicString& eventType, EventL
activityLogger->logEvent("blinkAddEventListener", argv.size(), argv.data());
}
- return ensureEventTargetData().eventListenerMap.add(eventType, listener, options);
+ RegisteredEventListener registeredListener;
+ bool added = ensureEventTargetData().eventListenerMap.add(eventType, listener, options, &registeredListener);
+ if (added)
+ addedEventListener(eventType, registeredListener);
+ return added;
}
-bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, bool useCapture)
+void EventTarget::addedEventListener(const AtomicString& eventType, RegisteredEventListener& registeredListener)
+{
+}
+
+bool EventTarget::removeEventListener(const AtomicString& eventType, const EventListener* listener, bool useCapture)
{
EventListenerOptions options;
setDefaultEventListenerOptionsLegacy(options, useCapture);
return removeEventListenerInternal(eventType, listener, options);
}
-bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, const EventListenerOptionsOrBoolean& optionsUnion)
+bool EventTarget::removeEventListener(const AtomicString& eventType, const EventListener* listener, const EventListenerOptionsOrBoolean& optionsUnion)
{
if (optionsUnion.isBoolean())
return removeEventListener(eventType, listener, optionsUnion.getAsBoolean());
@@ -181,13 +189,13 @@ bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen
return removeEventListener(eventType, listener);
}
-bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, EventListenerOptions& options)
+bool EventTarget::removeEventListener(const AtomicString& eventType, const EventListener* listener, EventListenerOptions& options)
{
setDefaultEventListenerOptions(options);
return removeEventListenerInternal(eventType, listener, options);
}
-bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
+bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, const EventListener* listener, const EventListenerOptions& options)
{
if (!listener)
return false;
@@ -197,34 +205,39 @@ bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, Eve
return false;
size_t indexOfRemovedListener;
+ RegisteredEventListener registeredListener;
- if (!d->eventListenerMap.remove(eventType, listener, options, indexOfRemovedListener))
+ if (!d->eventListenerMap.remove(eventType, listener, options, &indexOfRemovedListener, &registeredListener))
return false;
// Notify firing events planning to invoke the listener at 'index' that
// they have one less listener to invoke.
- if (!d->firingEventIterators)
- return true;
- for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
- FiringEventIterator& firingIterator = d->firingEventIterators->at(i);
- if (eventType != firingIterator.eventType)
- continue;
-
- if (indexOfRemovedListener >= firingIterator.end)
- continue;
-
- --firingIterator.end;
- // Note that when firing an event listener,
- // firingIterator.iterator indicates the next event listener
- // that would fire, not the currently firing event
- // listener. See EventTarget::fireEventListeners.
- if (indexOfRemovedListener < firingIterator.iterator)
- --firingIterator.iterator;
+ if (d->firingEventIterators) {
+ for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
+ FiringEventIterator& firingIterator = d->firingEventIterators->at(i);
+ if (eventType != firingIterator.eventType)
+ continue;
+
+ if (indexOfRemovedListener >= firingIterator.end)
+ continue;
+
+ --firingIterator.end;
+ // Note that when firing an event listener,
+ // firingIterator.iterator indicates the next event listener
+ // that would fire, not the currently firing event
+ // listener. See EventTarget::fireEventListeners.
+ if (indexOfRemovedListener < firingIterator.iterator)
+ --firingIterator.iterator;
+ }
}
-
+ removedEventListener(eventType, registeredListener);
return true;
}
+void EventTarget::removedEventListener(const AtomicString& eventType, const RegisteredEventListener& registeredListener)
+{
+}
+
bool EventTarget::setAttributeEventListener(const AtomicString& eventType, EventListener* listener)
{
clearAttributeEventListener(eventType);
@@ -238,8 +251,8 @@ EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventT
EventListenerVector* listenerVector = getEventListeners(eventType);
if (!listenerVector)
return nullptr;
- for (const auto& eventListener : *listenerVector) {
- EventListener* listener = eventListener.listener.get();
+ for (auto& eventListener : *listenerVector) {
+ EventListener* listener = eventListener.listener();
if (listener->isAttribute() && listener->belongsToTheCurrentWorld())
return listener;
}
@@ -429,9 +442,9 @@ void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
// EventTarget::removeEventListener.
++i;
- if (event->eventPhase() == Event::CAPTURING_PHASE && !registeredListener.useCapture)
+ if (event->eventPhase() == Event::CAPTURING_PHASE && !registeredListener.capture())
continue;
- if (event->eventPhase() == Event::BUBBLING_PHASE && registeredListener.useCapture)
+ if (event->eventPhase() == Event::BUBBLING_PHASE && registeredListener.capture())
continue;
// If stopImmediatePropagation has been called, we just break out immediately, without
@@ -443,13 +456,13 @@ void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
if (!context)
break;
- event->setHandlingPassive(registeredListener.passive);
+ event->setHandlingPassive(registeredListener.passive());
InspectorInstrumentation::NativeBreakpoint nativeBreakpoint(context, this, event);
// To match Mozilla, the AT_TARGET phase fires both capturing and bubbling
// event listeners, even though that violates some versions of the DOM spec.
- registeredListener.listener->handleEvent(context, event);
+ registeredListener.listener()->handleEvent(context, event);
event->setHandlingPassive(false);
RELEASE_ASSERT(i <= size);
« no previous file with comments | « third_party/WebKit/Source/core/events/EventTarget.h ('k') | third_party/WebKit/Source/core/events/RegisteredEventListener.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698