| 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 454 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 465     // This function is provided for use by SVGAnimatedProperty to avoid | 465     // This function is provided for use by SVGAnimatedProperty to avoid | 
| 466     // global inclusion of core/dom/Document.h in SVG code. | 466     // global inclusion of core/dom/Document.h in SVG code. | 
| 467     return document().accessSVGExtensions(); | 467     return document().accessSVGExtensions(); | 
| 468 } | 468 } | 
| 469 | 469 | 
| 470 void SVGElement::mapInstanceToElement(SVGElement* instance) | 470 void SVGElement::mapInstanceToElement(SVGElement* instance) | 
| 471 { | 471 { | 
| 472     ASSERT(instance); | 472     ASSERT(instance); | 
| 473     ASSERT(instance->inUseShadowTree()); | 473     ASSERT(instance->inUseShadowTree()); | 
| 474 | 474 | 
| 475     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = ensureSV
      GRareData()->elementInstances(); | 475     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& instances = ensureSVG
      RareData()->elementInstances(); | 
| 476     ASSERT(!instances.contains(instance)); | 476     ASSERT(!instances.contains(instance)); | 
| 477 | 477 | 
| 478     instances.add(instance); | 478     instances.add(instance); | 
| 479 } | 479 } | 
| 480 | 480 | 
| 481 void SVGElement::removeInstanceMapping(SVGElement* instance) | 481 void SVGElement::removeInstanceMapping(SVGElement* instance) | 
| 482 { | 482 { | 
| 483     ASSERT(instance); | 483     ASSERT(instance); | 
| 484     ASSERT(instance->inUseShadowTree()); | 484     ASSERT(instance->inUseShadowTree()); | 
| 485 | 485 | 
| 486     if (!hasSVGRareData()) | 486     if (!hasSVGRareData()) | 
| 487         return; | 487         return; | 
| 488 | 488 | 
| 489     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = svgRareD
      ata()->elementInstances(); | 489     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& instances = svgRareDa
      ta()->elementInstances(); | 
| 490 | 490 | 
| 491     instances.remove(instance); | 491     instances.remove(instance); | 
| 492 } | 492 } | 
| 493 | 493 | 
| 494 static WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& emptyInstances() | 494 static WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& emptyInstances() | 
| 495 { | 495 { | 
| 496     DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapHashSet<RawPtrWillBeWea
      kMember<SVGElement> > >, emptyInstances, (adoptPtrWillBeNoop(new WillBeHeapHashS
      et<RawPtrWillBeWeakMember<SVGElement> >()))); | 496     DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapHashSet<RawPtrWillBeWea
      kMember<SVGElement>>>, emptyInstances, (adoptPtrWillBeNoop(new WillBeHeapHashSet
      <RawPtrWillBeWeakMember<SVGElement>>()))); | 
| 497     return *emptyInstances; | 497     return *emptyInstances; | 
| 498 } | 498 } | 
| 499 | 499 | 
| 500 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& SVGElement::instan
      cesForElement() const | 500 const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& SVGElement::instanc
      esForElement() const | 
