SVGElementAnimatedPropertyList SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName(SVGElement& targetElement, const QualifiedName& attributeName) { SVGElementAnimatedPropertyList result; if (!SVGAnimatedType::supportsAnimVal(m_type)) return result; auto& propertyMap = targetElement.localAttributeToPropertyMap(); auto targetProperties = propertyMap.properties(targetElement, attributeName); if (targetProperties.isEmpty()) return result; result.append(SVGElementAnimatedProperties { &targetElement, WTF::move(targetProperties) }); for (SVGElement* instance : targetElement.instances()) result.append(SVGElementAnimatedProperties { instance, propertyMap.properties(*instance, attributeName) }); #if !ASSERT_DISABLED for (auto& animatedProperties : result) { for (auto& property : animatedProperties.properties) { if (property->animatedPropertyType() != m_type) { ASSERT(m_type == AnimatedAngle); ASSERT(property->animatedPropertyType() == AnimatedEnumeration); } } } #endif return result; }
SVGElementAnimatedPropertyList SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName(SVGElement* targetElement, const QualifiedName& attributeName) { ASSERT(targetElement); SVGElementAnimatedPropertyList propertiesByInstance; Vector<RefPtr<SVGAnimatedProperty> > targetProperties; targetElement->localAttributeToPropertyMap().animatedPropertiesForAttribute(targetElement, attributeName, targetProperties); if (!SVGAnimatedType::supportsAnimVal(m_type)) return SVGElementAnimatedPropertyList(); SVGElementAnimatedProperties propertiesPair(targetElement, targetProperties); propertiesByInstance.append(propertiesPair); const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement(); const HashSet<SVGElementInstance*>::const_iterator end = instances.end(); for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) { SVGElement* shadowTreeElement = (*it)->shadowTreeElement(); if (!shadowTreeElement) continue; Vector<RefPtr<SVGAnimatedProperty> > instanceProperties; targetElement->localAttributeToPropertyMap().animatedPropertiesForAttribute(shadowTreeElement, attributeName, instanceProperties); SVGElementAnimatedProperties instancePropertiesPair(shadowTreeElement, instanceProperties); propertiesByInstance.append(instancePropertiesPair); } #if !ASSERT_DISABLED SVGElementAnimatedPropertyList::const_iterator propertiesEnd = propertiesByInstance.end(); for (SVGElementAnimatedPropertyList::const_iterator it = propertiesByInstance.begin(); it != propertiesEnd; ++it) { size_t propertiesSize = it->properties.size(); for (size_t i = 0; i < propertiesSize; ++i) { RefPtr<SVGAnimatedProperty> property = it->properties[i]; if (property->animatedPropertyType() != m_type) { ASSERT(m_type == AnimatedAngle); ASSERT(property->animatedPropertyType() == AnimatedEnumeration); } } } #endif return propertiesByInstance; }