| 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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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(PassRefPtrWillBeRawPtr<Event> dispatc
hEvent, ExceptionState& exceptionState) |
| 253 { | 253 { |
| 254 RefPtrWillBeRawPtr<Event> event = dispatchEvent; |
| 254 if (event->type().isEmpty()) { | 255 if (event->type().isEmpty()) { |
| 255 exceptionState.throwDOMException(InvalidStateError, "The event provided
is uninitialized."); | 256 exceptionState.throwDOMException(InvalidStateError, "The event provided
is uninitialized."); |
| 256 return false; | 257 return false; |
| 257 } | 258 } |
| 258 if (event->isBeingDispatched()) { | 259 if (event->isBeingDispatched()) { |
| 259 exceptionState.throwDOMException(InvalidStateError, "The event is alread
y being dispatched."); | 260 exceptionState.throwDOMException(InvalidStateError, "The event is alread
y being dispatched."); |
| 260 return false; | 261 return false; |
| 261 } | 262 } |
| 262 | 263 |
| 263 if (!executionContext()) | 264 if (!executionContext()) |
| 264 return false; | 265 return false; |
| 265 | 266 |
| 266 event->setTrusted(false); | 267 event->setTrusted(false); |
| 267 return dispatchEventInternal(event); | 268 |
| 269 // Return whether the event was cancelled or not to JS not that it |
| 270 // might have actually been handled; so throw away the result of |
| 271 // dispatchEventInternal. |
| 272 dispatchEventInternal(event); |
| 273 return !event->defaultPrevented(); |
| 268 } | 274 } |
| 269 | 275 |
| 270 bool EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) | 276 DispatchEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> eve
nt) |
| 271 { | 277 { |
| 272 event->setTrusted(true); | 278 event->setTrusted(true); |
| 273 return dispatchEventInternal(event); | 279 return dispatchEventInternal(event); |
| 274 } | 280 } |
| 275 | 281 |
| 276 bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) | 282 DispatchEventResult EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Ev
ent> event) |
| 277 { | 283 { |
| 278 event->setTarget(this); | 284 event->setTarget(this); |
| 279 event->setCurrentTarget(this); | 285 event->setCurrentTarget(this); |
| 280 event->setEventPhase(Event::AT_TARGET); | 286 event->setEventPhase(Event::AT_TARGET); |
| 281 bool defaultWasNotPrevented = fireEventListeners(event.get()); | 287 DispatchEventResult result = fireEventListeners(event.get()); |
| 282 event->setEventPhase(0); | 288 event->setEventPhase(0); |
| 283 return defaultWasNotPrevented; | 289 return result; |
| 284 } | 290 } |
| 285 | 291 |
| 286 void EventTarget::uncaughtExceptionInEventHandler() | 292 void EventTarget::uncaughtExceptionInEventHandler() |
| 287 { | 293 { |
| 288 } | 294 } |
| 289 | 295 |
| 290 static const AtomicString& legacyType(const Event* event) | 296 static const AtomicString& legacyType(const Event* event) |
| 291 { | 297 { |
| 292 if (event->type() == EventTypeNames::transitionend) | 298 if (event->type() == EventTypeNames::transitionend) |
| 293 return EventTypeNames::webkitTransitionEnd; | 299 return EventTypeNames::webkitTransitionEnd; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 if (listenersVector) | 347 if (listenersVector) |
| 342 UseCounter::count(executingWindow->document(), prefixedAndUnpref
ixedFeature); | 348 UseCounter::count(executingWindow->document(), prefixedAndUnpref
ixedFeature); |
| 343 else | 349 else |
| 344 UseCounter::count(executingWindow->document(), prefixedFeature); | 350 UseCounter::count(executingWindow->document(), prefixedFeature); |
| 345 } else if (listenersVector) { | 351 } else if (listenersVector) { |
| 346 UseCounter::count(executingWindow->document(), unprefixedFeature); | 352 UseCounter::count(executingWindow->document(), unprefixedFeature); |
| 347 } | 353 } |
| 348 } | 354 } |
| 349 } | 355 } |
| 350 | 356 |
| 351 bool EventTarget::fireEventListeners(Event* event) | 357 DispatchEventResult EventTarget::fireEventListeners(Event* event) |
| 352 { | 358 { |
| 353 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); | 359 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); |
| 354 ASSERT(event && !event->type().isEmpty()); | 360 ASSERT(event && !event->type().isEmpty()); |
| 355 | 361 |
| 356 EventTargetData* d = eventTargetData(); | 362 EventTargetData* d = eventTargetData(); |
| 357 if (!d) | 363 if (!d) |
| 358 return true; | 364 return DispatchEventResult::NotCanceled; |
| 359 | 365 |
| 360 EventListenerVector* legacyListenersVector = nullptr; | 366 EventListenerVector* legacyListenersVector = nullptr; |
| 361 AtomicString legacyTypeName = legacyType(event); | 367 AtomicString legacyTypeName = legacyType(event); |
| 362 if (!legacyTypeName.isEmpty()) | 368 if (!legacyTypeName.isEmpty()) |
| 363 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); | 369 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); |
| 364 | 370 |
| 365 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type(
)); | 371 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type(
)); |
| 366 | 372 |
| 367 if (listenersVector) { | 373 if (listenersVector) { |
| 368 fireEventListeners(event, d, *listenersVector); | 374 fireEventListeners(event, d, *listenersVector); |
| 369 } else if (legacyListenersVector) { | 375 } else if (legacyListenersVector) { |
| 370 AtomicString unprefixedTypeName = event->type(); | 376 AtomicString unprefixedTypeName = event->type(); |
| 371 event->setType(legacyTypeName); | 377 event->setType(legacyTypeName); |
| 372 fireEventListeners(event, d, *legacyListenersVector); | 378 fireEventListeners(event, d, *legacyListenersVector); |
| 373 event->setType(unprefixedTypeName); | 379 event->setType(unprefixedTypeName); |
| 374 } | 380 } |
| 375 | 381 |
| 376 Editor::countEvent(executionContext(), event); | 382 Editor::countEvent(executionContext(), event); |
| 377 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); | 383 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); |
| 378 return !event->defaultPrevented(); | 384 return event->eventResult(); |
| 379 } | 385 } |
| 380 | 386 |
| 381 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) | 387 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) |
| 382 { | 388 { |
| 383 RefPtrWillBeRawPtr<EventTarget> protect(this); | 389 RefPtrWillBeRawPtr<EventTarget> protect(this); |
| 384 | 390 |
| 385 // Fire all listeners registered for this event. Don't fire listeners remove
d | 391 // Fire all listeners registered for this event. Don't fire listeners remove
d |
| 386 // during event dispatch. Also, don't fire event listeners added during even
t | 392 // during event dispatch. Also, don't fire event listeners added during even
t |
| 387 // dispatch. Conveniently, all new event listeners will be added after or at | 393 // dispatch. Conveniently, all new event listeners will be added after or at |
| 388 // index |size|, so iterating up to (but not including) |size| naturally exc
ludes | 394 // index |size|, so iterating up to (but not including) |size| naturally exc
ludes |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 // they have one less listener to invoke. | 482 // they have one less listener to invoke. |
| 477 if (d->firingEventIterators) { | 483 if (d->firingEventIterators) { |
| 478 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 484 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
| 479 d->firingEventIterators->at(i).iterator = 0; | 485 d->firingEventIterators->at(i).iterator = 0; |
| 480 d->firingEventIterators->at(i).end = 0; | 486 d->firingEventIterators->at(i).end = 0; |
| 481 } | 487 } |
| 482 } | 488 } |
| 483 } | 489 } |
| 484 | 490 |
| 485 } // namespace blink | 491 } // namespace blink |
| OLD | NEW |