| 501 { | 501 { | 
| 502     if (!hasSVGRareData()) | 502     if (!hasSVGRareData()) | 
| 503         return emptyInstances(); | 503         return emptyInstances(); | 
| 504     return svgRareData()->elementInstances(); | 504     return svgRareData()->elementInstances(); | 
| 505 } | 505 } | 
| 506 | 506 | 
| 507 bool SVGElement::getBoundingBox(FloatRect& rect) | 507 bool SVGElement::getBoundingBox(FloatRect& rect) | 
| 508 { | 508 { | 
| 509     if (!isSVGGraphicsElement()) | 509     if (!isSVGGraphicsElement()) | 
| 510         return false; | 510         return false; | 
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 731 | 731 | 
| 732 bool SVGElement::haveLoadedRequiredResources() | 732 bool SVGElement::haveLoadedRequiredResources() | 
| 733 { | 733 { | 
| 734     for (SVGElement* child = Traversal<SVGElement>::firstChild(*this); child; ch
      ild = Traversal<SVGElement>::nextSibling(*child)) { | 734     for (SVGElement* child = Traversal<SVGElement>::firstChild(*this); child; ch
      ild = Traversal<SVGElement>::nextSibling(*child)) { | 
| 735         if (!child->haveLoadedRequiredResources()) | 735         if (!child->haveLoadedRequiredResources()) | 
| 736             return false; | 736             return false; | 
| 737     } | 737     } | 
| 738     return true; | 738     return true; | 
| 739 } | 739 } | 
| 740 | 740 | 
| 741 static inline void collectInstancesForSVGElement(SVGElement* element, WillBeHeap
      HashSet<RawPtrWillBeWeakMember<SVGElement> >& instances) | 741 static inline void collectInstancesForSVGElement(SVGElement* element, WillBeHeap
      HashSet<RawPtrWillBeWeakMember<SVGElement>>& instances) | 
| 742 { | 742 { | 
| 743     ASSERT(element); | 743     ASSERT(element); | 
| 744     if (element->containingShadowRoot()) | 744     if (element->containingShadowRoot()) | 
| 745         return; | 745         return; | 
| 746 | 746 | 
| 747     ASSERT(!element->instanceUpdatesBlocked()); | 747     ASSERT(!element->instanceUpdatesBlocked()); | 
| 748 | 748 | 
| 749     instances = element->instancesForElement(); | 749     instances = element->instancesForElement(); | 
| 750 } | 750 } | 
| 751 | 751 | 
| 752 bool SVGElement::addEventListener(const AtomicString& eventType, PassRefPtr<Even
      tListener> prpListener, bool useCapture) | 752 bool SVGElement::addEventListener(const AtomicString& eventType, PassRefPtr<Even
      tListener> prpListener, bool useCapture) | 
| 753 { | 753 { | 
| 754     RefPtr<EventListener> listener = prpListener; | 754     RefPtr<EventListener> listener = prpListener; | 
| 755 | 755 | 
| 756     // Add event listener to regular DOM element | 756     // Add event listener to regular DOM element | 
| 757     if (!Node::addEventListener(eventType, listener, useCapture)) | 757     if (!Node::addEventListener(eventType, listener, useCapture)) | 
| 758         return false; | 758         return false; | 
| 759 | 759 | 
| 760     // Add event listener to all shadow tree DOM element instances | 760     // Add event listener to all shadow tree DOM element instances | 
| 761     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> > instances; | 761     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>> instances; | 
| 762     collectInstancesForSVGElement(this, instances); | 762     collectInstancesForSVGElement(this, instances); | 
| 763     for (SVGElement* element : instances) { | 763     for (SVGElement* element : instances) { | 
| 764         bool result = element->Node::addEventListener(eventType, listener, useCa
      pture); | 764         bool result = element->Node::addEventListener(eventType, listener, useCa
      pture); | 
| 765         ASSERT_UNUSED(result, result); | 765         ASSERT_UNUSED(result, result); | 
| 766     } | 766     } | 
| 767 | 767 | 
| 768     return true; | 768     return true; | 
| 769 } | 769 } | 
| 770 | 770 | 
| 771 bool SVGElement::removeEventListener(const AtomicString& eventType, PassRefPtr<E
      ventListener> prpListener, bool useCapture) | 771 bool SVGElement::removeEventListener(const AtomicString& eventType, PassRefPtr<E
      ventListener> prpListener, bool useCapture) | 
| 772 { | 772 { | 
| 773     RefPtr<EventListener> listener = prpListener; | 773     RefPtr<EventListener> listener = prpListener; | 
| 774 | 774 | 
| 775     // Remove event listener from regular DOM element | 775     // Remove event listener from regular DOM element | 
| 776     if (!Node::removeEventListener(eventType, listener, useCapture)) | 776     if (!Node::removeEventListener(eventType, listener, useCapture)) | 
| 777         return false; | 777         return false; | 
| 778 | 778 | 
| 779     // Remove event listener from all shadow tree DOM element instances | 779     // Remove event listener from all shadow tree DOM element instances | 
| 780     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> > instances; | 780     WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>> instances; | 
| 781     collectInstancesForSVGElement(this, instances); | 781     collectInstancesForSVGElement(this, instances); | 
| 782     for (SVGElement* shadowTreeElement : instances) { | 782     for (SVGElement* shadowTreeElement : instances) { | 
| 783         ASSERT(shadowTreeElement); | 783         ASSERT(shadowTreeElement); | 
| 784 | 784 | 
| 785         shadowTreeElement->Node::removeEventListener(eventType, listener, useCap
      ture); | 785         shadowTreeElement->Node::removeEventListener(eventType, listener, useCap
      ture); | 
| 786     } | 786     } | 
| 787 | 787 | 
| 788     return true; | 788     return true; | 
| 789 } | 789 } | 
| 790 | 790 | 
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 970 } | 970 } | 
| 971 | 971 | 
| 972 void SVGElement::invalidateInstances() | 972 void SVGElement::invalidateInstances() | 
| 973 { | 973 { | 
| 974     if (!inDocument()) | 974     if (!inDocument()) | 
| 975         return; | 975         return; | 
| 976 | 976 | 
| 977     if (instanceUpdatesBlocked()) | 977     if (instanceUpdatesBlocked()) | 
| 978         return; | 978         return; | 
| 979 | 979 | 
| 980     const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& set = instance
      sForElement(); | 980     const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& set = instances
      ForElement(); | 
| 981     if (set.isEmpty()) | 981     if (set.isEmpty()) | 
| 982         return; | 982         return; | 
| 983 | 983 | 
| 984     // Mark all use elements referencing 'element' for rebuilding | 984     // Mark all use elements referencing 'element' for rebuilding | 
| 985     for (SVGElement* instance : set) { | 985     for (SVGElement* instance : set) { | 
| 986         instance->setCorrespondingElement(0); | 986         instance->setCorrespondingElement(0); | 
| 987 | 987 | 
| 988         if (SVGUseElement* element = instance->correspondingUseElement()) { | 988         if (SVGUseElement* element = instance->correspondingUseElement()) { | 
| 989             ASSERT(element->inDocument()); | 989             ASSERT(element->inDocument()); | 
| 990             element->invalidateShadowTree(); | 990             element->invalidateShadowTree(); | 
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1136 } | 1136 } | 
| 1137 | 1137 | 
| 1138 void SVGElement::rebuildAllIncomingReferences() | 1138 void SVGElement::rebuildAllIncomingReferences() | 
| 1139 { | 1139 { | 
| 1140     if (!hasSVGRareData()) | 1140     if (!hasSVGRareData()) | 
| 1141         return; | 1141         return; | 
| 1142 | 1142 | 
| 1143     const SVGElementSet& incomingReferences = svgRareData()->incomingReferences(
      ); | 1143     const SVGElementSet& incomingReferences = svgRareData()->incomingReferences(
      ); | 
| 1144 | 1144 | 
| 1145     // Iterate on a snapshot as |incomingReferences| may be altered inside loop. | 1145     // Iterate on a snapshot as |incomingReferences| may be altered inside loop. | 
| 1146     WillBeHeapVector<RawPtrWillBeMember<SVGElement> > incomingReferencesSnapshot
      ; | 1146     WillBeHeapVector<RawPtrWillBeMember<SVGElement>> incomingReferencesSnapshot; | 
| 1147     copyToVector(incomingReferences, incomingReferencesSnapshot); | 1147     copyToVector(incomingReferences, incomingReferencesSnapshot); | 
| 1148 | 1148 | 
| 1149     // Force rebuilding the |sourceElement| so it knows about this change. | 1149     // Force rebuilding the |sourceElement| so it knows about this change. | 
| 1150     for (SVGElement* sourceElement : incomingReferencesSnapshot) { | 1150     for (SVGElement* sourceElement : incomingReferencesSnapshot) { | 
| 1151         // Before rebuilding |sourceElement| ensure it was not removed from unde
      r us. | 1151         // Before rebuilding |sourceElement| ensure it was not removed from unde
      r us. | 
| 1152         if (incomingReferences.contains(sourceElement)) | 1152         if (incomingReferences.contains(sourceElement)) | 
| 1153             sourceElement->svgAttributeChanged(XLinkNames::hrefAttr); | 1153             sourceElement->svgAttributeChanged(XLinkNames::hrefAttr); | 
| 1154     } | 1154     } | 
| 1155 } | 1155 } | 
| 1156 | 1156 | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1191     Element::trace(visitor); | 1191     Element::trace(visitor); | 
| 1192 } | 1192 } | 
| 1193 | 1193 | 
| 1194 const AtomicString& SVGElement::eventParameterName() | 1194 const AtomicString& SVGElement::eventParameterName() | 
| 1195 { | 1195 { | 
| 1196     DEFINE_STATIC_LOCAL(const AtomicString, evtString, ("evt", AtomicString::Con
      structFromLiteral)); | 1196     DEFINE_STATIC_LOCAL(const AtomicString, evtString, ("evt", AtomicString::Con
      structFromLiteral)); | 
| 1197     return evtString; | 1197     return evtString; | 
| 1198 } | 1198 } | 
| 1199 | 1199 | 
| 1200 } // namespace blink | 1200 } // namespace blink | 
| OLD | NEW | 
|---|