| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
| 6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> |
| 8 * | 8 * |
| 9 * Redistribution and use in source and binary forms, with or without | 9 * Redistribution and use in source and binary forms, with or without |
| 10 * modification, are permitted provided that the following conditions | 10 * modification, are permitted provided that the following conditions |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 return nullptr; | 111 return nullptr; |
| 112 } | 112 } |
| 113 | 113 |
| 114 inline LocalDOMWindow* EventTarget::executingWindow() | 114 inline LocalDOMWindow* EventTarget::executingWindow() |
| 115 { | 115 { |
| 116 if (ExecutionContext* context = getExecutionContext()) | 116 if (ExecutionContext* context = getExecutionContext()) |
| 117 return context->executingWindow(); | 117 return context->executingWindow(); |
| 118 return nullptr; | 118 return nullptr; |
| 119 } | 119 } |
| 120 | 120 |
| 121 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtrWill
BeRawPtr<EventListener> listener, bool useCapture) | 121 bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventLi
stener> listener, bool useCapture) |
| 122 { | 122 { |
| 123 EventListenerOptions options; | 123 EventListenerOptions options; |
| 124 setDefaultEventListenerOptionsLegacy(options, useCapture); | 124 setDefaultEventListenerOptionsLegacy(options, useCapture); |
| 125 return addEventListenerInternal(eventType, listener, options); | 125 return addEventListenerInternal(eventType, listener, options); |
| 126 } | 126 } |
| 127 | 127 |
| 128 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtrWill
BeRawPtr<EventListener> listener, const EventListenerOptionsOrBoolean& optionsUn
ion) | 128 bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventLi
stener> listener, const EventListenerOptionsOrBoolean& optionsUnion) |
| 129 { | 129 { |
| 130 if (optionsUnion.isBoolean()) | 130 if (optionsUnion.isBoolean()) |
| 131 return addEventListener(eventType, listener, optionsUnion.getAsBoolean()
); | 131 return addEventListener(eventType, listener, optionsUnion.getAsBoolean()
); |
| 132 if (optionsUnion.isEventListenerOptions()) { | 132 if (optionsUnion.isEventListenerOptions()) { |
| 133 EventListenerOptions options = optionsUnion.getAsEventListenerOptions(); | 133 EventListenerOptions options = optionsUnion.getAsEventListenerOptions(); |
| 134 return addEventListener(eventType, listener, options); | 134 return addEventListener(eventType, listener, options); |
| 135 } | 135 } |
| 136 return addEventListener(eventType, listener); | 136 return addEventListener(eventType, listener); |
| 137 } | 137 } |
| 138 | 138 |
| 139 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtrWill
BeRawPtr<EventListener> listener, EventListenerOptions& options) | 139 bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventLi
stener> listener, EventListenerOptions& options) |
| 140 { | 140 { |
| 141 setDefaultEventListenerOptions(options); | 141 setDefaultEventListenerOptions(options); |
| 142 return addEventListenerInternal(eventType, listener, options); | 142 return addEventListenerInternal(eventType, listener, options); |
| 143 } | 143 } |
| 144 | 144 |
| 145 bool EventTarget::addEventListenerInternal(const AtomicString& eventType, PassRe
fPtrWillBeRawPtr<EventListener> listener, const EventListenerOptions& options) | 145 bool EventTarget::addEventListenerInternal(const AtomicString& eventType, RawPtr
<EventListener> listener, const EventListenerOptions& options) |
| 146 { | 146 { |
| 147 if (!listener) | 147 if (!listener) |
| 148 return false; | 148 return false; |
| 149 | 149 |
| 150 V8DOMActivityLogger* activityLogger = V8DOMActivityLogger::currentActivityLo
ggerIfIsolatedWorld(); | 150 V8DOMActivityLogger* activityLogger = V8DOMActivityLogger::currentActivityLo
ggerIfIsolatedWorld(); |
| 151 if (activityLogger) { | 151 if (activityLogger) { |
| 152 Vector<String> argv; | 152 Vector<String> argv; |
| 153 argv.append(toNode() ? toNode()->nodeName() : interfaceName()); | 153 argv.append(toNode() ? toNode()->nodeName() : interfaceName()); |
| 154 argv.append(eventType); | 154 argv.append(eventType); |
| 155 activityLogger->logEvent("blinkAddEventListener", argv.size(), argv.data
()); | 155 activityLogger->logEvent("blinkAddEventListener", argv.size(), argv.data
()); |
| 156 } | 156 } |
| 157 | 157 |
| 158 return ensureEventTargetData().eventListenerMap.add(eventType, listener, opt
ions); | 158 return ensureEventTargetData().eventListenerMap.add(eventType, listener, opt
ions); |
| 159 } | 159 } |
| 160 | 160 |
| 161 bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtrW
illBeRawPtr<EventListener> listener, bool useCapture) | 161 bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<Even
tListener> listener, bool useCapture) |
| 162 { | 162 { |
| 163 EventListenerOptions options; | 163 EventListenerOptions options; |
| 164 setDefaultEventListenerOptionsLegacy(options, useCapture); | 164 setDefaultEventListenerOptionsLegacy(options, useCapture); |
| 165 return removeEventListenerInternal(eventType, listener, options); | 165 return removeEventListenerInternal(eventType, listener, options); |
| 166 } | 166 } |
| 167 | 167 |
| 168 bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtrW
illBeRawPtr<EventListener> listener, const EventListenerOptionsOrBoolean& option
sUnion) | 168 bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<Even
tListener> listener, const EventListenerOptionsOrBoolean& optionsUnion) |
| 169 { | 169 { |
| 170 if (optionsUnion.isBoolean()) | 170 if (optionsUnion.isBoolean()) |
| 171 return removeEventListener(eventType, listener, optionsUnion.getAsBoolea
n()); | 171 return removeEventListener(eventType, listener, optionsUnion.getAsBoolea
n()); |
| 172 if (optionsUnion.isEventListenerOptions()) { | 172 if (optionsUnion.isEventListenerOptions()) { |
| 173 EventListenerOptions options = optionsUnion.getAsEventListenerOptions(); | 173 EventListenerOptions options = optionsUnion.getAsEventListenerOptions(); |
| 174 return removeEventListener(eventType, listener, options); | 174 return removeEventListener(eventType, listener, options); |
| 175 } | 175 } |
| 176 return removeEventListener(eventType, listener); | 176 return removeEventListener(eventType, listener); |
| 177 } | 177 } |
| 178 | 178 |
| 179 bool EventTarget::removeEventListener(const AtomicString& eventType, PassRefPtrW
illBeRawPtr<EventListener> listener, EventListenerOptions& options) | 179 bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<Even
tListener> listener, EventListenerOptions& options) |
| 180 { | 180 { |
| 181 setDefaultEventListenerOptions(options); | 181 setDefaultEventListenerOptions(options); |
| 182 return removeEventListenerInternal(eventType, listener, options); | 182 return removeEventListenerInternal(eventType, listener, options); |
| 183 } | 183 } |
| 184 | 184 |
| 185 bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, Pas
sRefPtrWillBeRawPtr<EventListener> listener, const EventListenerOptions& options
) | 185 bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, Raw
Ptr<EventListener> listener, const EventListenerOptions& options) |
| 186 { | 186 { |
| 187 if (!listener) | 187 if (!listener) |
| 188 return false; | 188 return false; |
| 189 | 189 |
| 190 EventTargetData* d = eventTargetData(); | 190 EventTargetData* d = eventTargetData(); |
| 191 if (!d) | 191 if (!d) |
| 192 return false; | 192 return false; |
| 193 | 193 |
| 194 size_t indexOfRemovedListener; | 194 size_t indexOfRemovedListener; |
| 195 | 195 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 213 // firingIterator.iterator indicates the next event listener | 213 // firingIterator.iterator indicates the next event listener |
| 214 // that would fire, not the currently firing event | 214 // that would fire, not the currently firing event |
| 215 // listener. See EventTarget::fireEventListeners. | 215 // listener. See EventTarget::fireEventListeners. |
| 216 if (indexOfRemovedListener < firingIterator.iterator) | 216 if (indexOfRemovedListener < firingIterator.iterator) |
| 217 --firingIterator.iterator; | 217 --firingIterator.iterator; |
| 218 } | 218 } |
| 219 | 219 |
| 220 return true; | 220 return true; |
| 221 } | 221 } |
| 222 | 222 |
| 223 bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassR
efPtrWillBeRawPtr<EventListener> listener) | 223 bool EventTarget::setAttributeEventListener(const AtomicString& eventType, RawPt
r<EventListener> listener) |
| 224 { | 224 { |
| 225 clearAttributeEventListener(eventType); | 225 clearAttributeEventListener(eventType); |
| 226 if (!listener) | 226 if (!listener) |
| 227 return false; | 227 return false; |
| 228 return addEventListener(eventType, listener, false); | 228 return addEventListener(eventType, listener, false); |
| 229 } | 229 } |
| 230 | 230 |
| 231 EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventT
ype) | 231 EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventT
ype) |
| 232 { | 232 { |
| 233 EventListenerVector* listenerVector = getEventListeners(eventType); | 233 EventListenerVector* listenerVector = getEventListeners(eventType); |
| 234 if (!listenerVector) | 234 if (!listenerVector) |
| 235 return nullptr; | 235 return nullptr; |
| 236 for (const auto& eventListener : *listenerVector) { | 236 for (const auto& eventListener : *listenerVector) { |
| 237 EventListener* listener = eventListener.listener.get(); | 237 EventListener* listener = eventListener.listener.get(); |
| 238 if (listener->isAttribute() && listener->belongsToTheCurrentWorld()) | 238 if (listener->isAttribute() && listener->belongsToTheCurrentWorld()) |
| 239 return listener; | 239 return listener; |
| 240 } | 240 } |
| 241 return nullptr; | 241 return nullptr; |
| 242 } | 242 } |
| 243 | 243 |
| 244 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType) | 244 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType) |
| 245 { | 245 { |
| 246 EventListener* listener = getAttributeEventListener(eventType); | 246 EventListener* listener = getAttributeEventListener(eventType); |
| 247 if (!listener) | 247 if (!listener) |
| 248 return false; | 248 return false; |
| 249 return removeEventListener(eventType, listener, false); | 249 return removeEventListener(eventType, listener, false); |
| 250 } | 250 } |
| 251 | 251 |
| 252 bool EventTarget::dispatchEventForBindings(PassRefPtrWillBeRawPtr<Event> event,
ExceptionState& exceptionState) | 252 bool EventTarget::dispatchEventForBindings(RawPtr<Event> event, ExceptionState&
exceptionState) |
| 253 { | 253 { |
| 254 if (event->type().isEmpty()) { | 254 if (event->type().isEmpty()) { |
| 255 exceptionState.throwDOMException(InvalidStateError, "The event provided
is uninitialized."); | 255 exceptionState.throwDOMException(InvalidStateError, "The event provided
is uninitialized."); |
| 256 return false; | 256 return false; |
| 257 } | 257 } |
| 258 if (event->isBeingDispatched()) { | 258 if (event->isBeingDispatched()) { |
| 259 exceptionState.throwDOMException(InvalidStateError, "The event is alread
y being dispatched."); | 259 exceptionState.throwDOMException(InvalidStateError, "The event is alread
y being dispatched."); |
| 260 return false; | 260 return false; |
| 261 } | 261 } |
| 262 | 262 |
| 263 if (!getExecutionContext()) | 263 if (!getExecutionContext()) |
| 264 return false; | 264 return false; |
| 265 | 265 |
| 266 event->setTrusted(false); | 266 event->setTrusted(false); |
| 267 | 267 |
| 268 // Return whether the event was cancelled or not to JS not that it | 268 // Return whether the event was cancelled or not to JS not that it |
| 269 // might have actually been default handled; so check only against | 269 // might have actually been default handled; so check only against |
| 270 // CanceledByEventHandler. | 270 // CanceledByEventHandler. |
| 271 return dispatchEventInternal(event) != DispatchEventResult::CanceledByEventH
andler; | 271 return dispatchEventInternal(event) != DispatchEventResult::CanceledByEventH
andler; |
| 272 } | 272 } |
| 273 | 273 |
| 274 DispatchEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> eve
nt) | 274 DispatchEventResult EventTarget::dispatchEvent(RawPtr<Event> event) |
| 275 { | 275 { |
| 276 event->setTrusted(true); | 276 event->setTrusted(true); |
| 277 return dispatchEventInternal(event); | 277 return dispatchEventInternal(event); |
| 278 } | 278 } |
| 279 | 279 |
| 280 DispatchEventResult EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Ev
ent> event) | 280 DispatchEventResult EventTarget::dispatchEventInternal(RawPtr<Event> event) |
| 281 { | 281 { |
| 282 event->setTarget(this); | 282 event->setTarget(this); |
| 283 event->setCurrentTarget(this); | 283 event->setCurrentTarget(this); |
| 284 event->setEventPhase(Event::AT_TARGET); | 284 event->setEventPhase(Event::AT_TARGET); |
| 285 DispatchEventResult dispatchResult = fireEventListeners(event.get()); | 285 DispatchEventResult dispatchResult = fireEventListeners(event.get()); |
| 286 event->setEventPhase(0); | 286 event->setEventPhase(0); |
| 287 return dispatchResult; | 287 return dispatchResult; |
| 288 } | 288 } |
| 289 | 289 |
| 290 void EventTarget::uncaughtExceptionInEventHandler() | 290 void EventTarget::uncaughtExceptionInEventHandler() |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 event->setType(unprefixedTypeName); | 377 event->setType(unprefixedTypeName); |
| 378 } | 378 } |
| 379 | 379 |
| 380 Editor::countEvent(getExecutionContext(), event); | 380 Editor::countEvent(getExecutionContext(), event); |
| 381 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); | 381 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); |
| 382 return dispatchEventResult(*event); | 382 return dispatchEventResult(*event); |
| 383 } | 383 } |
| 384 | 384 |
| 385 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) | 385 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) |
| 386 { | 386 { |
| 387 RefPtrWillBeRawPtr<EventTarget> protect(this); | 387 RawPtr<EventTarget> protect(this); |
| 388 | 388 |
| 389 // Fire all listeners registered for this event. Don't fire listeners remove
d | 389 // Fire all listeners registered for this event. Don't fire listeners remove
d |
| 390 // during event dispatch. Also, don't fire event listeners added during even
t | 390 // during event dispatch. Also, don't fire event listeners added during even
t |
| 391 // dispatch. Conveniently, all new event listeners will be added after or at | 391 // dispatch. Conveniently, all new event listeners will be added after or at |
| 392 // index |size|, so iterating up to (but not including) |size| naturally exc
ludes | 392 // index |size|, so iterating up to (but not including) |size| naturally exc
ludes |
| 393 // new event listeners. | 393 // new event listeners. |
| 394 | 394 |
| 395 if (event->type() == EventTypeNames::beforeunload) { | 395 if (event->type() == EventTypeNames::beforeunload) { |
| 396 if (LocalDOMWindow* executingWindow = this->executingWindow()) { | 396 if (LocalDOMWindow* executingWindow = this->executingWindow()) { |
| 397 if (executingWindow->top()) | 397 if (executingWindow->top()) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 // they have one less listener to invoke. | 489 // they have one less listener to invoke. |
| 490 if (d->firingEventIterators) { | 490 if (d->firingEventIterators) { |
| 491 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 491 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
| 492 d->firingEventIterators->at(i).iterator = 0; | 492 d->firingEventIterators->at(i).iterator = 0; |
| 493 d->firingEventIterators->at(i).end = 0; | 493 d->firingEventIterators->at(i).end = 0; |
| 494 } | 494 } |
| 495 } | 495 } |
| 496 } | 496 } |
| 497 | 497 |
| 498 } // namespace blink | 498 } // namespace blink |
| OLD | NEW |