| 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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 (!executionContext()) | 263 if (!executionContext()) |
| 264 return false; | 264 return false; |
| 265 | 265 |
| 266 event->setTrusted(false); | 266 event->setTrusted(false); |
| 267 return dispatchEventInternal(event); | 267 |
| 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 |
| 270 // CanceledByEventHandler. |
| 271 return dispatchEventInternal(event) != DispatchEventResult::CanceledByEventH
andler; |
| 268 } | 272 } |
| 269 | 273 |
| 270 bool EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) | 274 DispatchEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> eve
nt) |
| 271 { | 275 { |
| 272 event->setTrusted(true); | 276 event->setTrusted(true); |
| 273 return dispatchEventInternal(event); | 277 return dispatchEventInternal(event); |
| 274 } | 278 } |
| 275 | 279 |
| 276 bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) | 280 DispatchEventResult EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Ev
ent> event) |
| 277 { | 281 { |
| 278 event->setTarget(this); | 282 event->setTarget(this); |
| 279 event->setCurrentTarget(this); | 283 event->setCurrentTarget(this); |
| 280 event->setEventPhase(Event::AT_TARGET); | 284 event->setEventPhase(Event::AT_TARGET); |
| 281 bool defaultWasNotPrevented = fireEventListeners(event.get()); | 285 DispatchEventResult dispatchResult = fireEventListeners(event.get()); |
| 282 event->setEventPhase(0); | 286 event->setEventPhase(0); |
| 283 return defaultWasNotPrevented; | 287 return dispatchResult; |
| 284 } | 288 } |
| 285 | 289 |
| 286 void EventTarget::uncaughtExceptionInEventHandler() | 290 void EventTarget::uncaughtExceptionInEventHandler() |
| 287 { | 291 { |
| 288 } | 292 } |
| 289 | 293 |
| 290 static const AtomicString& legacyType(const Event* event) | 294 static const AtomicString& legacyType(const Event* event) |
| 291 { | 295 { |
| 292 if (event->type() == EventTypeNames::transitionend) | 296 if (event->type() == EventTypeNames::transitionend) |
| 293 return EventTypeNames::webkitTransitionEnd; | 297 return EventTypeNames::webkitTransitionEnd; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 if (listenersVector) | 345 if (listenersVector) |
| 342 UseCounter::count(executingWindow->document(), prefixedAndUnpref
ixedFeature); | 346 UseCounter::count(executingWindow->document(), prefixedAndUnpref
ixedFeature); |
| 343 else | 347 else |
| 344 UseCounter::count(executingWindow->document(), prefixedFeature); | 348 UseCounter::count(executingWindow->document(), prefixedFeature); |
| 345 } else if (listenersVector) { | 349 } else if (listenersVector) { |
| 346 UseCounter::count(executingWindow->document(), unprefixedFeature); | 350 UseCounter::count(executingWindow->document(), unprefixedFeature); |
| 347 } | 351 } |
| 348 } | 352 } |
| 349 } | 353 } |
| 350 | 354 |
| 351 bool EventTarget::fireEventListeners(Event* event) | 355 DispatchEventResult EventTarget::fireEventListeners(Event* event) |
| 352 { | 356 { |
| 353 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); | 357 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); |
| 354 ASSERT(event && !event->type().isEmpty()); | 358 ASSERT(event && !event->type().isEmpty()); |
| 355 | 359 |
| 356 EventTargetData* d = eventTargetData(); | 360 EventTargetData* d = eventTargetData(); |
| 357 if (!d) | 361 if (!d) |
| 358 return true; | 362 return DispatchEventResult::NotCanceled; |
| 359 | 363 |
| 360 EventListenerVector* legacyListenersVector = nullptr; | 364 EventListenerVector* legacyListenersVector = nullptr; |
| 361 AtomicString legacyTypeName = legacyType(event); | 365 AtomicString legacyTypeName = legacyType(event); |
| 362 if (!legacyTypeName.isEmpty()) | 366 if (!legacyTypeName.isEmpty()) |
| 363 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); | 367 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); |
| 364 | 368 |
| 365 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type(
)); | 369 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type(
)); |
| 366 | 370 |
| 367 if (listenersVector) { | 371 if (listenersVector) { |
| 368 fireEventListeners(event, d, *listenersVector); | 372 fireEventListeners(event, d, *listenersVector); |
| 369 } else if (legacyListenersVector) { | 373 } else if (legacyListenersVector) { |
| 370 AtomicString unprefixedTypeName = event->type(); | 374 AtomicString unprefixedTypeName = event->type(); |
| 371 event->setType(legacyTypeName); | 375 event->setType(legacyTypeName); |
| 372 fireEventListeners(event, d, *legacyListenersVector); | 376 fireEventListeners(event, d, *legacyListenersVector); |
| 373 event->setType(unprefixedTypeName); | 377 event->setType(unprefixedTypeName); |
| 374 } | 378 } |
| 375 | 379 |
| 376 Editor::countEvent(executionContext(), event); | 380 Editor::countEvent(executionContext(), event); |
| 377 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); | 381 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); |
| 378 return !event->defaultPrevented(); | 382 return dispatchEventResult(*event); |
| 379 } | 383 } |
| 380 | 384 |
| 381 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) | 385 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
enerVector& entry) |
| 382 { | 386 { |
| 383 RefPtrWillBeRawPtr<EventTarget> protect(this); | 387 RefPtrWillBeRawPtr<EventTarget> protect(this); |
| 384 | 388 |
| 385 // 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 |
| 386 // 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 |
| 387 // 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 |
| 388 // 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 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 registeredListener.listener->handleEvent(context, event); | 448 registeredListener.listener->handleEvent(context, event); |
| 445 event->setHandlingPassive(false); | 449 event->setHandlingPassive(false); |
| 446 | 450 |
| 447 RELEASE_ASSERT(i <= size); | 451 RELEASE_ASSERT(i <= size); |
| 448 | 452 |
| 449 InspectorInstrumentation::didHandleEvent(cookie); | 453 InspectorInstrumentation::didHandleEvent(cookie); |
| 450 } | 454 } |
| 451 d->firingEventIterators->removeLast(); | 455 d->firingEventIterators->removeLast(); |
| 452 } | 456 } |
| 453 | 457 |
| 458 DispatchEventResult EventTarget::dispatchEventResult(const Event& event) |
| 459 { |
| 460 if (event.defaultPrevented()) |
| 461 return DispatchEventResult::CanceledByEventHandler; |
| 462 if (event.defaultHandled()) |
| 463 return DispatchEventResult::CanceledByDefaultEventHandler; |
| 464 return DispatchEventResult::NotCanceled; |
| 465 } |
| 466 |
| 454 EventListenerVector* EventTarget::getEventListeners(const AtomicString& eventTyp
e) | 467 EventListenerVector* EventTarget::getEventListeners(const AtomicString& eventTyp
e) |
| 455 { | 468 { |
| 456 EventTargetData* data = eventTargetData(); | 469 EventTargetData* data = eventTargetData(); |
| 457 if (!data) | 470 if (!data) |
| 458 return nullptr; | 471 return nullptr; |
| 459 return data->eventListenerMap.find(eventType); | 472 return data->eventListenerMap.find(eventType); |
| 460 } | 473 } |
| 461 | 474 |
| 462 Vector<AtomicString> EventTarget::eventTypes() | 475 Vector<AtomicString> EventTarget::eventTypes() |
| 463 { | 476 { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 476 // they have one less listener to invoke. | 489 // they have one less listener to invoke. |
| 477 if (d->firingEventIterators) { | 490 if (d->firingEventIterators) { |
| 478 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 491 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
| 479 d->firingEventIterators->at(i).iterator = 0; | 492 d->firingEventIterators->at(i).iterator = 0; |
| 480 d->firingEventIterators->at(i).end = 0; | 493 d->firingEventIterators->at(i).end = 0; |
| 481 } | 494 } |
| 482 } | 495 } |
| 483 } | 496 } |
| 484 | 497 |
| 485 } // namespace blink | 498 } // namespace blink |
| OLD | NEW |