Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1022)

Side by Side Diff: Source/core/dom/Node.cpp

Issue 1238083002: Oilpan: Move the EventListener hierarchy to Oilpan's heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698