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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 | 58 |
59 namespace blink { | 59 namespace blink { |
60 namespace { | 60 namespace { |
61 | 61 |
62 enum PassiveForcedListenerResultType { | 62 enum PassiveForcedListenerResultType { |
63 PreventDefaultNotCalled, | 63 PreventDefaultNotCalled, |
64 DocumentLevelTouchPreventDefaultCalled, | 64 DocumentLevelTouchPreventDefaultCalled, |
65 PassiveForcedListenerResultTypeMax | 65 PassiveForcedListenerResultTypeMax |
66 }; | 66 }; |
67 | 67 |
| 68 Event::PassiveMode eventPassiveMode(const RegisteredEventListener& eventListener
) |
| 69 { |
| 70 if (!eventListener.passive()) |
| 71 return Event::PassiveMode::NotPassive; |
| 72 if (eventListener.passiveForcedForDocumentTarget()) |
| 73 return Event::PassiveMode::PassiveForcedDocumentLevel; |
| 74 return Event::PassiveMode::Passive; |
| 75 } |
| 76 |
68 Settings* windowSettings(LocalDOMWindow* executingWindow) | 77 Settings* windowSettings(LocalDOMWindow* executingWindow) |
69 { | 78 { |
70 if (executingWindow) { | 79 if (executingWindow) { |
71 if (LocalFrame* frame = executingWindow->frame()) { | 80 if (LocalFrame* frame = executingWindow->frame()) { |
72 return frame->settings(); | 81 return frame->settings(); |
73 } | 82 } |
74 } | 83 } |
75 return nullptr; | 84 return nullptr; |
76 } | 85 } |
77 | 86 |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 if (event->eventPhase() == Event::kCapturingPhase && !registeredListener
.capture()) | 629 if (event->eventPhase() == Event::kCapturingPhase && !registeredListener
.capture()) |
621 continue; | 630 continue; |
622 if (event->eventPhase() == Event::kBubblingPhase && registeredListener.c
apture()) | 631 if (event->eventPhase() == Event::kBubblingPhase && registeredListener.c
apture()) |
623 continue; | 632 continue; |
624 | 633 |
625 // If stopImmediatePropagation has been called, we just break out immedi
ately, without | 634 // If stopImmediatePropagation has been called, we just break out immedi
ately, without |
626 // handling any more events on this target. | 635 // handling any more events on this target. |
627 if (event->immediatePropagationStopped()) | 636 if (event->immediatePropagationStopped()) |
628 break; | 637 break; |
629 | 638 |
630 event->setHandlingPassive(registeredListener.passive()); | 639 event->setHandlingPassive(eventPassiveMode(registeredListener)); |
631 bool passiveForced = registeredListener.passiveForcedForDocumentTarget()
; | 640 bool passiveForced = registeredListener.passiveForcedForDocumentTarget()
; |
632 | 641 |
633 InspectorInstrumentation::NativeBreakpoint nativeBreakpoint(context, thi
s, event); | 642 InspectorInstrumentation::NativeBreakpoint nativeBreakpoint(context, thi
s, event); |
634 | 643 |
635 EventListener* listener = registeredListener.listener(); | 644 EventListener* listener = registeredListener.listener(); |
636 | 645 |
637 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli
ng | 646 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli
ng |
638 // event listeners, even though that violates some versions of the DOM s
pec. | 647 // event listeners, even though that violates some versions of the DOM s
pec. |
639 listener->handleEvent(context, event); | 648 listener->handleEvent(context, event); |
640 firedListener = true; | 649 firedListener = true; |
641 | 650 |
642 // If we're about to report this event listener as blocking, make sure i
t wasn't | 651 // If we're about to report this event listener as blocking, make sure i
t wasn't |
643 // removed while handling the event. | 652 // removed while handling the event. |
644 if (shouldReportBlockedEvent && i > 0 && entry[i - 1].listener() == list
ener | 653 if (shouldReportBlockedEvent && i > 0 && entry[i - 1].listener() == list
ener |
645 && !entry[i - 1].passive() && !entry[i - 1].blockedEventWarningEmitt
ed() && !event->defaultPrevented()) { | 654 && !entry[i - 1].passive() && !entry[i - 1].blockedEventWarningEmitt
ed() && !event->defaultPrevented()) { |
646 reportBlockedEvent(context, event, &entry[i - 1], now - event->platf
ormTimeStamp()); | 655 reportBlockedEvent(context, event, &entry[i - 1], now - event->platf
ormTimeStamp()); |
647 } | 656 } |
648 | 657 |
649 if (passiveForced) { | 658 if (passiveForced) { |
650 DEFINE_STATIC_LOCAL(EnumerationHistogram, passiveForcedHistogram, ("
Event.PassiveForcedEventDispatchCancelled", PassiveForcedListenerResultTypeMax))
; | 659 DEFINE_STATIC_LOCAL(EnumerationHistogram, passiveForcedHistogram, ("
Event.PassiveForcedEventDispatchCancelled", PassiveForcedListenerResultTypeMax))
; |
651 PassiveForcedListenerResultType breakageType = PreventDefaultNotCall
ed; | 660 PassiveForcedListenerResultType breakageType = PreventDefaultNotCall
ed; |
652 if (event->preventDefaultCalledDuringPassive()) | 661 if (event->preventDefaultCalledDuringPassive()) |
653 breakageType = DocumentLevelTouchPreventDefaultCalled; | 662 breakageType = DocumentLevelTouchPreventDefaultCalled; |
654 | 663 |
655 passiveForcedHistogram.count(breakageType); | 664 passiveForcedHistogram.count(breakageType); |
656 } | 665 } |
657 | 666 |
658 event->setHandlingPassive(false); | 667 event->setHandlingPassive(Event::PassiveMode::NotPassive); |
659 | 668 |
660 CHECK_LE(i, size); | 669 CHECK_LE(i, size); |
661 } | 670 } |
662 d->firingEventIterators->removeLast(); | 671 d->firingEventIterators->removeLast(); |
663 return firedListener; | 672 return firedListener; |
664 } | 673 } |
665 | 674 |
666 DispatchEventResult EventTarget::dispatchEventResult(const Event& event) | 675 DispatchEventResult EventTarget::dispatchEventResult(const Event& event) |
667 { | 676 { |
668 if (event.defaultPrevented()) | 677 if (event.defaultPrevented()) |
(...skipping 28 matching lines...) Expand all Loading... |
697 // they have one less listener to invoke. | 706 // they have one less listener to invoke. |
698 if (d->firingEventIterators) { | 707 if (d->firingEventIterators) { |
699 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 708 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
700 d->firingEventIterators->at(i).iterator = 0; | 709 d->firingEventIterators->at(i).iterator = 0; |
701 d->firingEventIterators->at(i).end = 0; | 710 d->firingEventIterators->at(i).end = 0; |
702 } | 711 } |
703 } | 712 } |
704 } | 713 } |
705 | 714 |
706 } // namespace blink | 715 } // namespace blink |
OLD | NEW |