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 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 } | 589 } |
590 return false; | 590 return false; |
591 } | 591 } |
592 | 592 |
593 bool EventTarget::fireEventListeners(Event* event, | 593 bool EventTarget::fireEventListeners(Event* event, |
594 EventTargetData* d, | 594 EventTargetData* d, |
595 EventListenerVector& entry) { | 595 EventListenerVector& entry) { |
596 // Fire all listeners registered for this event. Don't fire listeners removed | 596 // Fire all listeners registered for this event. Don't fire listeners removed |
597 // during event dispatch. Also, don't fire event listeners added during event | 597 // during event dispatch. Also, don't fire event listeners added during event |
598 // dispatch. Conveniently, all new event listeners will be added after or at | 598 // dispatch. Conveniently, all new event listeners will be added after or at |
599 // index |size|, so iterating up to (but not including) |size| naturally exclu
des | 599 // index |size|, so iterating up to (but not including) |size| naturally |
600 // new event listeners. | 600 // excludes new event listeners. |
601 | 601 |
602 if (checkTypeThenUseCount(event, EventTypeNames::beforeunload, | 602 if (checkTypeThenUseCount(event, EventTypeNames::beforeunload, |
603 UseCounter::DocumentBeforeUnloadFired)) { | 603 UseCounter::DocumentBeforeUnloadFired)) { |
604 if (LocalDOMWindow* executingWindow = this->executingWindow()) { | 604 if (LocalDOMWindow* executingWindow = this->executingWindow()) { |
605 if (executingWindow != executingWindow->top()) | 605 if (executingWindow != executingWindow->top()) |
606 UseCounter::count(executingWindow->document(), | 606 UseCounter::count(executingWindow->document(), |
607 UseCounter::SubFrameBeforeUnloadFired); | 607 UseCounter::SubFrameBeforeUnloadFired); |
608 } | 608 } |
609 } else if (checkTypeThenUseCount(event, EventTypeNames::unload, | 609 } else if (checkTypeThenUseCount(event, EventTypeNames::unload, |
610 UseCounter::DocumentUnloadFired)) { | 610 UseCounter::DocumentUnloadFired)) { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 ++i; | 669 ++i; |
670 | 670 |
671 if (event->eventPhase() == Event::kCapturingPhase && | 671 if (event->eventPhase() == Event::kCapturingPhase && |
672 !registeredListener.capture()) | 672 !registeredListener.capture()) |
673 continue; | 673 continue; |
674 if (event->eventPhase() == Event::kBubblingPhase && | 674 if (event->eventPhase() == Event::kBubblingPhase && |
675 registeredListener.capture()) | 675 registeredListener.capture()) |
676 continue; | 676 continue; |
677 | 677 |
678 EventListener* listener = registeredListener.listener(); | 678 EventListener* listener = registeredListener.listener(); |
679 // The listener will be retained by Member<EventListener> in the registeredL
istener, | 679 // The listener will be retained by Member<EventListener> in the |
680 // i and size are updated with the firing event iterator | 680 // registeredListener, i and size are updated with the firing event iterator |
681 // in case the listener is removed from the listener vector below. | 681 // in case the listener is removed from the listener vector below. |
682 if (registeredListener.once()) | 682 if (registeredListener.once()) |
683 removeEventListener(event->type(), listener, | 683 removeEventListener(event->type(), listener, |
684 registeredListener.capture()); | 684 registeredListener.capture()); |
685 | 685 |
686 // If stopImmediatePropagation has been called, we just break out immediatel
y, without | 686 // If stopImmediatePropagation has been called, we just break out |
687 // handling any more events on this target. | 687 // immediately, without handling any more events on this target. |
688 if (event->immediatePropagationStopped()) | 688 if (event->immediatePropagationStopped()) |
689 break; | 689 break; |
690 | 690 |
691 event->setHandlingPassive(eventPassiveMode(registeredListener)); | 691 event->setHandlingPassive(eventPassiveMode(registeredListener)); |
692 bool passiveForced = registeredListener.passiveForcedForDocumentTarget(); | 692 bool passiveForced = registeredListener.passiveForcedForDocumentTarget(); |
693 | 693 |
694 InspectorInstrumentation::NativeBreakpoint nativeBreakpoint(context, this, | 694 InspectorInstrumentation::NativeBreakpoint nativeBreakpoint(context, this, |
695 event); | 695 event); |
696 | 696 |
697 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbling | 697 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbling |
698 // event listeners, even though that violates some versions of the DOM spec. | 698 // event listeners, even though that violates some versions of the DOM spec. |
699 listener->handleEvent(context, event); | 699 listener->handleEvent(context, event); |
700 firedListener = true; | 700 firedListener = true; |
701 | 701 |
702 // If we're about to report this event listener as blocking, make sure it wa
sn't | 702 // If we're about to report this event listener as blocking, make sure it |
703 // removed while handling the event. | 703 // wasn't removed while handling the event. |
704 if (shouldReportBlockedEvent && i > 0 && | 704 if (shouldReportBlockedEvent && i > 0 && |
705 entry[i - 1].listener() == listener && !entry[i - 1].passive() && | 705 entry[i - 1].listener() == listener && !entry[i - 1].passive() && |
706 !entry[i - 1].blockedEventWarningEmitted() && | 706 !entry[i - 1].blockedEventWarningEmitted() && |
707 !event->defaultPrevented()) { | 707 !event->defaultPrevented()) { |
708 reportBlockedEvent(context, event, &entry[i - 1], | 708 reportBlockedEvent(context, event, &entry[i - 1], |
709 now - event->platformTimeStamp()); | 709 now - event->platformTimeStamp()); |
710 } | 710 } |
711 | 711 |
712 if (passiveForced) { | 712 if (passiveForced) { |
713 DEFINE_STATIC_LOCAL(EnumerationHistogram, passiveForcedHistogram, | 713 DEFINE_STATIC_LOCAL(EnumerationHistogram, passiveForcedHistogram, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 // they have one less listener to invoke. | 759 // they have one less listener to invoke. |
760 if (d->firingEventIterators) { | 760 if (d->firingEventIterators) { |
761 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 761 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
762 d->firingEventIterators->at(i).iterator = 0; | 762 d->firingEventIterators->at(i).iterator = 0; |
763 d->firingEventIterators->at(i).end = 0; | 763 d->firingEventIterators->at(i).end = 0; |
764 } | 764 } |
765 } | 765 } |
766 } | 766 } |
767 | 767 |
768 } // namespace blink | 768 } // namespace blink |
OLD | NEW |