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, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 1757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 document().addMutationObserverTypes(registry->at(i)->mutationTypes()
); | 1768 document().addMutationObserverTypes(registry->at(i)->mutationTypes()
); |
1769 } | 1769 } |
1770 } | 1770 } |
1771 | 1771 |
1772 if (transientMutationObserverRegistry()) { | 1772 if (transientMutationObserverRegistry()) { |
1773 for (MutationObserverRegistration* registration : *transientMutationObse
rverRegistry()) | 1773 for (MutationObserverRegistration* registration : *transientMutationObse
rverRegistry()) |
1774 document().addMutationObserverTypes(registration->mutationTypes()); | 1774 document().addMutationObserverTypes(registration->mutationTypes()); |
1775 } | 1775 } |
1776 } | 1776 } |
1777 | 1777 |
1778 static inline bool tryAddEventListener(Node* targetNode, const AtomicString& eve
ntType, PassRefPtr<EventListener> listener, bool useCapture) | 1778 static inline bool tryAddEventListener(Node* targetNode, const AtomicString& eve
ntType, PassRefPtrWillBeRawPtr<EventListener> listener, bool useCapture) |
1779 { | 1779 { |
1780 if (!targetNode->EventTarget::addEventListener(eventType, listener, useCaptu
re)) | 1780 if (!targetNode->EventTarget::addEventListener(eventType, listener, useCaptu
re)) |
1781 return false; | 1781 return false; |
1782 | 1782 |
1783 Document& document = targetNode->document(); | 1783 Document& document = targetNode->document(); |
1784 document.addListenerTypeIfNeeded(eventType); | 1784 document.addListenerTypeIfNeeded(eventType); |
1785 if (document.frameHost()) | 1785 if (document.frameHost()) |
1786 document.frameHost()->eventHandlerRegistry().didAddEventHandler(*targetN
ode, eventType); | 1786 document.frameHost()->eventHandlerRegistry().didAddEventHandler(*targetN
ode, eventType); |
1787 | 1787 |
1788 return true; | 1788 return true; |
1789 } | 1789 } |
1790 | 1790 |
1791 bool Node::addEventListener(const AtomicString& eventType, PassRefPtr<EventListe
ner> listener, bool useCapture) | 1791 bool Node::addEventListener(const AtomicString& eventType, PassRefPtrWillBeRawPt
r<EventListener> listener, bool useCapture) |
1792 { | 1792 { |
1793 return tryAddEventListener(this, eventType, listener, useCapture); | 1793 return tryAddEventListener(this, eventType, listener, useCapture); |
1794 } | 1794 } |
1795 | 1795 |
1796 static inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&
eventType, PassRefPtr<EventListener> listener, bool useCapture) | 1796 static inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&
eventType, PassRefPtrWillBeRawPtr<EventListener> listener, bool useCapture) |
1797 { | 1797 { |
1798 if (!targetNode->EventTarget::removeEventListener(eventType, listener, useCa
pture)) | 1798 if (!targetNode->EventTarget::removeEventListener(eventType, listener, useCa
pture)) |
1799 return false; | 1799 return false; |
1800 | 1800 |
1801 // FIXME: Notify Document that the listener has vanished. We need to keep tr
ack of a number of | 1801 // FIXME: Notify Document that the listener has vanished. We need to keep tr
ack of a number of |
1802 // listeners for each type, not just a bool - see https://bugs.webkit.org/sh
ow_bug.cgi?id=33861 | 1802 // listeners for each type, not just a bool - see https://bugs.webkit.org/sh
ow_bug.cgi?id=33861 |
1803 Document& document = targetNode->document(); | 1803 Document& document = targetNode->document(); |
1804 if (document.frameHost()) | 1804 if (document.frameHost()) |
1805 document.frameHost()->eventHandlerRegistry().didRemoveEventHandler(*targ
etNode, eventType); | 1805 document.frameHost()->eventHandlerRegistry().didRemoveEventHandler(*targ
etNode, eventType); |
1806 | 1806 |
1807 return true; | 1807 return true; |
1808 } | 1808 } |
1809 | 1809 |
1810 bool Node::removeEventListener(const AtomicString& eventType, PassRefPtr<EventLi
stener> listener, bool useCapture) | 1810 bool Node::removeEventListener(const AtomicString& eventType, PassRefPtrWillBeRa
wPtr<EventListener> listener, bool useCapture) |
1811 { | 1811 { |
1812 return tryRemoveEventListener(this, eventType, listener, useCapture); | 1812 return tryRemoveEventListener(this, eventType, listener, useCapture); |
1813 } | 1813 } |
1814 | 1814 |
1815 void Node::removeAllEventListeners() | 1815 void Node::removeAllEventListeners() |
1816 { | 1816 { |
1817 if (hasEventListeners() && document().frameHost()) | 1817 if (hasEventListeners() && document().frameHost()) |
1818 document().frameHost()->eventHandlerRegistry().didRemoveAllEventHandlers
(*this); | 1818 document().frameHost()->eventHandlerRegistry().didRemoveAllEventHandlers
(*this); |
1819 EventTarget::removeAllEventListeners(); | 1819 EventTarget::removeAllEventListeners(); |
1820 } | 1820 } |
1821 | 1821 |
1822 void Node::removeAllEventListenersRecursively() | 1822 void Node::removeAllEventListenersRecursively() |
1823 { | 1823 { |
1824 for (Node& node : NodeTraversal::startsAt(this)) { | 1824 for (Node& node : NodeTraversal::startsAt(this)) { |
1825 node.removeAllEventListeners(); | 1825 node.removeAllEventListeners(); |
1826 for (ShadowRoot* root = node.youngestShadowRoot(); root; root = root->ol
derShadowRoot()) | 1826 for (ShadowRoot* root = node.youngestShadowRoot(); root; root = root->ol
derShadowRoot()) |
1827 root->removeAllEventListenersRecursively(); | 1827 root->removeAllEventListenersRecursively(); |
1828 } | 1828 } |
1829 } | 1829 } |
1830 | 1830 |
1831 using EventTargetDataMap = WillBeHeapHashMap<RawPtrWillBeWeakMember<Node>, OwnPt
r<EventTargetData>>; | 1831 using EventTargetDataMap = WillBeHeapHashMap<RawPtrWillBeWeakMember<Node>, OwnPt
rWillBeMember<EventTargetData>>; |
1832 static EventTargetDataMap& eventTargetDataMap() | 1832 static EventTargetDataMap& eventTargetDataMap() |
1833 { | 1833 { |
1834 DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<EventTargetDataMap>, map, (adoptP
trWillBeNoop(new EventTargetDataMap()))); | 1834 DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<EventTargetDataMap>, map, (adoptP
trWillBeNoop(new EventTargetDataMap()))); |
1835 return *map; | 1835 return *map; |
1836 } | 1836 } |
1837 | 1837 |
1838 EventTargetData* Node::eventTargetData() | 1838 EventTargetData* Node::eventTargetData() |
1839 { | 1839 { |
1840 return hasEventTargetData() ? eventTargetDataMap().get(this) : nullptr; | 1840 return hasEventTargetData() ? eventTargetDataMap().get(this) : nullptr; |
1841 } | 1841 } |
1842 | 1842 |
1843 EventTargetData& Node::ensureEventTargetData() | 1843 EventTargetData& Node::ensureEventTargetData() |
1844 { | 1844 { |
1845 if (hasEventTargetData()) | 1845 if (hasEventTargetData()) |
1846 return *eventTargetDataMap().get(this); | 1846 return *eventTargetDataMap().get(this); |
1847 ASSERT(!eventTargetDataMap().contains(this)); | 1847 ASSERT(!eventTargetDataMap().contains(this)); |
1848 setHasEventTargetData(true); | 1848 setHasEventTargetData(true); |
1849 EventTargetData* data = new EventTargetData; | 1849 OwnPtrWillBeRawPtr<EventTargetData> data = adoptPtrWillBeNoop(new EventTarge
tData); |
1850 eventTargetDataMap().set(this, adoptPtr(data)); | 1850 EventTargetData* dataPtr = data.get(); |
1851 return *data; | 1851 eventTargetDataMap().set(this, data.release()); |
| 1852 return *dataPtr; |
1852 } | 1853 } |
1853 | 1854 |
1854 #if !ENABLE(OILPAN) | 1855 #if !ENABLE(OILPAN) |
1855 void Node::clearEventTargetData() | 1856 void Node::clearEventTargetData() |
1856 { | 1857 { |
1857 eventTargetDataMap().remove(this); | 1858 eventTargetDataMap().remove(this); |
1858 #if ENABLE(ASSERT) | 1859 #if ENABLE(ASSERT) |
1859 setHasEventTargetData(false); | 1860 setHasEventTargetData(false); |
1860 #endif | 1861 #endif |
1861 } | 1862 } |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2391 | 2392 |
2392 void showNodePath(const blink::Node* node) | 2393 void showNodePath(const blink::Node* node) |
2393 { | 2394 { |
2394 if (node) | 2395 if (node) |
2395 node->showNodePathForThis(); | 2396 node->showNodePathForThis(); |
2396 else | 2397 else |
2397 fprintf(stderr, "Cannot showNodePath for (nil)\n"); | 2398 fprintf(stderr, "Cannot showNodePath for (nil)\n"); |
2398 } | 2399 } |
2399 | 2400 |
2400 #endif | 2401 #endif |
OLD | NEW |