OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> |
3 * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2008 Apple Inc. All rights reserved. | 4 * Copyright (C) 2008 Apple Inc. All rights reserved. |
5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> | 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> |
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> | 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 // Remove event listener from regular DOM element | 836 // Remove event listener from regular DOM element |
837 if (!Node::removeEventListener(eventType, listener, useCapture)) | 837 if (!Node::removeEventListener(eventType, listener, useCapture)) |
838 return false; | 838 return false; |
839 | 839 |
840 // Remove event listener from all shadow tree DOM element instances | 840 // Remove event listener from all shadow tree DOM element instances |
841 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator
end = instances.end(); | 841 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator
end = instances.end(); |
842 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator
it = instances.begin(); it != end; ++it) { | 842 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator
it = instances.begin(); it != end; ++it) { |
843 SVGElement* shadowTreeElement = *it; | 843 SVGElement* shadowTreeElement = *it; |
844 ASSERT(shadowTreeElement); | 844 ASSERT(shadowTreeElement); |
845 | 845 |
846 if (shadowTreeElement->Node::removeEventListener(eventType, listener, us
eCapture)) | 846 shadowTreeElement->Node::removeEventListener(eventType, listener, useCap
ture); |
847 continue; | |
848 | |
849 // This case can only be hit for event listeners created from markup | |
850 ASSERT(listener->wasCreatedFromMarkup()); | |
851 | |
852 // If the event listener 'listener' has been created from markup and has
been fired before | |
853 // then JSLazyEventListener::parseCode() has been called and m_jsFunctio
n of that listener | |
854 // has been created (read: it's not 0 anymore). During shadow tree creat
ion, the event | |
855 // listener DOM attribute has been cloned, and another event listener ha
s been setup in | |
856 // the shadow tree. If that event listener has not been used yet, m_jsFu
nction is still 0, | |
857 // and tryRemoveEventListener() above will fail. Work around that very s
eldom problem. | |
858 EventTargetData* data = shadowTreeElement->eventTargetData(); | |
859 ASSERT(data); | |
860 | |
861 data->eventListenerMap.removeFirstEventListenerCreatedFromMarkup(eventTy
pe); | |
862 } | 847 } |
863 | 848 |
864 return true; | 849 return true; |
865 } | 850 } |
866 | 851 |
867 static bool hasLoadListener(Element* element) | 852 static bool hasLoadListener(Element* element) |
868 { | 853 { |
869 if (element->hasEventListeners(EventTypeNames::load)) | 854 if (element->hasEventListeners(EventTypeNames::load)) |
870 return true; | 855 return true; |
871 | 856 |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 #endif | 1170 #endif |
1186 | 1171 |
1187 void SVGElement::trace(Visitor* visitor) | 1172 void SVGElement::trace(Visitor* visitor) |
1188 { | 1173 { |
1189 visitor->trace(m_elementsWithRelativeLengths); | 1174 visitor->trace(m_elementsWithRelativeLengths); |
1190 visitor->trace(m_SVGRareData); | 1175 visitor->trace(m_SVGRareData); |
1191 Element::trace(visitor); | 1176 Element::trace(visitor); |
1192 } | 1177 } |
1193 | 1178 |
1194 } | 1179 } |
OLD | NEW |