void SVGAnimateElement::calculateAnimatedValue(float percentage, unsigned repeat, SVGSMILElement* resultElement) { ASSERT(resultElement); SVGElement* targetElement = this->targetElement(); if (!targetElement) return; ASSERT(m_animatedPropertyType == determineAnimatedPropertyType(targetElement)); ASSERT(percentage >= 0 && percentage <= 1); ASSERT(m_animatedPropertyType != AnimatedEnumeration); ASSERT(m_animatedPropertyType != AnimatedTransformList); ASSERT(m_animatedPropertyType != AnimatedUnknown); ASSERT(m_animator); ASSERT(m_animator->type() == m_animatedPropertyType); ASSERT(m_fromType); ASSERT(m_fromType->type() == m_animatedPropertyType); ASSERT(m_toType); SVGAnimateElement* resultAnimationElement = static_cast<SVGAnimateElement*>(resultElement); ASSERT(resultAnimationElement->m_animatedType); ASSERT(resultAnimationElement->m_animatedPropertyType == m_animatedPropertyType); ASSERT(resultAnimationElement->hasTagName(SVGNames::animateTag) || resultAnimationElement->hasTagName(SVGNames::animateColorTag) || resultAnimationElement->hasTagName(SVGNames::setTag)); if (hasTagName(SVGNames::setTag)) percentage = 1; // Target element might have changed. m_animator->setContextElement(targetElement); m_animator->calculateAnimatedValue(percentage, repeat, m_fromType, m_toType, resultAnimationElement->m_animatedType); }