<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[243830] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/243830">243830</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2019-04-03 15:07:59 -0700 (Wed, 03 Apr 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove SVG properties tear-off objects
https://bugs.webkit.org/show_bug.cgi?id=191237

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-04-03
Reviewed by Simon Fraser.

This patch cleans the code from unused SVG sources and get rid off the
remaining SVG properties tear-off objects. Here are more details:

-- Remove the SVGAttributeAnimationController and move its code to the
   SVGAnimateElementBase. SVGAttributeAnimationController was introduced
   to allow animating the SVG properties whether they are backed by tear
   off objects or not. Since there will be no tear off objects anymore,
   one animation controller will be needed. But in this case, it will be
   better if we make SVGAnimateElementBase is the animation controller
   and make it manage the animator directly.

-- Remove SVGAttributeRegistry, SVGAttributeOwnerProxy and the virtual
   function SVGElement::attributeOwnerProxy(). Remove also all the
   overriding functions attributeOwnerProxy() from all the SVGElements.

-- Remove isKnownAttribute() from all the SVG header files except from
   four classes: SVGURIReference, SVGFitToViewBox, SVGLangSpace
   and SVGExternalResourcesRequired.

-- Remove all the SVG animated properties classifying functions from
   SVGElement. This is now handled by SVGPropertyRegistry.

-- There is no need for the enum AnimatedPropertyType anymore. The SVG
   property accessor knows its type, knows how to access it and know what
   animator it should be created for it.

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/Element.cpp:
(WebCore::Element::synchronizeAllAttributes const):
(WebCore::Element::synchronizeAttribute const):
(WebCore::Element::fastAttributeLookupAllowed const):
These functions are surprisingly marked 'const'. They were calling 'const'
functions in SVGElement and SVGElement was casting 'this' as non 'const'
before calling the non 'const' functions through the non 'const' 'this'
pointer. Change this by moving the casting to the Element functions.

* rendering/svg/RenderSVGResourceGradient.cpp:
(WebCore::RenderSVGResourceGradient::applyResource):
* rendering/svg/RenderSVGResourcePattern.cpp:
(WebCore::RenderSVGResourcePattern::applyResource):
* svg/SVGAElement.h:
* svg/SVGAltGlyphElement.h:
* svg/SVGAnimateElementBase.cpp:
(WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
(WebCore::SVGAnimateElementBase::animator const):
(WebCore::SVGAnimateElementBase::hasInvalidCSSAttributeType const):
(WebCore::SVGAnimateElementBase::isDiscreteAnimator const):
(WebCore::SVGAnimateElementBase::setTargetElement):
(WebCore::SVGAnimateElementBase::setAttributeName):
(WebCore::SVGAnimateElementBase::resetAnimation):
(WebCore::SVGAnimateElementBase::calculateFromAndToValues):
(WebCore::SVGAnimateElementBase::calculateFromAndByValues):
(WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
(WebCore::SVGAnimateElementBase::resetAnimatedType):
(WebCore::SVGAnimateElementBase::calculateAnimatedValue):
(WebCore::SVGAnimateElementBase::applyResultsToTarget):
(WebCore::SVGAnimateElementBase::clearAnimatedType):
(WebCore::SVGAnimateElementBase::calculateDistance):
(WebCore::SVGAnimateElementBase::attributeAnimationController): Deleted.
(WebCore::SVGAnimateElementBase::determineAnimatedPropertyType const): Deleted.
(WebCore::SVGAnimateElementBase::isAdditive const): Deleted.
* svg/SVGAnimateElementBase.h:
(WebCore::SVGAnimateElementBase::animatorIfExists const):
(WebCore::SVGAnimateElementBase::attributeAnimationControllerIfExists const): Deleted.
The order of the functions was changed to resemble the order of running
the animation:
  -- Setting the animation range
  -- Starting the animation
  -- Progressing the animation
  -- Applying the the progressed animaVal() to the target element
  -- Stopping the animation

* svg/SVGAnimateMotionElement.cpp:
(WebCore::SVGAnimateMotionElement::calculateDistance):
* svg/SVGAnimateMotionElement.h:
* svg/SVGAnimationElement.cpp:
(WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
(WebCore::SVGAnimationElement::shouldApplyAnimation): Deleted.
* svg/SVGAnimationElement.h:
(WebCore::SVGAnimationElement::attributeRegistry): Deleted.
(WebCore::SVGAnimationElement::calculateDistance): Deleted.
* svg/SVGAttributeAnimationController.cpp: Removed.
* svg/SVGAttributeAnimationController.h: Removed.
* svg/SVGAttributeAnimationControllerBase.cpp: Removed.
* svg/SVGAttributeAnimationControllerBase.h: Removed.
* svg/SVGCircleElement.h:
* svg/SVGClipPathElement.h:
* svg/SVGComponentTransferFunctionElement.h:
* svg/SVGCursorElement.h:
* svg/SVGDefsElement.h:
* svg/SVGElement.cpp:
(WebCore::SVGElement::synchronizeAttribute):
(WebCore::SVGElement::synchronizeAllAttributes):
(WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
(WebCore::createAttributeNameToAnimatedPropertyTypeMap): Deleted.
(WebCore::attributeNameToAnimatedPropertyTypeMap): Deleted.
(WebCore::createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
(WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
(WebCore::SVGElement::animatedPropertyTypesForAttribute): Deleted.
(WebCore::SVGElement::synchronizeAnimatedSVGAttribute const): Deleted.
(WebCore::SVGElement::isAnimatableCSSProperty): Deleted.
(WebCore::SVGElement::isPresentationAttributeWithSVGDOM): Deleted.
* svg/SVGElement.h:
(WebCore::SVGElement::attributeOwnerProxy const): Deleted.
(WebCore::SVGElement::attributeRegistry): Deleted.
(WebCore::SVGElement::synchronizeAttribute): Deleted.
(WebCore::SVGElement::synchronizeAttributes): Deleted.
(WebCore::SVGElement::animatedTypes const): Deleted.
(WebCore::SVGElement::lookupAnimatedProperty const): Deleted.
(WebCore::SVGElement::lookupOrCreateAnimatedProperty): Deleted.
(WebCore::SVGElement::lookupOrCreateAnimatedProperties): Deleted.
(WebCore::SVGElement::isKnownAttribute): Deleted.
* svg/SVGEllipseElement.h:
* svg/SVGExternalResourcesRequired.h:
(WebCore::SVGExternalResourcesRequired::attributeRegistry): Deleted.
(WebCore::SVGExternalResourcesRequired::attributeOwnerProxy): Deleted.
* svg/SVGFEBlendElement.h:
* svg/SVGFEColorMatrixElement.h:
* svg/SVGFEComponentTransferElement.h:
* svg/SVGFECompositeElement.h:
* svg/SVGFEConvolveMatrixElement.h:
* svg/SVGFEDiffuseLightingElement.h:
* svg/SVGFEDisplacementMapElement.h:
* svg/SVGFEDropShadowElement.h:
* svg/SVGFEGaussianBlurElement.h:
* svg/SVGFEImageElement.h:
* svg/SVGFELightElement.h:
* svg/SVGFEMergeNodeElement.h:
* svg/SVGFEMorphologyElement.h:
* svg/SVGFEOffsetElement.h:
* svg/SVGFESpecularLightingElement.h:
* svg/SVGFETileElement.h:
* svg/SVGFETurbulenceElement.h:
* svg/SVGFilterElement.h:
* svg/SVGFilterPrimitiveStandardAttributes.h:
(WebCore::SVGFilterPrimitiveStandardAttributes::attributeRegistry): Deleted.
* svg/SVGFitToViewBox.h:
(WebCore::SVGFitToViewBox::attributeRegistry): Deleted.
* svg/SVGFontElement.h:
* svg/SVGForeignObjectElement.h:
* svg/SVGGElement.h:
* svg/SVGGeometryElement.h:
* svg/SVGGlyphRefElement.h:
* svg/SVGGradientElement.cpp:
(WebCore::SVGGradientElement::svgAttributeChanged):
* svg/SVGGradientElement.h:
(WebCore::SVGGradientElement::attributeRegistry): Deleted.
(WebCore::SVGGradientElement::isKnownAttribute): Deleted.
* svg/SVGGraphicsElement.h:
(WebCore::SVGGraphicsElement::attributeRegistry): Deleted.
* svg/SVGImageElement.h:
* svg/SVGLineElement.h:
* svg/SVGLinearGradientElement.h:
* svg/SVGMPathElement.h:
* svg/SVGMarkerElement.cpp:
* svg/SVGMarkerElement.h:
* svg/SVGMaskElement.h:
* svg/SVGPathElement.h:
* svg/SVGPatternElement.h:
* svg/SVGPolyElement.h:
* svg/SVGRadialGradientElement.h:
* svg/SVGRectElement.h:
* svg/SVGSVGElement.h:
* svg/SVGScriptElement.h:
* svg/SVGStopElement.h:
* svg/SVGSwitchElement.h:
* svg/SVGSymbolElement.h:
* svg/SVGTRefElement.h:
* svg/SVGTests.cpp:
(WebCore::SVGTests::svgAttributeChanged):
(WebCore::SVGTests::attributeRegistry): Deleted.
(WebCore::SVGTests::isKnownAttribute): Deleted.
* svg/SVGTests.h:
* svg/SVGTextContentElement.cpp:
* svg/SVGTextContentElement.h:
(WebCore::SVGTextContentElement::attributeRegistry): Deleted.
* svg/SVGTextPathElement.h:
* svg/SVGTextPositioningElement.h:
(WebCore::SVGTextPositioningElement::attributeRegistry): Deleted.
* svg/SVGURIReference.cpp:
(WebCore::SVGURIReference::SVGURIReference):
(WebCore::SVGURIReference::attributeRegistry): Deleted.
* svg/SVGURIReference.h:
* svg/SVGUseElement.h:
* svg/SVGViewElement.h:
* svg/SVGViewSpec.cpp:
(WebCore::SVGViewSpec::SVGViewSpec):
* svg/SVGViewSpec.h:
* svg/SVGZoomAndPanType.h:
* svg/properties/SVGAnimatedListPropertyTearOff.h: Removed.
* svg/properties/SVGAnimatedPropertyAnimator.h:
* svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
* svg/properties/SVGAnimatedPropertyPairAnimator.h:
* svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
* svg/properties/SVGAnimatedPropertyTearOff.h: Removed.
* svg/properties/SVGAnimatedPropertyType.h: Removed.

* svg/properties/SVGAnimationAdditiveFunction.h:
(WebCore::SVGAnimationAdditiveFunction::animate):
(WebCore::SVGAnimationAdditiveFunction::progress): Deleted.
* svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
(WebCore::SVGAnimationLengthListFunction::animate):
(WebCore::SVGAnimationNumberListFunction::animate):
(WebCore::SVGAnimationPointListFunction::animate):
(WebCore::SVGAnimationTransformListFunction::animate):
(WebCore::SVGAnimationLengthListFunction::progress): Deleted.
(WebCore::SVGAnimationNumberListFunction::progress): Deleted.
(WebCore::SVGAnimationPointListFunction::progress): Deleted.
(WebCore::SVGAnimationTransformListFunction::progress): Deleted.
* svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
(WebCore::SVGAnimationAngleFunction::animate):
(WebCore::SVGAnimationColorFunction::animate):
(WebCore::SVGAnimationIntegerFunction::animate):
(WebCore::SVGAnimationLengthFunction::animate):
(WebCore::SVGAnimationNumberFunction::animate):
(WebCore::SVGAnimationPathSegListFunction::animate):
(WebCore::SVGAnimationRectFunction::animate):
(WebCore::SVGAnimationAngleFunction::progress): Deleted.
(WebCore::SVGAnimationColorFunction::progress): Deleted.
(WebCore::SVGAnimationIntegerFunction::progress): Deleted.
(WebCore::SVGAnimationLengthFunction::progress): Deleted.
(WebCore::SVGAnimationNumberFunction::progress): Deleted.
(WebCore::SVGAnimationPathSegListFunction::progress): Deleted.
(WebCore::SVGAnimationRectFunction::progress): Deleted.
* svg/properties/SVGAnimationDiscreteFunction.h:
(WebCore::SVGAnimationDiscreteFunction::animate):
(WebCore::SVGAnimationDiscreteFunction::progress): Deleted.
* svg/properties/SVGAnimationFunction.h:
(WebCore::SVGAnimationFunction::calculateDistance const):
-- Rename the 'progress()' functions of SVGAttributeAnimator and SVGAnimationFunction
   to 'animate()'.
-- Rename the argument 'percentage' of these function to 'progress'
-- Make calculateDistance return Optional<float> so it does not have to
   return -1 in case of error.

* svg/properties/SVGAttribute.h: Removed.
* svg/properties/SVGAttributeAccessor.h: Removed.
* svg/properties/SVGAttributeAnimator.h:
(WebCore::SVGAttributeAnimator::calculateDistance const):
* svg/properties/SVGAttributeOwnerProxy.cpp: Removed.
* svg/properties/SVGAttributeOwnerProxy.h: Removed.
* svg/properties/SVGAttributeOwnerProxyImpl.h: Removed.
* svg/properties/SVGAttributeRegistry.h: Removed.
* svg/properties/SVGLegacyAnimatedProperty.cpp: Removed.
* svg/properties/SVGLegacyAnimatedProperty.h: Removed.
* svg/properties/SVGLegacyProperty.h: Removed.
* svg/properties/SVGListProperty.h: Removed.
* svg/properties/SVGListPropertyTearOff.h: Removed.
* svg/properties/SVGPrimitivePropertyAnimator.h:
* svg/properties/SVGProperty.h:
* svg/properties/SVGPropertyAnimator.h:
* svg/properties/SVGPropertyTearOff.h: Removed.
* svg/properties/SVGValuePropertyAnimator.h:
* svg/properties/SVGValuePropertyListAnimator.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreSourcestxt">trunk/Source/WebCore/Sources.txt</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomElementcpp">trunk/Source/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGResourceGradientcpp">trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGResourcePatterncpp">trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAElementh">trunk/Source/WebCore/svg/SVGAElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAltGlyphElementh">trunk/Source/WebCore/svg/SVGAltGlyphElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBasecpp">trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBaseh">trunk/Source/WebCore/svg/SVGAnimateElementBase.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateMotionElementcpp">trunk/Source/WebCore/svg/SVGAnimateMotionElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateMotionElementh">trunk/Source/WebCore/svg/SVGAnimateMotionElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimationElementcpp">trunk/Source/WebCore/svg/SVGAnimationElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimationElementh">trunk/Source/WebCore/svg/SVGAnimationElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGCircleElementh">trunk/Source/WebCore/svg/SVGCircleElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGClipPathElementh">trunk/Source/WebCore/svg/SVGClipPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGComponentTransferFunctionElementh">trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGCursorElementh">trunk/Source/WebCore/svg/SVGCursorElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGDefsElementh">trunk/Source/WebCore/svg/SVGDefsElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementcpp">trunk/Source/WebCore/svg/SVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementh">trunk/Source/WebCore/svg/SVGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGEllipseElementh">trunk/Source/WebCore/svg/SVGEllipseElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGExternalResourcesRequiredh">trunk/Source/WebCore/svg/SVGExternalResourcesRequired.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEBlendElementh">trunk/Source/WebCore/svg/SVGFEBlendElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEColorMatrixElementh">trunk/Source/WebCore/svg/SVGFEColorMatrixElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEComponentTransferElementh">trunk/Source/WebCore/svg/SVGFEComponentTransferElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFECompositeElementh">trunk/Source/WebCore/svg/SVGFECompositeElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEConvolveMatrixElementh">trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEDiffuseLightingElementh">trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEDisplacementMapElementh">trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEDropShadowElementh">trunk/Source/WebCore/svg/SVGFEDropShadowElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEGaussianBlurElementh">trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEImageElementh">trunk/Source/WebCore/svg/SVGFEImageElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFELightElementh">trunk/Source/WebCore/svg/SVGFELightElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEMergeNodeElementh">trunk/Source/WebCore/svg/SVGFEMergeNodeElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEMorphologyElementh">trunk/Source/WebCore/svg/SVGFEMorphologyElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEOffsetElementh">trunk/Source/WebCore/svg/SVGFEOffsetElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFESpecularLightingElementh">trunk/Source/WebCore/svg/SVGFESpecularLightingElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFETileElementh">trunk/Source/WebCore/svg/SVGFETileElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFETurbulenceElementh">trunk/Source/WebCore/svg/SVGFETurbulenceElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFilterElementh">trunk/Source/WebCore/svg/SVGFilterElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFilterPrimitiveStandardAttributesh">trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFitToViewBoxh">trunk/Source/WebCore/svg/SVGFitToViewBox.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFontElementh">trunk/Source/WebCore/svg/SVGFontElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGForeignObjectElementh">trunk/Source/WebCore/svg/SVGForeignObjectElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGElementh">trunk/Source/WebCore/svg/SVGGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGeometryElementh">trunk/Source/WebCore/svg/SVGGeometryElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGlyphRefElementh">trunk/Source/WebCore/svg/SVGGlyphRefElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGradientElementcpp">trunk/Source/WebCore/svg/SVGGradientElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGradientElementh">trunk/Source/WebCore/svg/SVGGradientElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGraphicsElementh">trunk/Source/WebCore/svg/SVGGraphicsElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageElementh">trunk/Source/WebCore/svg/SVGImageElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLineElementh">trunk/Source/WebCore/svg/SVGLineElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLinearGradientElementh">trunk/Source/WebCore/svg/SVGLinearGradientElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMPathElementh">trunk/Source/WebCore/svg/SVGMPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMarkerElementcpp">trunk/Source/WebCore/svg/SVGMarkerElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMarkerElementh">trunk/Source/WebCore/svg/SVGMarkerElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMaskElementh">trunk/Source/WebCore/svg/SVGMaskElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementh">trunk/Source/WebCore/svg/SVGPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPatternElementh">trunk/Source/WebCore/svg/SVGPatternElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPolyElementh">trunk/Source/WebCore/svg/SVGPolyElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRadialGradientElementh">trunk/Source/WebCore/svg/SVGRadialGradientElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRectElementh">trunk/Source/WebCore/svg/SVGRectElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementh">trunk/Source/WebCore/svg/SVGSVGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGScriptElementh">trunk/Source/WebCore/svg/SVGScriptElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGStopElementh">trunk/Source/WebCore/svg/SVGStopElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSwitchElementh">trunk/Source/WebCore/svg/SVGSwitchElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSymbolElementh">trunk/Source/WebCore/svg/SVGSymbolElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTRefElementh">trunk/Source/WebCore/svg/SVGTRefElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTestscpp">trunk/Source/WebCore/svg/SVGTests.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTestsh">trunk/Source/WebCore/svg/SVGTests.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextContentElementcpp">trunk/Source/WebCore/svg/SVGTextContentElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextContentElementh">trunk/Source/WebCore/svg/SVGTextContentElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextPathElementh">trunk/Source/WebCore/svg/SVGTextPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextPositioningElementh">trunk/Source/WebCore/svg/SVGTextPositioningElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGURIReferencecpp">trunk/Source/WebCore/svg/SVGURIReference.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGURIReferenceh">trunk/Source/WebCore/svg/SVGURIReference.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGUseElementh">trunk/Source/WebCore/svg/SVGUseElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGViewElementh">trunk/Source/WebCore/svg/SVGViewElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGViewSpeccpp">trunk/Source/WebCore/svg/SVGViewSpec.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGViewSpech">trunk/Source/WebCore/svg/SVGViewSpec.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGZoomAndPanTypeh">trunk/Source/WebCore/svg/SVGZoomAndPanType.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorImplh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyPairAnimatorh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyPairAnimatorImplh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveFunctionh">trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveFunction.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveListFunctionImplh">trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveListFunctionImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveValueFunctionImplh">trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationDiscreteFunctionh">trunk/Source/WebCore/svg/properties/SVGAnimationDiscreteFunction.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationFunctionh">trunk/Source/WebCore/svg/properties/SVGAnimationFunction.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeAnimatorh">trunk/Source/WebCore/svg/properties/SVGAttributeAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPrimitivePropertyAnimatorh">trunk/Source/WebCore/svg/properties/SVGPrimitivePropertyAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPropertyh">trunk/Source/WebCore/svg/properties/SVGProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPropertyAnimatorh">trunk/Source/WebCore/svg/properties/SVGPropertyAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGValuePropertyAnimatorh">trunk/Source/WebCore/svg/properties/SVGValuePropertyAnimator.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGValuePropertyListAnimatorh">trunk/Source/WebCore/svg/properties/SVGValuePropertyListAnimator.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAttributeAnimationControllercpp">trunk/Source/WebCore/svg/SVGAttributeAnimationController.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAttributeAnimationControllerh">trunk/Source/WebCore/svg/SVGAttributeAnimationController.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAttributeAnimationControllerBasecpp">trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAttributeAnimationControllerBaseh">trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTypeh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeh">trunk/Source/WebCore/svg/properties/SVGAttribute.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeAccessorh">trunk/Source/WebCore/svg/properties/SVGAttributeAccessor.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxycpp">trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxyh">trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxyImplh">trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAttributeRegistryh">trunk/Source/WebCore/svg/properties/SVGAttributeRegistry.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGLegacyAnimatedPropertycpp">trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGLegacyAnimatedPropertyh">trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGLegacyPropertyh">trunk/Source/WebCore/svg/properties/SVGLegacyProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyh">trunk/Source/WebCore/svg/properties/SVGListProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/ChangeLog      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,3 +1,266 @@
</span><ins>+2019-04-03  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        Remove SVG properties tear-off objects
+        https://bugs.webkit.org/show_bug.cgi?id=191237
+
+        Reviewed by Simon Fraser.
+
+        This patch cleans the code from unused SVG sources and get rid off the
+        remaining SVG properties tear-off objects. Here are more details:
+
+        -- Remove the SVGAttributeAnimationController and move its code to the
+           SVGAnimateElementBase. SVGAttributeAnimationController was introduced
+           to allow animating the SVG properties whether they are backed by tear
+           off objects or not. Since there will be no tear off objects anymore,
+           one animation controller will be needed. But in this case, it will be
+           better if we make SVGAnimateElementBase is the animation controller
+           and make it manage the animator directly.
+
+        -- Remove SVGAttributeRegistry, SVGAttributeOwnerProxy and the virtual
+           function SVGElement::attributeOwnerProxy(). Remove also all the
+           overriding functions attributeOwnerProxy() from all the SVGElements.
+
+        -- Remove isKnownAttribute() from all the SVG header files except from 
+           four classes: SVGURIReference, SVGFitToViewBox, SVGLangSpace
+           and SVGExternalResourcesRequired.
+
+        -- Remove all the SVG animated properties classifying functions from
+           SVGElement. This is now handled by SVGPropertyRegistry.
+
+        -- There is no need for the enum AnimatedPropertyType anymore. The SVG
+           property accessor knows its type, knows how to access it and know what
+           animator it should be created for it.
+
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/Element.cpp:
+        (WebCore::Element::synchronizeAllAttributes const):
+        (WebCore::Element::synchronizeAttribute const):
+        (WebCore::Element::fastAttributeLookupAllowed const):
+        These functions are surprisingly marked 'const'. They were calling 'const'
+        functions in SVGElement and SVGElement was casting 'this' as non 'const'
+        before calling the non 'const' functions through the non 'const' 'this'
+        pointer. Change this by moving the casting to the Element functions.
+
+        * rendering/svg/RenderSVGResourceGradient.cpp:
+        (WebCore::RenderSVGResourceGradient::applyResource):
+        * rendering/svg/RenderSVGResourcePattern.cpp:
+        (WebCore::RenderSVGResourcePattern::applyResource):
+        * svg/SVGAElement.h:
+        * svg/SVGAltGlyphElement.h:
+        * svg/SVGAnimateElementBase.cpp:
+        (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
+        (WebCore::SVGAnimateElementBase::animator const):
+        (WebCore::SVGAnimateElementBase::hasInvalidCSSAttributeType const):
+        (WebCore::SVGAnimateElementBase::isDiscreteAnimator const):
+        (WebCore::SVGAnimateElementBase::setTargetElement):
+        (WebCore::SVGAnimateElementBase::setAttributeName):
+        (WebCore::SVGAnimateElementBase::resetAnimation):
+        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
+        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
+        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
+        (WebCore::SVGAnimateElementBase::resetAnimatedType):
+        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
+        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
+        (WebCore::SVGAnimateElementBase::clearAnimatedType):
+        (WebCore::SVGAnimateElementBase::calculateDistance):
+        (WebCore::SVGAnimateElementBase::attributeAnimationController): Deleted.
+        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType const): Deleted.
+        (WebCore::SVGAnimateElementBase::isAdditive const): Deleted.
+        * svg/SVGAnimateElementBase.h:
+        (WebCore::SVGAnimateElementBase::animatorIfExists const):
+        (WebCore::SVGAnimateElementBase::attributeAnimationControllerIfExists const): Deleted.
+        The order of the functions was changed to resemble the order of running
+        the animation:
+          -- Setting the animation range
+          -- Starting the animation
+          -- Progressing the animation
+          -- Applying the the progressed animaVal() to the target element
+          -- Stopping the animation
+
+        * svg/SVGAnimateMotionElement.cpp:
+        (WebCore::SVGAnimateMotionElement::calculateDistance):
+        * svg/SVGAnimateMotionElement.h:
+        * svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
+        (WebCore::SVGAnimationElement::shouldApplyAnimation): Deleted.
+        * svg/SVGAnimationElement.h:
+        (WebCore::SVGAnimationElement::attributeRegistry): Deleted.
+        (WebCore::SVGAnimationElement::calculateDistance): Deleted.
+        * svg/SVGAttributeAnimationController.cpp: Removed.
+        * svg/SVGAttributeAnimationController.h: Removed.
+        * svg/SVGAttributeAnimationControllerBase.cpp: Removed.
+        * svg/SVGAttributeAnimationControllerBase.h: Removed.
+        * svg/SVGCircleElement.h:
+        * svg/SVGClipPathElement.h:
+        * svg/SVGComponentTransferFunctionElement.h:
+        * svg/SVGCursorElement.h:
+        * svg/SVGDefsElement.h:
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::synchronizeAttribute):
+        (WebCore::SVGElement::synchronizeAllAttributes):
+        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
+        (WebCore::createAttributeNameToAnimatedPropertyTypeMap): Deleted.
+        (WebCore::attributeNameToAnimatedPropertyTypeMap): Deleted.
+        (WebCore::createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
+        (WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Deleted.
+        (WebCore::SVGElement::animatedPropertyTypesForAttribute): Deleted.
+        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute const): Deleted.
+        (WebCore::SVGElement::isAnimatableCSSProperty): Deleted.
+        (WebCore::SVGElement::isPresentationAttributeWithSVGDOM): Deleted.
+        * svg/SVGElement.h:
+        (WebCore::SVGElement::attributeOwnerProxy const): Deleted.
+        (WebCore::SVGElement::attributeRegistry): Deleted.
+        (WebCore::SVGElement::synchronizeAttribute): Deleted.
+        (WebCore::SVGElement::synchronizeAttributes): Deleted.
+        (WebCore::SVGElement::animatedTypes const): Deleted.
+        (WebCore::SVGElement::lookupAnimatedProperty const): Deleted.
+        (WebCore::SVGElement::lookupOrCreateAnimatedProperty): Deleted.
+        (WebCore::SVGElement::lookupOrCreateAnimatedProperties): Deleted.
+        (WebCore::SVGElement::isKnownAttribute): Deleted.
+        * svg/SVGEllipseElement.h:
+        * svg/SVGExternalResourcesRequired.h:
+        (WebCore::SVGExternalResourcesRequired::attributeRegistry): Deleted.
+        (WebCore::SVGExternalResourcesRequired::attributeOwnerProxy): Deleted.
+        * svg/SVGFEBlendElement.h:
+        * svg/SVGFEColorMatrixElement.h:
+        * svg/SVGFEComponentTransferElement.h:
+        * svg/SVGFECompositeElement.h:
+        * svg/SVGFEConvolveMatrixElement.h:
+        * svg/SVGFEDiffuseLightingElement.h:
+        * svg/SVGFEDisplacementMapElement.h:
+        * svg/SVGFEDropShadowElement.h:
+        * svg/SVGFEGaussianBlurElement.h:
+        * svg/SVGFEImageElement.h:
+        * svg/SVGFELightElement.h:
+        * svg/SVGFEMergeNodeElement.h:
+        * svg/SVGFEMorphologyElement.h:
+        * svg/SVGFEOffsetElement.h:
+        * svg/SVGFESpecularLightingElement.h:
+        * svg/SVGFETileElement.h:
+        * svg/SVGFETurbulenceElement.h:
+        * svg/SVGFilterElement.h:
+        * svg/SVGFilterPrimitiveStandardAttributes.h:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::attributeRegistry): Deleted.
+        * svg/SVGFitToViewBox.h:
+        (WebCore::SVGFitToViewBox::attributeRegistry): Deleted.
+        * svg/SVGFontElement.h:
+        * svg/SVGForeignObjectElement.h:
+        * svg/SVGGElement.h:
+        * svg/SVGGeometryElement.h:
+        * svg/SVGGlyphRefElement.h:
+        * svg/SVGGradientElement.cpp:
+        (WebCore::SVGGradientElement::svgAttributeChanged):
+        * svg/SVGGradientElement.h:
+        (WebCore::SVGGradientElement::attributeRegistry): Deleted.
+        (WebCore::SVGGradientElement::isKnownAttribute): Deleted.
+        * svg/SVGGraphicsElement.h:
+        (WebCore::SVGGraphicsElement::attributeRegistry): Deleted.
+        * svg/SVGImageElement.h:
+        * svg/SVGLineElement.h:
+        * svg/SVGLinearGradientElement.h:
+        * svg/SVGMPathElement.h:
+        * svg/SVGMarkerElement.cpp:
+        * svg/SVGMarkerElement.h:
+        * svg/SVGMaskElement.h:
+        * svg/SVGPathElement.h:
+        * svg/SVGPatternElement.h:
+        * svg/SVGPolyElement.h:
+        * svg/SVGRadialGradientElement.h:
+        * svg/SVGRectElement.h:
+        * svg/SVGSVGElement.h:
+        * svg/SVGScriptElement.h:
+        * svg/SVGStopElement.h:
+        * svg/SVGSwitchElement.h:
+        * svg/SVGSymbolElement.h:
+        * svg/SVGTRefElement.h:
+        * svg/SVGTests.cpp:
+        (WebCore::SVGTests::svgAttributeChanged):
+        (WebCore::SVGTests::attributeRegistry): Deleted.
+        (WebCore::SVGTests::isKnownAttribute): Deleted.
+        * svg/SVGTests.h:
+        * svg/SVGTextContentElement.cpp:
+        * svg/SVGTextContentElement.h:
+        (WebCore::SVGTextContentElement::attributeRegistry): Deleted.
+        * svg/SVGTextPathElement.h:
+        * svg/SVGTextPositioningElement.h:
+        (WebCore::SVGTextPositioningElement::attributeRegistry): Deleted.
+        * svg/SVGURIReference.cpp:
+        (WebCore::SVGURIReference::SVGURIReference):
+        (WebCore::SVGURIReference::attributeRegistry): Deleted.
+        * svg/SVGURIReference.h:
+        * svg/SVGUseElement.h:
+        * svg/SVGViewElement.h:
+        * svg/SVGViewSpec.cpp:
+        (WebCore::SVGViewSpec::SVGViewSpec):
+        * svg/SVGViewSpec.h:
+        * svg/SVGZoomAndPanType.h:
+        * svg/properties/SVGAnimatedListPropertyTearOff.h: Removed.
+        * svg/properties/SVGAnimatedPropertyAnimator.h:
+        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
+        * svg/properties/SVGAnimatedPropertyPairAnimator.h:
+        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
+        * svg/properties/SVGAnimatedPropertyTearOff.h: Removed.
+        * svg/properties/SVGAnimatedPropertyType.h: Removed.
+
+        * svg/properties/SVGAnimationAdditiveFunction.h:
+        (WebCore::SVGAnimationAdditiveFunction::animate):
+        (WebCore::SVGAnimationAdditiveFunction::progress): Deleted.
+        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
+        (WebCore::SVGAnimationLengthListFunction::animate):
+        (WebCore::SVGAnimationNumberListFunction::animate):
+        (WebCore::SVGAnimationPointListFunction::animate):
+        (WebCore::SVGAnimationTransformListFunction::animate):
+        (WebCore::SVGAnimationLengthListFunction::progress): Deleted.
+        (WebCore::SVGAnimationNumberListFunction::progress): Deleted.
+        (WebCore::SVGAnimationPointListFunction::progress): Deleted.
+        (WebCore::SVGAnimationTransformListFunction::progress): Deleted.
+        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
+        (WebCore::SVGAnimationAngleFunction::animate):
+        (WebCore::SVGAnimationColorFunction::animate):
+        (WebCore::SVGAnimationIntegerFunction::animate):
+        (WebCore::SVGAnimationLengthFunction::animate):
+        (WebCore::SVGAnimationNumberFunction::animate):
+        (WebCore::SVGAnimationPathSegListFunction::animate):
+        (WebCore::SVGAnimationRectFunction::animate):
+        (WebCore::SVGAnimationAngleFunction::progress): Deleted.
+        (WebCore::SVGAnimationColorFunction::progress): Deleted.
+        (WebCore::SVGAnimationIntegerFunction::progress): Deleted.
+        (WebCore::SVGAnimationLengthFunction::progress): Deleted.
+        (WebCore::SVGAnimationNumberFunction::progress): Deleted.
+        (WebCore::SVGAnimationPathSegListFunction::progress): Deleted.
+        (WebCore::SVGAnimationRectFunction::progress): Deleted.
+        * svg/properties/SVGAnimationDiscreteFunction.h:
+        (WebCore::SVGAnimationDiscreteFunction::animate):
+        (WebCore::SVGAnimationDiscreteFunction::progress): Deleted.
+        * svg/properties/SVGAnimationFunction.h:
+        (WebCore::SVGAnimationFunction::calculateDistance const):
+        -- Rename the 'progress()' functions of SVGAttributeAnimator and SVGAnimationFunction
+           to 'animate()'.
+        -- Rename the argument 'percentage' of these function to 'progress'
+        -- Make calculateDistance return Optional<float> so it does not have to
+           return -1 in case of error.
+
+        * svg/properties/SVGAttribute.h: Removed.
+        * svg/properties/SVGAttributeAccessor.h: Removed.
+        * svg/properties/SVGAttributeAnimator.h:
+        (WebCore::SVGAttributeAnimator::calculateDistance const):
+        * svg/properties/SVGAttributeOwnerProxy.cpp: Removed.
+        * svg/properties/SVGAttributeOwnerProxy.h: Removed.
+        * svg/properties/SVGAttributeOwnerProxyImpl.h: Removed.
+        * svg/properties/SVGAttributeRegistry.h: Removed.
+        * svg/properties/SVGLegacyAnimatedProperty.cpp: Removed.
+        * svg/properties/SVGLegacyAnimatedProperty.h: Removed.
+        * svg/properties/SVGLegacyProperty.h: Removed.
+        * svg/properties/SVGListProperty.h: Removed.
+        * svg/properties/SVGListPropertyTearOff.h: Removed.
+        * svg/properties/SVGPrimitivePropertyAnimator.h:
+        * svg/properties/SVGProperty.h:
+        * svg/properties/SVGPropertyAnimator.h:
+        * svg/properties/SVGPropertyTearOff.h: Removed.
+        * svg/properties/SVGValuePropertyAnimator.h:
+        * svg/properties/SVGValuePropertyListAnimator.h:
+
</ins><span class="cx"> 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Documents can be destroyed before their CSSFontFaceSet is destroyed
</span></span></pre></div>
<a id="trunkSourceWebCoreSourcestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Sources.txt (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Sources.txt 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/Sources.txt    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -2230,8 +2230,6 @@
</span><span class="cx"> svg/SVGAnimateMotionElement.cpp
</span><span class="cx"> svg/SVGAnimateTransformElement.cpp
</span><span class="cx"> svg/SVGAnimationElement.cpp
</span><del>-svg/SVGAttributeAnimationController.cpp
-svg/SVGAttributeAnimationControllerBase.cpp
</del><span class="cx"> svg/SVGCircleElement.cpp
</span><span class="cx"> svg/SVGClipPathElement.cpp
</span><span class="cx"> svg/SVGComponentTransferFunctionElement.cpp
</span><span class="lines">@@ -2361,8 +2359,6 @@
</span><span class="cx"> svg/properties/SVGAnimatedProperty.cpp
</span><span class="cx"> svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp
</span><span class="cx"> svg/properties/SVGAttributeAnimator.cpp
</span><del>-svg/properties/SVGAttributeOwnerProxy.cpp
-svg/properties/SVGLegacyAnimatedProperty.cpp
</del><span class="cx"> 
</span><span class="cx"> workers/AbstractWorker.cpp
</span><span class="cx"> workers/DedicatedWorkerGlobalScope.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -235,7 +235,6 @@
</span><span class="cx">          0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; };
</span><span class="cx">          080E49261255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */; };
</span><span class="cx">          080E49281255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49241255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h */; };
</span><del>-               0810764412828556007C63BA /* SVGListProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 0810764312828556007C63BA /* SVGListProperty.h */; };
</del><span class="cx">           081093DC1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081093DA1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h */; };
</span><span class="cx">          081668D4125603BF006F25DE /* SVGTextChunkBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D2125603BF006F25DE /* SVGTextChunkBuilder.h */; };
</span><span class="cx">          081668DA125603D5006F25DE /* SVGTextLayoutEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D8125603D5006F25DE /* SVGTextLayoutEngine.h */; };
</span><span class="lines">@@ -260,11 +259,7 @@
</span><span class="cx">          087558C613B4A57D00F49307 /* SurrogatePairAwareTextIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 087558C413B4A57D00F49307 /* SurrogatePairAwareTextIterator.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          0885067F11DA045B00182B98 /* PaintInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0885067D11DA045B00182B98 /* PaintInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          0885068011DA045B00182B98 /* PaintPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0885067E11DA045B00182B98 /* PaintPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */; };
</del><span class="cx">           088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */; };
-               088A0E09126EF1DB00978F7A /* SVGListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */; };
-               088A0E0B126EF1DB00978F7A /* SVGPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */; };
</del><span class="cx">           088A0E0C126EF1DB00978F7A /* SVGPropertyTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          088C2F7A12390081003D65CE /* SVGTextLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */; };
</span><span class="cx">          089582560E857A7E00F82C83 /* ImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 089582540E857A7E00F82C83 /* ImageLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1732,7 +1727,6 @@
</span><span class="cx">          53ED3FDE167A88E7006762E6 /* JSInternalSettingsGenerated.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53ED3FDC167A88E7006762E6 /* JSInternalSettingsGenerated.cpp */; };
</span><span class="cx">          53ED3FDF167A88E7006762E6 /* JSInternalSettingsGenerated.h in Headers */ = {isa = PBXBuildFile; fileRef = 53ED3FDD167A88E7006762E6 /* JSInternalSettingsGenerated.h */; };
</span><span class="cx">          550A0BCA085F6039007353D6 /* QualifiedName.h in Headers */ = {isa = PBXBuildFile; fileRef = 550A0BC8085F6039007353D6 /* QualifiedName.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               55346AF121150FAF0059BCDD /* SVGAttributeOwnerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">           5546757B1FD212A9003B10B0 /* ImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 554675781FD1FC1A003B10B0 /* ImageSource.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          5550CB421E955E3C00111AA0 /* ImageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 5550CB411E955E3C00111AA0 /* ImageTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          555130011E7CCCCB00A69E38 /* DecodingOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 555130001E7CCCCA00A69E38 /* DecodingOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1740,15 +1734,10 @@
</span><span class="cx">          5576A5651D88A70800CCC04C /* ImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 5576A5631D88A70800CCC04C /* ImageFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          55A336F91D821E3C0022C4C7 /* ImageBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A336F81D821E3C0022C4C7 /* ImageBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          55AF14E61EAAC59B0026EEAA /* UTIRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 55AF14E41EAAC59B0026EEAA /* UTIRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               55D70D23223B017C00044B8E /* SVGLegacyAnimatedProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 55D70D20223B009100044B8E /* SVGLegacyAnimatedProperty.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">           55DCC52822407B2000C26E32 /* SVGPrimitiveList.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC5252240749E00C26E32 /* SVGPrimitiveList.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          55DCC52922407B2A00C26E32 /* SVGList.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC523224073FE00C26E32 /* SVGList.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          55EC9599206AA7A0007DD0A9 /* PaintFrequencyTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 55EC95972069C92D007DD0A9 /* PaintFrequencyTracker.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               55FA7FF0210FA386005AEFE7 /* SVGAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FEF210FA386005AEFE7 /* SVGAttribute.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               55FA7FF5210FB6B1005AEFE7 /* SVGAttributeAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               55FA7FF7210FBE3E005AEFE7 /* SVGAttributeRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */; };
</del><span class="cx">           55FA7FFB2110ECD7005AEFE7 /* SVGZoomAndPanType.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               55FA7FFF21110E6E005AEFE7 /* SVGAnimatedPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">           5704405A1E53936200356601 /* JSAesCbcCfbParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 570440591E53936200356601 /* JSAesCbcCfbParams.h */; };
</span><span class="cx">          5706A6961DDE5C9500A03B14 /* CryptoAlgorithmRsaOaepParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 5706A6951DDE5C9500A03B14 /* CryptoAlgorithmRsaOaepParams.h */; };
</span><span class="cx">          5706A6981DDE5E4600A03B14 /* JSRsaOaepParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 5706A6971DDE5E4600A03B14 /* JSRsaOaepParams.h */; };
</span><span class="lines">@@ -5531,7 +5520,6 @@
</span><span class="cx">          080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutEngineBaseline.h; sourceTree = "<group>"; };
</span><span class="cx">          080E49231255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutEngineSpacing.cpp; sourceTree = "<group>"; };
</span><span class="cx">          080E49241255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutEngineSpacing.h; sourceTree = "<group>"; };
</span><del>-               0810764312828556007C63BA /* SVGListProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGListProperty.h; sourceTree = "<group>"; };
</del><span class="cx">           081093D91255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutAttributesBuilder.cpp; sourceTree = "<group>"; };
</span><span class="cx">          081093DA1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutAttributesBuilder.h; sourceTree = "<group>"; };
</span><span class="cx">          081668D1125603BF006F25DE /* SVGTextChunkBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextChunkBuilder.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -5573,11 +5561,7 @@
</span><span class="cx">          087558C413B4A57D00F49307 /* SurrogatePairAwareTextIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurrogatePairAwareTextIterator.h; sourceTree = "<group>"; };
</span><span class="cx">          0885067D11DA045B00182B98 /* PaintInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaintInfo.h; sourceTree = "<group>"; };
</span><span class="cx">          0885067E11DA045B00182B98 /* PaintPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaintPhase.h; sourceTree = "<group>"; };
</span><del>-               088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedListPropertyTearOff.h; sourceTree = "<group>"; };
</del><span class="cx">           088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyDescription.h; sourceTree = "<group>"; };
</span><del>-               088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyTearOff.h; sourceTree = "<group>"; };
-               088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGListPropertyTearOff.h; sourceTree = "<group>"; };
-               088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPropertyTearOff.h; sourceTree = "<group>"; };
</del><span class="cx">           088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPropertyTraits.h; sourceTree = "<group>"; };
</span><span class="cx">          088C2F7512390080003D65CE /* SVGTextLayoutAttributes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutAttributes.cpp; sourceTree = "<group>"; };
</span><span class="cx">          088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutAttributes.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -8488,8 +8472,6 @@
</span><span class="cx">          550A0BC7085F6039007353D6 /* QualifiedName.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QualifiedName.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
</span><span class="cx">          550A0BC8085F6039007353D6 /* QualifiedName.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = QualifiedName.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
</span><span class="cx">          55137B2C20379E550001004B /* SVGMarkerTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerTypes.h; sourceTree = "<group>"; };
</span><del>-               55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeOwnerProxy.h; sourceTree = "<group>"; };
-               55346AFA2117FFAF0059BCDD /* SVGAttributeOwnerProxyImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeOwnerProxyImpl.h; sourceTree = "<group>"; };
</del><span class="cx">           554675771FD1FC1A003B10B0 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = "<group>"; };
</span><span class="cx">          554675781FD1FC1A003B10B0 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = "<group>"; };
</span><span class="cx">          5550CB411E955E3C00111AA0 /* ImageTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageTypes.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -8516,9 +8498,6 @@
</span><span class="cx">          55BE025E223B29C40032F08A /* SVGAnimatedPropertyPairAccessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyPairAccessor.h; sourceTree = "<group>"; };
</span><span class="cx">          55BE025F223B29C50032F08A /* SVGAnimationAdditiveFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationAdditiveFunction.h; sourceTree = "<group>"; };
</span><span class="cx">          55D408F71A7C631800C78450 /* SVGImageClients.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGImageClients.h; sourceTree = "<group>"; };
</span><del>-               55D70D20223B009100044B8E /* SVGLegacyAnimatedProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLegacyAnimatedProperty.h; sourceTree = "<group>"; };
-               55D70D21223B00BB00044B8E /* SVGLegacyAnimatedProperty.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLegacyAnimatedProperty.cpp; sourceTree = "<group>"; };
-               55D70D22223B00EA00044B8E /* SVGLegacyProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLegacyProperty.h; sourceTree = "<group>"; };
</del><span class="cx">           55DCC51C2240605E00C26E32 /* SVGAnimationDiscreteFunctionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationDiscreteFunctionImpl.h; sourceTree = "<group>"; };
</span><span class="cx">          55DCC51D2240615500C26E32 /* SVGAnimationDiscreteFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationDiscreteFunction.h; sourceTree = "<group>"; };
</span><span class="cx">          55DCC523224073FE00C26E32 /* SVGList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGList.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -8542,11 +8521,7 @@
</span><span class="cx">          55EE5362223B2A2300FBA944 /* SVGAnimatedProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedProperty.h; sourceTree = "<group>"; };
</span><span class="cx">          55EE5363223B2A2400FBA944 /* SVGProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGProperty.h; sourceTree = "<group>"; };
</span><span class="cx">          55EE5364223B2A2400FBA944 /* SVGAttributeAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAnimator.h; sourceTree = "<group>"; };
</span><del>-               55FA7FEF210FA386005AEFE7 /* SVGAttribute.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttribute.h; sourceTree = "<group>"; };
-               55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAccessor.h; sourceTree = "<group>"; };
-               55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeRegistry.h; sourceTree = "<group>"; };
</del><span class="cx">           55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGZoomAndPanType.h; sourceTree = "<group>"; };
</span><del>-               55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyType.h; sourceTree = "<group>"; };
</del><span class="cx">           570440571E53851600356601 /* CryptoAlgorithmAES_CFBMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoAlgorithmAES_CFBMac.cpp; sourceTree = "<group>"; };
</span><span class="cx">          570440591E53936200356601 /* JSAesCbcCfbParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAesCbcCfbParams.h; sourceTree = "<group>"; };
</span><span class="cx">          5704405B1E53937900356601 /* JSAesCbcCfbParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAesCbcCfbParams.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -9369,10 +9344,6 @@
</span><span class="cx">          71F936F71DD4F99B00922CC7 /* tracks-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tracks-support.js"; sourceTree = "<group>"; };
</span><span class="cx">          721443452240C8BA00F12FF7 /* SVGAnimatedValueProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedValueProperty.h; sourceTree = "<group>"; };
</span><span class="cx">          721443462240CAD200F12FF7 /* SVGValueProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGValueProperty.h; sourceTree = "<group>"; };
</span><del>-               723F97BC2238EE08007F079C /* SVGAttributeAnimationController.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAttributeAnimationController.cpp; sourceTree = "<group>"; };
-               723F97BD2238EE08007F079C /* SVGAttributeAnimationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAnimationController.h; sourceTree = "<group>"; };
-               723F97C022396B88007F079C /* SVGAttributeAnimationControllerBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAnimationControllerBase.h; sourceTree = "<group>"; };
-               723F97C122397725007F079C /* SVGAttributeAnimationControllerBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAttributeAnimationControllerBase.cpp; sourceTree = "<group>"; };
</del><span class="cx">           724ED3291A3A7E5400F5F13C /* EXTBlendMinMax.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EXTBlendMinMax.cpp; sourceTree = "<group>"; };
</span><span class="cx">          724ED32A1A3A7E5400F5F13C /* EXTBlendMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTBlendMinMax.h; sourceTree = "<group>"; };
</span><span class="cx">          724ED32B1A3A7E5400F5F13C /* EXTBlendMinMax.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EXTBlendMinMax.idl; sourceTree = "<group>"; };
</span><span class="lines">@@ -9484,7 +9455,6 @@
</span><span class="cx">          7A29BA69187B781C00F29CEB /* TemporaryOpenGLSetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemporaryOpenGLSetting.cpp; sourceTree = "<group>"; };
</span><span class="cx">          7A29F57118C69514004D0F81 /* OutOfBandTextTrackPrivateAVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutOfBandTextTrackPrivateAVF.h; sourceTree = "<group>"; };
</span><span class="cx">          7A3EBEAA21BF054C000D043D /* JSSVGViewSpecCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGViewSpecCustom.cpp; sourceTree = "<group>"; };
</span><del>-               7A3EBEAC21BF0921000D043D /* SVGAttributeOwnerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAttributeOwnerProxy.cpp; sourceTree = "<group>"; };
</del><span class="cx">           7A45032D18DB717200377B34 /* BufferedLineReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BufferedLineReader.cpp; sourceTree = "<group>"; };
</span><span class="cx">          7A45032E18DB717200377B34 /* BufferedLineReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BufferedLineReader.h; sourceTree = "<group>"; };
</span><span class="cx">          7A54857D14E02D51006AE05A /* InspectorHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorHistory.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -15989,7 +15959,6 @@
</span><span class="cx">                  isa = PBXGroup;
</span><span class="cx">                  children = (
</span><span class="cx">                          5553592022441A16008F5EC9 /* SVGAnimatedDecoratedProperty.h */,
</span><del>-                               088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */,
</del><span class="cx">                           55EE5357223B29F800FBA944 /* SVGAnimatedPrimitiveProperty.h */,
</span><span class="cx">                          55BE025D223B29C40032F08A /* SVGAnimatedProperty.cpp */,
</span><span class="cx">                          55EE5362223B2A2300FBA944 /* SVGAnimatedProperty.h */,
</span><span class="lines">@@ -16004,8 +15973,6 @@
</span><span class="cx">                          55EE535D223B2A0D00FBA944 /* SVGAnimatedPropertyPairAccessorImpl.h */,
</span><span class="cx">                          55EE535F223B2A0F00FBA944 /* SVGAnimatedPropertyPairAnimator.h */,
</span><span class="cx">                          55EE535B223B2A0C00FBA944 /* SVGAnimatedPropertyPairAnimatorImpl.h */,
</span><del>-                               088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */,
-                               55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */,
</del><span class="cx">                           721443452240C8BA00F12FF7 /* SVGAnimatedValueProperty.h */,
</span><span class="cx">                          55BE025F223B29C50032F08A /* SVGAnimationAdditiveFunction.h */,
</span><span class="cx">                          7266F029224312B100833975 /* SVGAnimationAdditiveListFunction.h */,
</span><span class="lines">@@ -16016,23 +15983,12 @@
</span><span class="cx">                          55DCC51D2240615500C26E32 /* SVGAnimationDiscreteFunction.h */,
</span><span class="cx">                          55DCC51C2240605E00C26E32 /* SVGAnimationDiscreteFunctionImpl.h */,
</span><span class="cx">                          55BE025B223B29C20032F08A /* SVGAnimationFunction.h */,
</span><del>-                               55FA7FEF210FA386005AEFE7 /* SVGAttribute.h */,
-                               55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */,
</del><span class="cx">                           55EE5361223B2A2200FBA944 /* SVGAttributeAnimator.cpp */,
</span><span class="cx">                          55EE5364223B2A2400FBA944 /* SVGAttributeAnimator.h */,
</span><del>-                               7A3EBEAC21BF0921000D043D /* SVGAttributeOwnerProxy.cpp */,
-                               55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */,
-                               55346AFA2117FFAF0059BCDD /* SVGAttributeOwnerProxyImpl.h */,
-                               55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */,
</del><span class="cx">                           5553592122441B97008F5EC9 /* SVGDecoratedEnumeration.h */,
</span><span class="cx">                          5553592222441BE9008F5EC9 /* SVGDecoratedPrimitive.h */,
</span><span class="cx">                          5553592322441C18008F5EC9 /* SVGDecoratedProperty.h */,
</span><del>-                               55D70D21223B00BB00044B8E /* SVGLegacyAnimatedProperty.cpp */,
-                               55D70D20223B009100044B8E /* SVGLegacyAnimatedProperty.h */,
-                               55D70D22223B00EA00044B8E /* SVGLegacyProperty.h */,
</del><span class="cx">                           55DCC523224073FE00C26E32 /* SVGList.h */,
</span><del>-                               0810764312828556007C63BA /* SVGListProperty.h */,
-                               088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */,
</del><span class="cx">                           55EE5354223B29E900FBA944 /* SVGMemberAccessor.h */,
</span><span class="cx">                          55BE025A223B29C20032F08A /* SVGPointerMemberAccessor.h */,
</span><span class="cx">                          55DCC5252240749E00C26E32 /* SVGPrimitiveList.h */,
</span><span class="lines">@@ -16047,7 +16003,6 @@
</span><span class="cx">                          55EE5360223B2A2100FBA944 /* SVGPropertyOwner.h */,
</span><span class="cx">                          55BE025C223B29C30032F08A /* SVGPropertyOwnerRegistry.h */,
</span><span class="cx">                          55BE0257223B29C00032F08A /* SVGPropertyRegistry.h */,
</span><del>-                               088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */,
</del><span class="cx">                           088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
</span><span class="cx">                          721443462240CAD200F12FF7 /* SVGValueProperty.h */,
</span><span class="cx">                          72FB238622497AD5007E5AC7 /* SVGValuePropertyAnimator.h */,
</span><span class="lines">@@ -23805,10 +23760,6 @@
</span><span class="cx">                          B22278010D00BF1F0071B782 /* SVGAnimationElement.cpp */,
</span><span class="cx">                          B22278020D00BF1F0071B782 /* SVGAnimationElement.h */,
</span><span class="cx">                          B22278030D00BF1F0071B782 /* SVGAnimationElement.idl */,
</span><del>-                               723F97BC2238EE08007F079C /* SVGAttributeAnimationController.cpp */,
-                               723F97BD2238EE08007F079C /* SVGAttributeAnimationController.h */,
-                               723F97C122397725007F079C /* SVGAttributeAnimationControllerBase.cpp */,
-                               723F97C022396B88007F079C /* SVGAttributeAnimationControllerBase.h */,
</del><span class="cx">                           B22278040D00BF1F0071B782 /* svgattrs.in */,
</span><span class="cx">                          B22278050D00BF1F0071B782 /* SVGCircleElement.cpp */,
</span><span class="cx">                          B22278060D00BF1F0071B782 /* SVGCircleElement.h */,
</span><span class="lines">@@ -31507,19 +31458,12 @@
</span><span class="cx">                          24D912B813CA9A6900D21915 /* SVGAltGlyphItemElement.h in Headers */,
</span><span class="cx">                          B22279770D00BF220071B782 /* SVGAngle.h in Headers */,
</span><span class="cx">                          B222797A0D00BF220071B782 /* SVGAnimateColorElement.h in Headers */,
</span><del>-                               088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */,
</del><span class="cx">                           088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */,
</span><del>-                               088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */,
-                               55FA7FFF21110E6E005AEFE7 /* SVGAnimatedPropertyType.h in Headers */,
</del><span class="cx">                           B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
</span><span class="cx">                          832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */,
</span><span class="cx">                          B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
</span><span class="cx">                          B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
</span><span class="cx">                          B22279980D00BF220071B782 /* SVGAnimationElement.h in Headers */,
</span><del>-                               55FA7FF0210FA386005AEFE7 /* SVGAttribute.h in Headers */,
-                               55FA7FF5210FB6B1005AEFE7 /* SVGAttributeAccessor.h in Headers */,
-                               55346AF121150FAF0059BCDD /* SVGAttributeOwnerProxy.h in Headers */,
-                               55FA7FF7210FBE3E005AEFE7 /* SVGAttributeRegistry.h in Headers */,
</del><span class="cx">                           B222799C0D00BF220071B782 /* SVGCircleElement.h in Headers */,
</span><span class="cx">                          B222799F0D00BF220071B782 /* SVGClipPathElement.h in Headers */,
</span><span class="cx">                          B22279A50D00BF220071B782 /* SVGComponentTransferFunctionElement.h in Headers */,
</span><span class="lines">@@ -31588,7 +31532,6 @@
</span><span class="cx">                          0854B01F1255E4E600B9CDD0 /* SVGInlineFlowBox.h in Headers */,
</span><span class="cx">                          0854B0211255E4E600B9CDD0 /* SVGInlineTextBox.h in Headers */,
</span><span class="cx">                          B2227A300D00BF220071B782 /* SVGLangSpace.h in Headers */,
</span><del>-                               55D70D23223B017C00044B8E /* SVGLegacyAnimatedProperty.h in Headers */,
</del><span class="cx">                           7134496E146941B300720312 /* SVGLengthContext.h in Headers */,
</span><span class="cx">                          B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */,
</span><span class="cx">                          7CCEBFC01DD8F6AB002C40B8 /* SVGLengthValue.h in Headers */,
</span><span class="lines">@@ -31595,8 +31538,6 @@
</span><span class="cx">                          B2227A390D00BF220071B782 /* SVGLinearGradientElement.h in Headers */,
</span><span class="cx">                          B2227A3C0D00BF220071B782 /* SVGLineElement.h in Headers */,
</span><span class="cx">                          55DCC52922407B2A00C26E32 /* SVGList.h in Headers */,
</span><del>-                               0810764412828556007C63BA /* SVGListProperty.h in Headers */,
-                               088A0E09126EF1DB00978F7A /* SVGListPropertyTearOff.h in Headers */,
</del><span class="cx">                           B2227A410D00BF220071B782 /* SVGLocatable.h in Headers */,
</span><span class="cx">                          436708EE12D9CA4B00044234 /* SVGMarkerData.h in Headers */,
</span><span class="cx">                          B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */,
</span><span class="lines">@@ -31637,7 +31578,6 @@
</span><span class="cx">                          55DCC52822407B2000C26E32 /* SVGPrimitiveList.h in Headers */,
</span><span class="cx">                          72144333223EC8B000F12FF7 /* SVGProperty.h in Headers */,
</span><span class="cx">                          72144334223EC91600F12FF7 /* SVGPropertyOwner.h in Headers */,
</span><del>-                               088A0E0B126EF1DB00978F7A /* SVGPropertyTearOff.h in Headers */,
</del><span class="cx">                           088A0E0C126EF1DB00978F7A /* SVGPropertyTraits.h in Headers */,
</span><span class="cx">                          B2227A9A0D00BF220071B782 /* SVGRadialGradientElement.h in Headers */,
</span><span class="cx">                          08EDE19F12A50B8E00B95797 /* SVGRect.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.cpp     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/dom/Element.cpp        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -480,11 +480,9 @@
</span><span class="cx">         ASSERT(isStyledElement());
</span><span class="cx">         static_cast<const StyledElement*>(this)->synchronizeStyleAttributeInternal();
</span><span class="cx">     }
</span><del>-
-    if (elementData()->animatedSVGAttributesAreDirty()) {
-        ASSERT(isSVGElement());
-        downcast<SVGElement>(*this).synchronizeAnimatedSVGAttribute(anyQName());
-    }
</del><ins>+    
+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAllAttributes();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ALWAYS_INLINE void Element::synchronizeAttribute(const QualifiedName& name) const
</span><span class="lines">@@ -497,10 +495,8 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (UNLIKELY(elementData()->animatedSVGAttributesAreDirty())) {
-        ASSERT(isSVGElement());
-        downcast<SVGElement>(*this).synchronizeAnimatedSVGAttribute(name);
-    }
</del><ins>+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAttribute(name);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static ALWAYS_INLINE bool isStyleAttribute(const Element& element, const AtomicString& attributeLocalName)
</span><span class="lines">@@ -521,11 +517,9 @@
</span><span class="cx">         static_cast<const StyledElement*>(this)->synchronizeStyleAttributeInternal();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    if (elementData()->animatedSVGAttributesAreDirty()) {
-        // We're not passing a namespace argument on purpose. SVGNames::*Attr are defined w/o namespaces as well.
-        ASSERT_WITH_SECURITY_IMPLICATION(isSVGElement());
-        downcast<SVGElement>(*this).synchronizeAnimatedSVGAttribute(QualifiedName(nullAtom(), localName, nullAtom()));
-    }
</del><ins>+
+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAttribute(QualifiedName(nullAtom(), localName, nullAtom()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const AtomicString& Element::getAttribute(const QualifiedName& name) const
</span><span class="lines">@@ -3596,7 +3590,7 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     if (isSVGElement())
</span><del>-        return !downcast<SVGElement>(*this).isAnimatableAttribute(name);
</del><ins>+        return !downcast<SVGElement>(*this).isAnimatedPropertyAttribute(name);
</ins><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGResourceGradientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -104,7 +104,7 @@
</span><span class="cx">     // synchronization to kick in, which causes removeAllClientsFromCache() to be called, which in turn deletes our
</span><span class="cx">     // GradientData object! Leaving out the line below will cause svg/dynamic-updates/SVG*GradientElement-svgdom* to crash.
</span><span class="cx">     if (m_shouldCollectGradientAttributes) {
</span><del>-        gradientElement().synchronizeAnimatedSVGAttribute(anyQName());
</del><ins>+        gradientElement().synchronizeAllAttributes();
</ins><span class="cx">         if (!collectGradientAttributes())
</span><span class="cx">             return false;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGResourcePatterncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">     ASSERT(!resourceMode.isEmpty());
</span><span class="cx"> 
</span><span class="cx">     if (m_shouldCollectPatternAttributes) {
</span><del>-        patternElement().synchronizeAnimatedSVGAttribute(anyQName());
</del><ins>+        patternElement().synchronizeAllAttributes();
</ins><span class="cx"> 
</span><span class="cx">         m_attributes = PatternAttributes();
</span><span class="cx">         collectPatternAttributes(m_attributes);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -39,9 +39,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGAElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -64,7 +61,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool willRespondToMouseClickEvents() final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_target { SVGAnimatedString::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAltGlyphElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAltGlyphElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAltGlyphElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAltGlyphElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -45,9 +45,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGAltGlyphElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAltGlyphElement, SVGTextPositioningElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAltGlyphElement, SVGTextPositioningElement, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -54,7 +51,6 @@
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
</span><span class="cx">     bool childShouldCreateRenderer(const Node&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> #include "SVGAnimateElementBase.h"
</span><span class="cx"> 
</span><span class="cx"> #include "QualifiedName.h"
</span><del>-#include "SVGAttributeAnimationController.h"
</del><ins>+#include "SVGAttributeAnimator.h"
</ins><span class="cx"> #include "SVGElement.h"
</span><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include <wtf/IsoMallocInlines.h>
</span><span class="lines">@@ -37,20 +37,21 @@
</span><span class="cx"> SVGAnimateElementBase::SVGAnimateElementBase(const QualifiedName& tagName, Document& document)
</span><span class="cx">     : SVGAnimationElement(tagName, document)
</span><span class="cx"> {
</span><del>-    ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
</del><ins>+    ASSERT(hasTagName(SVGNames::animateTag)
+        || hasTagName(SVGNames::setTag)
+        || hasTagName(SVGNames::animateColorTag)
+        || hasTagName(SVGNames::animateTransformTag));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGAnimateElementBase::~SVGAnimateElementBase() = default;
-
-SVGAttributeAnimationControllerBase& SVGAnimateElementBase::attributeAnimationController()
</del><ins>+SVGAttributeAnimator* SVGAnimateElementBase::animator() const
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(targetElement());
</span><span class="cx">     ASSERT(!hasInvalidCSSAttributeType());
</span><span class="cx"> 
</span><del>-    if (!m_attributeAnimationController)
-        m_attributeAnimationController = std::make_unique<SVGAttributeAnimationController>(*this, *targetElement());
</del><ins>+    if (!m_animator)
+        m_animator = targetElement()->createAnimator(attributeName(), animationMode(), calcMode(), isAccumulated(), isAdditive());
</ins><span class="cx"> 
</span><del>-    return *m_attributeAnimationController;
</del><ins>+    return m_animator.get();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGAnimateElementBase::hasValidAttributeType() const
</span><span class="lines">@@ -61,35 +62,51 @@
</span><span class="cx">     return targetElement()->isAnimatedAttribute(attributeName());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-AnimatedPropertyType SVGAnimateElementBase::determineAnimatedPropertyType(SVGElement& targetElement) const
</del><ins>+bool SVGAnimateElementBase::hasInvalidCSSAttributeType() const
</ins><span class="cx"> {
</span><del>-    return SVGAttributeAnimationControllerBase::determineAnimatedPropertyType(*this, targetElement, attributeName());
</del><ins>+    if (!targetElement())
+        return false;
+
+    if (!m_hasInvalidCSSAttributeType)
+        m_hasInvalidCSSAttributeType = hasValidAttributeName() && attributeType() == AttributeType::CSS && !isTargetAttributeCSSProperty(targetElement(), attributeName());
+
+    return m_hasInvalidCSSAttributeType.value();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGAnimateElementBase::isDiscreteAnimator() const
</span><span class="cx"> {
</span><del>-    return hasValidAttributeType() && attributeAnimationControllerIfExists() && attributeAnimationControllerIfExists()->isDiscreteAnimator();
</del><ins>+    return hasValidAttributeType() && animatorIfExists() && animatorIfExists()->isDiscrete();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
</del><ins>+void SVGAnimateElementBase::setTargetElement(SVGElement* target)
</ins><span class="cx"> {
</span><del>-    if (!targetElement())
-        return;
-    attributeAnimationController().calculateAnimatedValue(percentage, repeatCount, resultElement);
</del><ins>+    SVGAnimationElement::setTargetElement(target);
+    resetAnimation();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
</del><ins>+void SVGAnimateElementBase::setAttributeName(const QualifiedName& attributeName)
</ins><span class="cx"> {
</span><del>-    if (!targetElement())
-        return false;
-    return attributeAnimationController().calculateToAtEndOfDurationValue(animateRangeString(toAtEndOfDurationString));
</del><ins>+    SVGSMILElement::setAttributeName(attributeName);
+    resetAnimation();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void SVGAnimateElementBase::resetAnimation()
+{
+    SVGAnimationElement::resetAnimation();
+    m_animator = nullptr;
+    m_hasInvalidCSSAttributeType = { };
+}
+
</ins><span class="cx"> bool SVGAnimateElementBase::calculateFromAndToValues(const String& fromString, const String& toString)
</span><span class="cx"> {
</span><span class="cx">     if (!targetElement())
</span><span class="cx">         return false;
</span><del>-    return attributeAnimationController().calculateFromAndToValues(animateRangeString(fromString), animateRangeString(toString));
</del><ins>+
+    if (auto* animator = this->animator()) {
+        animator->setFromAndToValues(targetElement(), animateRangeString(fromString), animateRangeString(toString));
+        return true;
+    }
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGAnimateElementBase::calculateFromAndByValues(const String& fromString, const String& byString)
</span><span class="lines">@@ -96,81 +113,88 @@
</span><span class="cx"> {
</span><span class="cx">     if (!this->targetElement())
</span><span class="cx">         return false;
</span><del>-    return attributeAnimationController().calculateFromAndByValues(animateRangeString(fromString), animateRangeString(byString));
</del><ins>+
+    if (animationMode() == AnimationMode::By && (!isAdditive() || isDiscreteAnimator()))
+        return false;
+
+    if (animationMode() == AnimationMode::FromBy && isDiscreteAnimator())
+        return false;
+
+    if (auto* animator = this->animator()) {
+        animator->setFromAndByValues(targetElement(), animateRangeString(fromString), animateRangeString(byString));
+        return true;
+    }
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::resetAnimatedType()
</del><ins>+bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
</ins><span class="cx"> {
</span><del>-    if (!targetElement())
-        return;
-    attributeAnimationController().resetAnimatedType();
</del><ins>+    if (!targetElement() || toAtEndOfDurationString.isEmpty())
+        return false;
+
+    if (isDiscreteAnimator())
+        return true;
+
+    if (auto* animator = this->animator()) {
+        animator->setToAtEndOfDurationValue(animateRangeString(toAtEndOfDurationString));
+        return true;
+    }
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
</del><ins>+void SVGAnimateElementBase::resetAnimatedType()
</ins><span class="cx"> {
</span><del>-    if (!targetElement)
</del><ins>+    if (!targetElement())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (auto* controller = attributeAnimationControllerIfExists())
-        controller->clearAnimatedType(targetElement);
</del><ins>+    if (auto* animator = this->animator())
+        animator->start(targetElement());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::applyResultsToTarget()
</del><ins>+void SVGAnimateElementBase::calculateAnimatedValue(float progress, unsigned repeatCount, SVGSMILElement*)
</ins><span class="cx"> {
</span><span class="cx">     if (!targetElement())
</span><span class="cx">         return;
</span><del>-    attributeAnimationController().applyResultsToTarget();
-}
</del><span class="cx"> 
</span><del>-bool SVGAnimateElementBase::isAdditive() const
-{
-    if (animationMode() == AnimationMode::By || animationMode() == AnimationMode::FromBy) {
-        if (auto* controller = attributeAnimationControllerIfExists()) {
-            if (!controller->isAdditive())
-                return false;
-        }
-    }
</del><ins>+    ASSERT(progress >= 0 && progress <= 1);
+    if (hasTagName(SVGNames::setTag))
+        progress = 1;
</ins><span class="cx"> 
</span><del>-    return SVGAnimationElement::isAdditive();
</del><ins>+    if (calcMode() == CalcMode::Discrete)
+        progress = progress < 0.5 ? 0 : 1;
+
+    if (auto* animator = this->animator())
+        animator->animate(targetElement(), progress, repeatCount);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-float SVGAnimateElementBase::calculateDistance(const String& fromString, const String& toString)
</del><ins>+void SVGAnimateElementBase::applyResultsToTarget()
</ins><span class="cx"> {
</span><del>-    // FIXME: A return value of float is not enough to support paced animations on lists.
</del><span class="cx">     if (!targetElement())
</span><del>-        return -1;
</del><ins>+        return;
</ins><span class="cx"> 
</span><del>-    return attributeAnimationController().calculateDistance(fromString, toString);
</del><ins>+    if (auto* animator = this->animator())
+        animator->apply(targetElement());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::setTargetElement(SVGElement* target)
</del><ins>+void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
</ins><span class="cx"> {
</span><del>-    SVGAnimationElement::setTargetElement(target);
-    resetAnimation();
-}
</del><ins>+    if (!targetElement)
+        return;
</ins><span class="cx"> 
</span><del>-void SVGAnimateElementBase::setAttributeName(const QualifiedName& attributeName)
-{
-    SVGSMILElement::setAttributeName(attributeName);
-    resetAnimation();
</del><ins>+    if (auto* animator = this->animatorIfExists())
+        animator->stop(targetElement);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGAnimateElementBase::resetAnimation()
</del><ins>+Optional<float> SVGAnimateElementBase::calculateDistance(const String& fromString, const String& toString)
</ins><span class="cx"> {
</span><del>-    SVGAnimationElement::resetAnimation();
-    m_attributeAnimationController = nullptr;
-    m_hasInvalidCSSAttributeType = WTF::nullopt;
-}
-
-bool SVGAnimateElementBase::hasInvalidCSSAttributeType() const
-{
</del><ins>+    // FIXME: A return value of float is not enough to support paced animations on lists.
</ins><span class="cx">     if (!targetElement())
</span><del>-        return false;
</del><ins>+        return { };
</ins><span class="cx"> 
</span><del>-    if (!m_hasInvalidCSSAttributeType)
-        m_hasInvalidCSSAttributeType = hasValidAttributeName() && attributeType() == AttributeType::CSS && !isTargetAttributeCSSProperty(targetElement(), attributeName());
</del><ins>+    if (auto* animator = this->animator())
+        return animator->calculateDistance(targetElement(), fromString, toString);
</ins><span class="cx"> 
</span><del>-    return m_hasInvalidCSSAttributeType.value();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElementBase.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
</span><span class="cx">  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
</span><del>- * Copyright (C) 2008 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) Research In Motion Limited 2011. All rights reserved.
</span><span class="cx">  * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
</span><span class="cx">  *
</span><span class="lines">@@ -28,46 +28,42 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGAttributeAnimationControllerBase;
</del><ins>+class SVGAttributeAnimator;
</ins><span class="cx"> 
</span><span class="cx"> class SVGAnimateElementBase : public SVGAnimationElement {
</span><span class="cx">     WTF_MAKE_ISO_ALLOCATED(SVGAnimateElementBase);
</span><span class="cx"> public:
</span><del>-    virtual ~SVGAnimateElementBase();
-
-    SVGAttributeAnimationControllerBase& attributeAnimationController();
-    SVGAttributeAnimationControllerBase* attributeAnimationControllerIfExists() const { return m_attributeAnimationController.get(); }
-
-    AnimatedPropertyType determineAnimatedPropertyType(SVGElement&) const;
</del><span class="cx">     bool isDiscreteAnimator() const;
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     SVGAnimateElementBase(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><ins>+    SVGAttributeAnimator* animator() const;
+    SVGAttributeAnimator* animatorIfExists() const { return m_animator.get(); }
+
</ins><span class="cx">     bool hasValidAttributeType() const override;
</span><span class="cx"> 
</span><del>-    void resetAnimatedType() override;
-    void clearAnimatedType(SVGElement* targetElement) override;
</del><ins>+    void setTargetElement(SVGElement*) override;
+    void setAttributeName(const QualifiedName&) override;
+    void resetAnimation() override;
</ins><span class="cx"> 
</span><del>-    bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
</del><span class="cx">     bool calculateFromAndToValues(const String& fromString, const String& toString) override;
</span><span class="cx">     bool calculateFromAndByValues(const String& fromString, const String& byString) override;
</span><del>-    void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
</del><ins>+    bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
+
+    void resetAnimatedType() override;
+    void calculateAnimatedValue(float progress, unsigned repeatCount, SVGSMILElement* resultElement) override;
</ins><span class="cx">     void applyResultsToTarget() override;
</span><del>-    float calculateDistance(const String& fromString, const String& toString) override;
-    bool isAdditive() const override;
</del><ins>+    void clearAnimatedType(SVGElement* targetElement) override;
+    Optional<float> calculateDistance(const String& fromString, const String& toString) override;
</ins><span class="cx"> 
</span><del>-    void setTargetElement(SVGElement*) override;
-    void setAttributeName(const QualifiedName&) override;
-    void resetAnimation() override;
-
</del><span class="cx">     virtual String animateRangeString(const String& string) const { return string; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     bool hasInvalidCSSAttributeType() const;
</span><span class="cx"> 
</span><ins>+    mutable std::unique_ptr<SVGAttributeAnimator> m_animator;
</ins><span class="cx">     mutable Optional<bool> m_hasInvalidCSSAttributeType;
</span><del>-    std::unique_ptr<SVGAttributeAnimationControllerBase> m_attributeAnimationController;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateMotionElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateMotionElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateMotionElement.cpp     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimateMotionElement.cpp        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -273,14 +273,14 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-float SVGAnimateMotionElement::calculateDistance(const String& fromString, const String& toString)
</del><ins>+Optional<float> SVGAnimateMotionElement::calculateDistance(const String& fromString, const String& toString)
</ins><span class="cx"> {
</span><span class="cx">     FloatPoint from;
</span><span class="cx">     FloatPoint to;
</span><span class="cx">     if (!parsePoint(fromString, from))
</span><del>-        return -1;
</del><ins>+        return { };
</ins><span class="cx">     if (!parsePoint(toString, to))
</span><del>-        return -1;
</del><ins>+        return { };
</ins><span class="cx">     FloatSize diff = to - from;
</span><span class="cx">     return sqrtf(diff.width() * diff.width() + diff.height() * diff.height());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateMotionElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateMotionElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateMotionElement.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimateMotionElement.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     bool calculateFromAndByValues(const String& fromString, const String& byString) override;
</span><span class="cx">     void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
</span><span class="cx">     void applyResultsToTarget() override;
</span><del>-    float calculateDistance(const String& fromString, const String& toString) override;
</del><ins>+    Optional<float> calculateDistance(const String& fromString, const String& toString) override;
</ins><span class="cx"> 
</span><span class="cx">     enum RotateMode {
</span><span class="cx">         RotateAngle,
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimationElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimationElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimationElement.cpp 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimationElement.cpp    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -341,26 +341,6 @@
</span><span class="cx">     return targetElement->isAnimatedStyleAttribute(attributeName);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGAnimationElement::ShouldApplyAnimation SVGAnimationElement::shouldApplyAnimation(SVGElement* targetElement, const QualifiedName& attributeName)
-{
-    if (!hasValidAttributeType() || !targetElement || attributeName == anyQName())
-        return DontApplyAnimation;
-
-    // Always animate CSS properties, using the ApplyCSSAnimation code path, regardless of the attributeType value.
-    if (isTargetAttributeCSSProperty(targetElement, attributeName)) {
-        if (targetElement->isPresentationAttributeWithSVGDOM(attributeName))
-            return ApplyXMLandCSSAnimation;
-        return ApplyCSSAnimation;
-    }
-
-
-    // If attributeType="CSS" and attributeName doesn't point to a CSS property, ignore the animation.
-    if (attributeType() == AttributeType::CSS)
-        return DontApplyAnimation;
-
-    return ApplyXMLAnimation;
-}
-
</del><span class="cx"> void SVGAnimationElement::calculateKeyTimesForCalcModePaced()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(calcMode() == CalcMode::Paced);
</span><span class="lines">@@ -379,11 +359,11 @@
</span><span class="cx">     keyTimesForPaced.append(0);
</span><span class="cx">     for (unsigned n = 0; n < valuesCount - 1; ++n) {
</span><span class="cx">         // Distance in any units
</span><del>-        float distance = calculateDistance(m_values[n], m_values[n + 1]);
-        if (distance < 0)
</del><ins>+        auto distance = calculateDistance(m_values[n], m_values[n + 1]);
+        if (!distance)
</ins><span class="cx">             return;
</span><del>-        totalDistance += distance;
-        keyTimesForPaced.append(distance);
</del><ins>+        totalDistance += *distance;
+        keyTimesForPaced.append(*distance);
</ins><span class="cx">     }
</span><span class="cx">     if (!totalDistance)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimationElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimationElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimationElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAnimationElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -57,15 +57,6 @@
</span><span class="cx">     AnimationMode animationMode() const { return m_animationMode; }
</span><span class="cx">     CalcMode calcMode() const { return m_calcMode; }
</span><span class="cx"> 
</span><del>-    enum ShouldApplyAnimation {
-        DontApplyAnimation,
-        ApplyCSSAnimation,
-        ApplyXMLAnimation,
-        ApplyXMLandCSSAnimation // For presentation attributes with SVG DOM properties.
-    };
-
-    ShouldApplyAnimation shouldApplyAnimation(SVGElement* targetElement, const QualifiedName& attributeName);
-
</del><span class="cx">     AnimatedPropertyValueType fromPropertyValueType() const { return m_fromPropertyValueType; }
</span><span class="cx">     AnimatedPropertyValueType toPropertyValueType() const { return m_toPropertyValueType; }
</span><span class="cx"> 
</span><span class="lines">@@ -95,10 +86,6 @@
</span><span class="cx"> protected:
</span><span class="cx">     SVGAnimationElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAnimationElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAnimationElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -135,7 +122,7 @@
</span><span class="cx">     virtual bool calculateFromAndToValues(const String& fromString, const String& toString) = 0;
</span><span class="cx">     virtual bool calculateFromAndByValues(const String& fromString, const String& byString) = 0;
</span><span class="cx">     virtual void calculateAnimatedValue(float percent, unsigned repeatCount, SVGSMILElement* resultElement) = 0;
</span><del>-    virtual float calculateDistance(const String& /*fromString*/, const String& /*toString*/) { return -1.f; }
</del><ins>+    virtual Optional<float> calculateDistance(const String& /*fromString*/, const String& /*toString*/) = 0;
</ins><span class="cx"> 
</span><span class="cx">     void currentValuesForValuesAnimation(float percent, float& effectivePercent, String& from, String& to);
</span><span class="cx">     void calculateKeyTimesForCalcModePaced();
</span><span class="lines">@@ -158,7 +145,6 @@
</span><span class="cx">     String m_lastValuesAnimationTo;
</span><span class="cx">     CalcMode m_calcMode { CalcMode::Linear };
</span><span class="cx">     AnimationMode m_animationMode { AnimationMode::None };
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAttributeAnimationControllercpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAttributeAnimationController.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAttributeAnimationController.cpp     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAttributeAnimationController.cpp        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,148 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018-2019 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SVGAttributeAnimationController.h"
-
-#include "QualifiedName.h"
-#include "SVGAnimationElement.h"
-#include "SVGAttributeAnimator.h"
-#include "SVGElement.h"
-
-namespace WebCore {
-
-SVGAttributeAnimationController::SVGAttributeAnimationController(SVGAnimationElement& animationElement, SVGElement& targetElement)
-    : SVGAttributeAnimationControllerBase(animationElement, targetElement)
-{
-}
-    
-SVGAttributeAnimationController::~SVGAttributeAnimationController()
-{
-    if (m_animator)
-        m_targetElement.animatorWillBeDeleted(m_animationElement.attributeName());
-}
-
-SVGAttributeAnimator* SVGAttributeAnimationController::animator() const
-{
-    if (!m_animator)
-        m_animator = m_targetElement.createAnimator(m_animationElement.attributeName(), m_animationElement.animationMode(), m_animationElement.calcMode(), m_animationElement.isAccumulated(), m_animationElement.isAdditive());
-
-    return m_animator.get();
-}
-
-bool SVGAttributeAnimationController::isDiscreteAnimator() const
-{
-    return hasValidAttributeType() && animatorIfExists() && animatorIfExists()->isDiscrete();
-}
-
-bool SVGAttributeAnimationController::isAdditive() const
-{
-    return !isDiscreteAnimator();
-}
-    
-bool SVGAttributeAnimationController::hasValidAttributeType() const
-{
-    return m_targetElement.isAnimatedAttribute(m_animationElement.attributeName());
-}
-
-bool SVGAttributeAnimationController::calculateFromAndToValues(const String& from, const String& to)
-{
-    if (auto* animator = this->animator()) {
-        animator->setFromAndToValues(&m_targetElement, from, to);
-        return true;
-    }
-    return false;
-}
-
-bool SVGAttributeAnimationController::calculateFromAndByValues(const String& from, const String& by)
-{
-    if (m_animationElement.animationMode() == AnimationMode::By && (!isAdditive() || isDiscreteAnimator()))
-        return false;
-    
-    if (m_animationElement.animationMode() == AnimationMode::FromBy && isDiscreteAnimator())
-        return false;
-
-    if (auto* animator = this->animator()) {
-        animator->setFromAndByValues(&m_targetElement, from, by);
-        return true;
-    }
-    return false;
-}
-
-bool SVGAttributeAnimationController::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
-{
-    if (toAtEndOfDurationString.isEmpty())
-        return false;
-
-    if (isDiscreteAnimator())
-        return true;
-
-    if (auto* animator = this->animator()) {
-        animator->setToAtEndOfDurationValue(toAtEndOfDurationString);
-        return true;
-    }
-    return false;
-}
-
-void SVGAttributeAnimationController::resetAnimatedType()
-{
-    if (auto* animator = this->animator())
-        animator->start(&m_targetElement);
-}
-
-void SVGAttributeAnimationController::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement*)
-{
-    ASSERT(percentage >= 0 && percentage <= 1);
-    if (m_animationElement.hasTagName(SVGNames::setTag))
-        percentage = 1;
-
-    if (m_animationElement.calcMode() == CalcMode::Discrete)
-        percentage = percentage < 0.5 ? 0 : 1;
-
-    if (auto* animator = this->animator())
-        animator->progress(&m_targetElement, percentage, repeatCount);
-}
-
-void SVGAttributeAnimationController::applyResultsToTarget()
-{
-    if (auto* animator = this->animator())
-        animator->apply(&m_targetElement);
-}
-
-void SVGAttributeAnimationController::clearAnimatedType(SVGElement* targetElement)
-{
-    if (auto* animator = this->animatorIfExists())
-        animator->stop(targetElement);
-}
-
-float SVGAttributeAnimationController::calculateDistance(const String& from, const String& to)
-{
-    // FIXME: A return value of float is not enough to support paced animations on lists.
-    if (auto* animator = this->animator())
-        return animator->calculateDistance(&m_targetElement, from, to);
-    return -1;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAttributeAnimationControllerh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAttributeAnimationController.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAttributeAnimationController.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAttributeAnimationController.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,65 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018-2019 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "SVGAttributeAnimationControllerBase.h"
-
-namespace WebCore {
-
-class SVGAnimationElement;
-class SVGAttributeAnimator;
-class SVGElement;
-class SVGSMILElement;
-
-class SVGAttributeAnimationController : public SVGAttributeAnimationControllerBase {
-public:
-    SVGAttributeAnimationController(SVGAnimationElement&, SVGElement&);
-    ~SVGAttributeAnimationController();
-    
-private:
-    SVGAttributeAnimator* animator() const;
-    SVGAttributeAnimator* animatorIfExists() const { return m_animator.get(); }
-
-    void resetAnimatedType() override;
-    void clearAnimatedType(SVGElement* targetElement) override;
-    
-    bool calculateFromAndToValues(const String& fromString, const String& toString) override;
-    bool calculateFromAndByValues(const String& fromString, const String& byString) override;
-    bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
-
-    void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
-
-    void applyResultsToTarget() override;
-    float calculateDistance(const String& fromString, const String& toString) override;
-    
-    bool isAdditive() const override;
-    bool hasValidAttributeType() const override;
-    bool isDiscreteAnimator() const override;
-
-    mutable std::unique_ptr<SVGAttributeAnimator> m_animator;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAttributeAnimationControllerBasecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,69 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018-2019 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SVGAttributeAnimationControllerBase.h"
-
-#include "SVGAnimationElement.h"
-#include "SVGElement.h"
-
-namespace WebCore {
-
-SVGAttributeAnimationControllerBase::SVGAttributeAnimationControllerBase(SVGAnimationElement& animationElement, SVGElement& targetElement)
-    : m_animationElement(animationElement)
-    , m_targetElement(targetElement)
-{
-}
-
-AnimatedPropertyType SVGAttributeAnimationControllerBase::determineAnimatedPropertyType(const SVGAnimationElement& animationElement, SVGElement& targetElement, const QualifiedName& attributeName)
-{
-    auto propertyTypes = targetElement.animatedPropertyTypesForAttribute(attributeName);
-    if (propertyTypes.isEmpty())
-        return AnimatedUnknown;
-
-    ASSERT(propertyTypes.size() <= 2);
-    AnimatedPropertyType type = propertyTypes[0];
-    if (animationElement.hasTagName(SVGNames::animateColorTag) && type != AnimatedColor)
-        return AnimatedUnknown;
-
-    // Animations of transform lists are not allowed for <animate> or <set>
-    // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
-    if (type == AnimatedTransformList && !animationElement.hasTagName(SVGNames::animateTransformTag))
-        return AnimatedUnknown;
-
-    // Fortunately there's just one special case needed here: SVGMarkerElements orientAttr, which
-    // corresponds to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType. We have to
-    // figure out whose value to change here.
-    if (targetElement.hasTagName(SVGNames::markerTag) && type == AnimatedAngle) {
-        ASSERT(propertyTypes.size() == 2);
-        ASSERT(propertyTypes[0] == AnimatedAngle);
-        ASSERT(propertyTypes[1] == AnimatedEnumeration);
-    } else if (propertyTypes.size() == 2)
-        ASSERT(propertyTypes[0] == propertyTypes[1]);
-
-    return type;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAttributeAnimationControllerBaseh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,66 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018-2019 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "QualifiedName.h"
-#include "SVGAnimatedPropertyType.h"
-
-namespace WebCore {
-
-class SVGAnimationElement;
-class SVGElement;
-class SVGSMILElement;
-
-class SVGAttributeAnimationControllerBase {
-public:
-    SVGAttributeAnimationControllerBase(SVGAnimationElement&, SVGElement&);
-    virtual ~SVGAttributeAnimationControllerBase() = default;
-
-    static AnimatedPropertyType determineAnimatedPropertyType(const SVGAnimationElement&, SVGElement&, const QualifiedName&);
-
-    virtual bool isAdditive() const = 0;
-    virtual bool hasValidAttributeType() const = 0;
-    virtual bool isDiscreteAnimator() const = 0;
-    
-    virtual void resetAnimatedType() = 0;
-    virtual void clearAnimatedType(SVGElement* targetElement) = 0;
-    
-    virtual bool calculateFromAndToValues(const String& fromString, const String& toString) = 0;
-    virtual bool calculateFromAndByValues(const String& fromString, const String& byString) = 0;
-    virtual bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) = 0;
-
-    virtual void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) = 0;
-    virtual void applyResultsToTarget() = 0;
-    
-    virtual float calculateDistance(const String& fromString, const String& toString) = 0;
-    
-protected:
-    SVGAnimationElement& m_animationElement;
-    SVGElement& m_targetElement;
-};
-
-} // namespace WebCore
-
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGCircleElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGCircleElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGCircleElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGCircleElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -43,9 +43,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGCircleElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGCircleElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCircleElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -57,7 +54,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGClipPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGClipPathElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGClipPathElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGClipPathElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -40,9 +40,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGClipPathElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGClipPathElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGClipPathElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -56,7 +53,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_clipPathUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGComponentTransferFunctionElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -91,9 +91,6 @@
</span><span class="cx"> protected:
</span><span class="cx">     SVGComponentTransferFunctionElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGComponentTransferFunctionElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGComponentTransferFunctionElement, SVGElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -103,7 +100,6 @@
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) override { return false; }
</span><span class="cx">     
</span><span class="cx"> private:
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_type { SVGAnimatedEnumeration::create(this, FECOMPONENTTRANSFER_TYPE_IDENTITY) };
</span><span class="cx">     Ref<SVGAnimatedNumberList> m_tableValues { SVGAnimatedNumberList::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGCursorElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGCursorElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGCursorElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGCursorElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -49,9 +49,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGCursorElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGCursorElement, SVGElement, SVGExternalResourcesRequired, SVGTests, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCursorElement, SVGElement, SVGExternalResourcesRequired, SVGTests, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx">     
</span><span class="lines">@@ -63,7 +60,6 @@
</span><span class="cx"> 
</span><span class="cx">     void addSubresourceAttributeURLs(ListHashSet<URL>&) const final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGDefsElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGDefsElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGDefsElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGDefsElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -34,9 +34,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGDefsElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGDefsElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGDefsElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -45,7 +42,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.cpp  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGElement.cpp     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -158,121 +158,6 @@
</span><span class="cx">     return map;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static NEVER_INLINE HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType> createAttributeNameToAnimatedPropertyTypeMap()
-{
-    using namespace HTMLNames;
-    using namespace SVGNames;
-
-    struct TableEntry {
-        const QualifiedName& attributeName;
-        AnimatedPropertyType type;
-    };
-
-    static const TableEntry table[] = {
-        { alignment_baselineAttr, AnimatedString },
-        { baseline_shiftAttr, AnimatedString },
-        { buffered_renderingAttr, AnimatedString },
-        { clipAttr, AnimatedRect },
-        { clip_pathAttr, AnimatedString },
-        { clip_ruleAttr, AnimatedString },
-        { SVGNames::colorAttr, AnimatedColor },
-        { color_interpolationAttr, AnimatedString },
-        { color_interpolation_filtersAttr, AnimatedString },
-        { color_profileAttr, AnimatedString },
-        { color_renderingAttr, AnimatedString },
-        { cursorAttr, AnimatedString },
-        { displayAttr, AnimatedString },
-        { dominant_baselineAttr, AnimatedString },
-        { fillAttr, AnimatedColor },
-        { fill_opacityAttr, AnimatedNumber },
-        { fill_ruleAttr, AnimatedString },
-        { filterAttr, AnimatedString },
-        { flood_colorAttr, AnimatedColor },
-        { flood_opacityAttr, AnimatedNumber },
-        { font_familyAttr, AnimatedString },
-        { font_sizeAttr, AnimatedLength },
-        { font_stretchAttr, AnimatedString },
-        { font_styleAttr, AnimatedString },
-        { font_variantAttr, AnimatedString },
-        { font_weightAttr, AnimatedString },
-        { image_renderingAttr, AnimatedString },
-        { kerningAttr, AnimatedLength },
-        { letter_spacingAttr, AnimatedLength },
-        { lighting_colorAttr, AnimatedColor },
-        { marker_endAttr, AnimatedString },
-        { marker_midAttr, AnimatedString },
-        { marker_startAttr, AnimatedString },
-        { maskAttr, AnimatedString },
-        { mask_typeAttr, AnimatedString },
-        { opacityAttr, AnimatedNumber },
-        { overflowAttr, AnimatedString },
-        { paint_orderAttr, AnimatedString },
-        { pointer_eventsAttr, AnimatedString },
-        { shape_renderingAttr, AnimatedString },
-        { stop_colorAttr, AnimatedColor },
-        { stop_opacityAttr, AnimatedNumber },
-        { strokeAttr, AnimatedColor },
-        { stroke_dasharrayAttr, AnimatedLengthList },
-        { stroke_dashoffsetAttr, AnimatedLength },
-        { stroke_linecapAttr, AnimatedString },
-        { stroke_linejoinAttr, AnimatedString },
-        { stroke_miterlimitAttr, AnimatedNumber },
-        { stroke_opacityAttr, AnimatedNumber },
-        { stroke_widthAttr, AnimatedLength },
-        { text_anchorAttr, AnimatedString },
-        { text_decorationAttr, AnimatedString },
-        { text_renderingAttr, AnimatedString },
-        { vector_effectAttr, AnimatedString },
-        { visibilityAttr, AnimatedString },
-        { word_spacingAttr, AnimatedLength },
-    };
-
-    HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType> map;
-    for (auto& entry : table)
-        map.add(entry.attributeName.impl(), entry.type);
-    return map;
-}
-
-static const HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType>& attributeNameToAnimatedPropertyTypeMap()
-{
-    static const auto map = makeNeverDestroyed(createAttributeNameToAnimatedPropertyTypeMap());
-    return map;
-}
-
-static NEVER_INLINE HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType> createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap()
-{
-    using namespace HTMLNames;
-    using namespace SVGNames;
-
-    struct TableEntry {
-        const QualifiedName& attributeName;
-        AnimatedPropertyType type;
-    };
-
-    static const TableEntry table[] = {
-        { cxAttr, AnimatedLength },
-        { cyAttr, AnimatedLength },
-        { rAttr, AnimatedLength },
-        { rxAttr, AnimatedLength },
-        { ryAttr, AnimatedLength },
-        { SVGNames::heightAttr, AnimatedLength },
-        { SVGNames::widthAttr, AnimatedLength },
-        { xAttr, AnimatedLength },
-        { yAttr, AnimatedLength },
-    };
-
-    HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType> map;
-    for (auto& entry : table)
-        map.add(entry.attributeName.impl(), entry.type);
-    return map;
-}
-
-static inline const HashMap<QualifiedName::QualifiedNameImpl*, AnimatedPropertyType>& cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap()
-{
-    static const auto map = makeNeverDestroyed(createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap());
-    return map;
-}
-
</del><span class="cx"> SVGElement::SVGElement(const QualifiedName& tagName, Document& document)
</span><span class="cx">     : StyledElement(tagName, document, CreateSVGElement)
</span><span class="cx">     , SVGLangSpace(this)
</span><span class="lines">@@ -480,33 +365,6 @@
</span><span class="cx">     SVGLangSpace::parseAttribute(name, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector<AnimatedPropertyType> SVGElement::animatedPropertyTypesForAttribute(const QualifiedName& attributeName)
-{
-    auto types = animatedTypes(attributeName);
-    if (!types.isEmpty())
-        return types;
-
-    {
-        auto& map = attributeNameToAnimatedPropertyTypeMap();
-        auto it = map.find(attributeName.impl());
-        if (it != map.end()) {
-            types.append(it->value);
-            return types;
-        }
-    }
-
-    {
-        auto& map = cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap();
-        auto it = map.find(attributeName.impl());
-        if (it != map.end()) {
-            types.append(it->value);
-            return types;
-        }
-    }
-
-    return types;
-}
-
</del><span class="cx"> bool SVGElement::haveLoadedRequiredResources()
</span><span class="cx"> {
</span><span class="cx">     for (auto& child : childrenOfType<SVGElement>(*this)) {
</span><span class="lines">@@ -690,42 +548,27 @@
</span><span class="cx">         svgAttributeChanged(name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGElement::synchronizeAllAnimatedSVGAttribute(SVGElement* svgElement)
</del><ins>+void SVGElement::synchronizeAttribute(const QualifiedName& name)
</ins><span class="cx"> {
</span><del>-    ASSERT(svgElement->elementData());
-    ASSERT(svgElement->elementData()->animatedSVGAttributesAreDirty());
-
-    svgElement->synchronizeAttributes();
-    svgElement->elementData()->setAnimatedSVGAttributesAreDirty(false);
</del><ins>+    // If the value of the property has changed, serialize the new value to the attribute.
+    if (auto value = propertyRegistry().synchronize(name))
+        setSynchronizedLazyAttribute(name, *value);
+}
</ins><span class="cx">     
</span><del>-    // FIXME: Delete the SVG tear off properties code from this function
-    
</del><ins>+void SVGElement::synchronizeAllAttributes()
+{
</ins><span class="cx">     // SVGPropertyRegistry::synchronizeAllAttributes() returns the new values of
</span><span class="cx">     // the properties which have changed but not committed yet.
</span><del>-    auto map = svgElement->propertyRegistry().synchronizeAllAttributes();
</del><ins>+    auto map = propertyRegistry().synchronizeAllAttributes();
</ins><span class="cx">     for (const auto& entry : map)
</span><del>-        svgElement->setSynchronizedLazyAttribute(entry.key, entry.value);
</del><ins>+        setSynchronizedLazyAttribute(entry.key, entry.value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGElement::synchronizeAnimatedSVGAttribute(const QualifiedName& name) const
</del><ins>+void SVGElement::synchronizeAllAnimatedSVGAttribute(SVGElement& svgElement)
</ins><span class="cx"> {
</span><del>-    if (!elementData() || !elementData()->animatedSVGAttributesAreDirty())
-        return;
</del><ins>+    svgElement.synchronizeAllAttributes();
+}
</ins><span class="cx"> 
</span><del>-    // FIXME: Delete the SVG tear off properties code from this function
-
-    SVGElement* nonConstThis = const_cast<SVGElement*>(this);
-    if (name == anyQName())
-        synchronizeAllAnimatedSVGAttribute(nonConstThis);
-    else {
-        // If the value of the property has changed, serialize the new value to the attribute.
-        if (auto value = propertyRegistry().synchronize(name))
-            nonConstThis->setSynchronizedLazyAttribute(name, *value);
-        else
-            nonConstThis->synchronizeAttribute(name);
-    }
-}
-    
</del><span class="cx"> void SVGElement::commitPropertyChange(SVGProperty* property)
</span><span class="cx"> {
</span><span class="cx">     // We want to dirty the top-level property when a descendant changes. For example
</span><span class="lines">@@ -988,17 +831,6 @@
</span><span class="cx">     return properties.get().get(attrName.localName().impl());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool SVGElement::isAnimatableCSSProperty(const QualifiedName& attributeName)
-{
-    return attributeNameToAnimatedPropertyTypeMap().contains(attributeName.impl())
-        || cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap().contains(attributeName.impl());
-}
-
-bool SVGElement::isPresentationAttributeWithSVGDOM(const QualifiedName& attributeName)
-{
-    return !animatedTypes(attributeName).isEmpty();
-}
-
</del><span class="cx"> bool SVGElement::isPresentationAttribute(const QualifiedName& name) const
</span><span class="cx"> {
</span><span class="cx">     if (cssPropertyIdForSVGAttributeName(name) > 0)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -23,8 +23,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "SVGAnimatedPropertyImpl.h"
</span><del>-#include "SVGAttributeOwnerProxy.h"
-#include "SVGAttributeOwnerProxyImpl.h"
</del><span class="cx"> #include "SVGLangSpace.h"
</span><span class="cx"> #include "SVGLocatable.h"
</span><span class="cx"> #include "SVGNames.h"
</span><span class="lines">@@ -58,8 +56,6 @@
</span><span class="cx">     SVGElement* viewportElement() const;
</span><span class="cx"> 
</span><span class="cx">     String title() const override;
</span><del>-    static bool isAnimatableCSSProperty(const QualifiedName&);
-    bool isPresentationAttributeWithSVGDOM(const QualifiedName&);
</del><span class="cx">     RefPtr<DeprecatedCSSOMValue> getPresentationAttribute(const String& name);
</span><span class="cx">     virtual bool supportsMarkers() const { return false; }
</span><span class="cx">     bool hasRelativeLengths() const { return !m_elementsWithRelativeLengths.isEmpty(); }
</span><span class="lines">@@ -80,8 +76,6 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void svgAttributeChanged(const QualifiedName&);
</span><span class="cx"> 
</span><del>-    Vector<AnimatedPropertyType> animatedPropertyTypesForAttribute(const QualifiedName&);
-
</del><span class="cx">     void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false);
</span><span class="cx">     void sendSVGLoadEventIfPossibleAsynchronously();
</span><span class="cx">     void svgLoadEventTimerFired();
</span><span class="lines">@@ -107,9 +101,6 @@
</span><span class="cx"> 
</span><span class="cx">     void setCorrespondingElement(SVGElement*);
</span><span class="cx"> 
</span><del>-    void synchronizeAnimatedSVGAttribute(const QualifiedName&) const;
-    static void synchronizeAllAnimatedSVGAttribute(SVGElement*);

</del><span class="cx">     Optional<ElementStyle> resolveCustomStyle(const RenderStyle& parentStyle, const RenderStyle* shadowHostStyle) override;
</span><span class="cx"> 
</span><span class="cx">     static QualifiedName animatableAttributeForName(const AtomicString&);
</span><span class="lines">@@ -135,25 +126,7 @@
</span><span class="cx">     class InstanceUpdateBlocker;
</span><span class="cx">     class InstanceInvalidationGuard;
</span><span class="cx"> 
</span><del>-    // The definition of the owner proxy has to match the class inheritance but we are interested in the SVG objects only.
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGElement>;
-
-    // A super class will override this function to return its owner proxy. The attributes of the super class will
-    // be accessible through the registry of the owner proxy.
-    virtual const SVGAttributeOwnerProxy& attributeOwnerProxy() const { return m_attributeOwnerProxy; }
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
-    // Helper functions which return info for the super class' attributes.
-    void synchronizeAttribute(const QualifiedName& name) { attributeOwnerProxy().synchronizeAttribute(name); }
-    void synchronizeAttributes() { attributeOwnerProxy().synchronizeAttributes(); }
-    Vector<AnimatedPropertyType> animatedTypes(const QualifiedName& attributeName) const { return attributeOwnerProxy().animatedTypes(attributeName); }
-    RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const SVGAttribute& attribute) const { return attributeOwnerProxy().lookupAnimatedProperty(attribute); }
-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute& attribute) { return attributeOwnerProxy().lookupOrCreateAnimatedProperty(attribute); }
-    Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName& name) { return attributeOwnerProxy().lookupOrCreateAnimatedProperties(name); }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGElement>;
</span><del>-    static bool isKnownAttribute(const QualifiedName& attributeName) { return PropertyRegistry::isKnownAttribute(attributeName); }
-
</del><span class="cx">     virtual const SVGPropertyRegistry& propertyRegistry() const { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="cx">     bool isAnimatedPropertyAttribute(const QualifiedName&) const;
</span><span class="lines">@@ -160,6 +133,10 @@
</span><span class="cx">     bool isAnimatedAttribute(const QualifiedName&) const;
</span><span class="cx">     bool isAnimatedStyleAttribute(const QualifiedName&) const;
</span><span class="cx"> 
</span><ins>+    void synchronizeAttribute(const QualifiedName&);
+    void synchronizeAllAttributes();
+    static void synchronizeAllAnimatedSVGAttribute(SVGElement&);
+
</ins><span class="cx">     void commitPropertyChange(SVGProperty*) override;
</span><span class="cx">     void commitPropertyChange(SVGAnimatedProperty&);
</span><span class="cx"> 
</span><span class="lines">@@ -222,7 +199,6 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr<SVGPropertyAnimatorFactory> m_propertyAnimatorFactory;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_className { SVGAnimatedString::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGEllipseElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGEllipseElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGEllipseElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGEllipseElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -45,9 +45,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGEllipseElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGEllipseElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGEllipseElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -59,7 +56,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGExternalResourcesRequiredh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGExternalResourcesRequired.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGExternalResourcesRequired.h  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGExternalResourcesRequired.h     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -22,7 +22,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "QualifiedName.h"
</span><del>-#include "SVGAttributeOwnerProxyImpl.h"
</del><span class="cx"> #include "SVGPropertyOwnerRegistry.h"
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> 
</span><span class="lines">@@ -45,9 +44,6 @@
</span><span class="cx"> 
</span><span class="cx">     static void addSupportedAttributes(HashSet<QualifiedName>&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGExternalResourcesRequired>;
-    static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGExternalResourcesRequired>;
</span><span class="cx"> 
</span><span class="cx">     bool externalResourcesRequired() const { return m_externalResourcesRequired->currentValue(); }
</span><span class="lines">@@ -68,8 +64,6 @@
</span><span class="cx">     bool haveLoadedRequiredResources() const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    AttributeOwnerProxy attributeOwnerProxy() { return { *this, m_contextElement }; }
-    
</del><span class="cx">     SVGElement& m_contextElement;
</span><span class="cx">     Ref<SVGAnimatedBoolean> m_externalResourcesRequired;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEBlendElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEBlendElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEBlendElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEBlendElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -63,9 +63,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEBlendElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEBlendElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEBlendElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -75,7 +72,6 @@
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEColorMatrixElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEColorMatrixElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEColorMatrixElement.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEColorMatrixElement.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -79,9 +79,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEColorMatrixElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEColorMatrixElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEColorMatrixElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -91,7 +88,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_type { SVGAnimatedEnumeration::create(this, FECOLORMATRIX_TYPE_MATRIX) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEComponentTransferElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEComponentTransferElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEComponentTransferElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEComponentTransferElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -37,9 +37,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEComponentTransferElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEComponentTransferElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEComponentTransferElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -48,7 +45,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFECompositeElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFECompositeElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFECompositeElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFECompositeElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -102,9 +102,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFECompositeElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFECompositeElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFECompositeElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -114,7 +111,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEConvolveMatrixElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -96,9 +96,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEConvolveMatrixElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEConvolveMatrixElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEConvolveMatrixElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -108,7 +105,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedInteger> m_orderX { SVGAnimatedInteger::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEDiffuseLightingElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -51,9 +51,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEDiffuseLightingElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx">     
</span><span class="lines">@@ -63,7 +60,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_diffuseConstant { SVGAnimatedNumber::create(this, 1) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEDisplacementMapElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -84,9 +84,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEDisplacementMapElement(const QualifiedName& tagName, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDisplacementMapElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDisplacementMapElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -96,7 +93,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEDropShadowElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEDropShadowElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEDropShadowElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEDropShadowElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -47,9 +47,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEDropShadowElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDropShadowElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDropShadowElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -58,7 +55,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_dx { SVGAnimatedNumber::create(this, 2) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEGaussianBlurElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -47,9 +47,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEGaussianBlurElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEGaussianBlurElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEGaussianBlurElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -58,7 +55,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_stdDeviationX { SVGAnimatedNumber::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEImageElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEImageElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEImageElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -45,9 +45,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEImageElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -68,7 +65,6 @@
</span><span class="cx">     InsertedIntoAncestorResult insertedIntoAncestor(InsertionType, ContainerNode&) override;
</span><span class="cx">     void removedFromAncestor(RemovalType, ContainerNode&) override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio { SVGAnimatedPreserveAspectRatio::create(this) };
</span><span class="cx">     CachedResourceHandle<CachedImage> m_cachedImage;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFELightElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFELightElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFELightElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFELightElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -63,9 +63,6 @@
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) override { return false; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFELightElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFELightElement, SVGElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -73,7 +70,6 @@
</span><span class="cx">     void svgAttributeChanged(const QualifiedName&) override;
</span><span class="cx">     void childrenChanged(const ChildChange&) override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_azimuth { SVGAnimatedNumber::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_elevation { SVGAnimatedNumber::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEMergeNodeElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEMergeNodeElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEMergeNodeElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEMergeNodeElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -36,9 +36,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEMergeNodeElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEMergeNodeElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEMergeNodeElement, SVGElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -47,7 +44,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) final { return false; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEMorphologyElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEMorphologyElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEMorphologyElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEMorphologyElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -74,9 +74,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEMorphologyElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEMorphologyElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEMorphologyElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -86,7 +83,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_svgOperator { SVGAnimatedEnumeration::create(this, FEMORPHOLOGY_OPERATOR_ERODE) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEOffsetElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEOffsetElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEOffsetElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFEOffsetElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -41,9 +41,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFEOffsetElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEOffsetElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEOffsetElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -52,7 +49,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_dx { SVGAnimatedNumber::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFESpecularLightingElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFESpecularLightingElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFESpecularLightingElement.h  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFESpecularLightingElement.h     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -51,9 +51,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFESpecularLightingElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -63,7 +60,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_specularConstant { SVGAnimatedNumber::create(this, 1) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFETileElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFETileElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFETileElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFETileElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -36,9 +36,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFETileElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFETileElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFETileElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -47,7 +44,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFETurbulenceElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFETurbulenceElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFETurbulenceElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFETurbulenceElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -112,9 +112,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFETurbulenceElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFETurbulenceElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFETurbulenceElement, SVGFilterPrimitiveStandardAttributes>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -124,7 +121,6 @@
</span><span class="cx">     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
</span><span class="cx">     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_baseFrequencyX { SVGAnimatedNumber::create(this) };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_baseFrequencyY { SVGAnimatedNumber::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFilterElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFilterElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFilterElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFilterElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -52,9 +52,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGFilterElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFilterElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -69,7 +66,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_filterUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_primitiveUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFilterPrimitiveStandardAttributesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -42,9 +42,6 @@
</span><span class="cx">     // Returns true, if the new value is different from the old one.
</span><span class="cx">     virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFilterPrimitiveStandardAttributes, SVGElement>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterPrimitiveStandardAttributes, SVGElement>;
</span><span class="cx"> 
</span><span class="cx">     const SVGLengthValue& x() const { return m_x->currentValue(); }
</span><span class="lines">@@ -70,9 +67,6 @@
</span><span class="cx">     void primitiveAttributeChanged(const QualifiedName& attributeName);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
</del><span class="cx">     bool isFilterEffect() const override { return true; }
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
</span><span class="lines">@@ -79,8 +73,6 @@
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) override;
</span><span class="cx">     bool childShouldCreateRenderer(const Node&) const override { return false; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
</del><span class="cx">     // Spec: If the x/y attribute is not specified, the effect is as if a value of "0%" were specified.
</span><span class="cx">     // Spec: If the width/height attribute is not specified, the effect is as if a value of "100%" were specified.
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth, "0%") };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFitToViewBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFitToViewBox.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFitToViewBox.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFitToViewBox.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -24,8 +24,6 @@
</span><span class="cx"> #include "FloatRect.h"
</span><span class="cx"> #include "QualifiedName.h"
</span><span class="cx"> #include "SVGAnimatedPropertyImpl.h"
</span><del>-#include "SVGAttributeOwnerProxyImpl.h"
-#include "SVGAttributeRegistry.h"
</del><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include "SVGPreserveAspectRatio.h"
</span><span class="cx"> #include "SVGPropertyOwnerRegistry.h"
</span><span class="lines">@@ -40,9 +38,6 @@
</span><span class="cx"> public:
</span><span class="cx">     static AffineTransform viewBoxToViewTransform(const FloatRect& viewBoxRect, const SVGPreserveAspectRatioValue&, float viewWidth, float viewHeight);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFitToViewBox>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFitToViewBox>;
</span><span class="cx"> 
</span><span class="cx">     const FloatRect& viewBox() const { return m_viewBox->currentValue(); }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFontElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFontElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFontElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGFontElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -52,13 +52,9 @@
</span><span class="cx"> 
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) final { return false; }
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFontElement, SVGElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFontElement, SVGElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGForeignObjectElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGForeignObjectElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGForeignObjectElement.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGForeignObjectElement.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -44,9 +44,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGForeignObjectElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGForeignObjectElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGForeignObjectElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -60,7 +57,6 @@
</span><span class="cx">     bool isValid() const final { return SVGTests::isValid(); }
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGElement.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGElement.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -37,9 +37,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -49,7 +46,6 @@
</span><span class="cx">     bool isValid() const final { return SVGTests::isValid(); }
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGeometryElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGeometryElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGeometryElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGeometryElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> class SVGGeometryElement : public SVGGraphicsElement {
</span><span class="cx">     WTF_MAKE_ISO_ALLOCATED(SVGGeometryElement);
</span><span class="cx"> public:
</span><del>-    
</del><span class="cx">     virtual float getTotalLength() const;
</span><span class="cx">     virtual Ref<SVGPoint> getPointAtLength(float distance) const;
</span><span class="cx"> 
</span><span class="lines">@@ -41,7 +40,6 @@
</span><span class="cx">     bool isPointInFill(DOMPointInit&&);
</span><span class="cx">     bool isPointInStroke(DOMPointInit&&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGeometryElement, SVGGraphicsElement>;
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGeometryElement, SVGGraphicsElement>;
</span><span class="cx"> 
</span><span class="cx">     float pathLength() const { return m_pathLength->currentValue(); }
</span><span class="lines">@@ -56,11 +54,6 @@
</span><span class="cx"> private:
</span><span class="cx">     bool isSVGGeometryElement() const override { return true; }
</span><span class="cx"> 
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
</del><span class="cx">     Ref<SVGAnimatedNumber> m_pathLength { SVGAnimatedNumber::create(this) };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGlyphRefElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGlyphRefElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGlyphRefElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGlyphRefElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -46,9 +46,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGGlyphRefElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGlyphRefElement, SVGElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGlyphRefElement, SVGElement, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -59,7 +56,6 @@
</span><span class="cx">     float m_y { 0 };
</span><span class="cx">     float m_dx { 0 };
</span><span class="cx">     float m_dy { 0 };
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGradientElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGradientElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGradientElement.cpp  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGradientElement.cpp     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
</span><span class="cx"> {
</span><del>-    if (isKnownAttribute(attrName) || SVGURIReference::isKnownAttribute(attrName)) {
</del><ins>+    if (PropertyRegistry::isKnownAttribute(attrName) || SVGURIReference::isKnownAttribute(attrName)) {
</ins><span class="cx">         InstanceInvalidationGuard guard(*this);
</span><span class="cx">         if (RenderObject* object = renderer())
</span><span class="cx">             object->setNeedsLayout();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGradientElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGradientElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGradientElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGradientElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -82,9 +82,6 @@
</span><span class="cx"> 
</span><span class="cx">     Vector<Gradient::ColorStop> buildStops();
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx"> 
</span><span class="cx">     SVGSpreadMethodType spreadMethod() const { return m_spreadMethod->currentValue<SVGSpreadMethodType>(); }
</span><span class="lines">@@ -98,8 +95,6 @@
</span><span class="cx"> protected:
</span><span class="cx">     SVGGradientElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    static bool isKnownAttribute(const QualifiedName& attributeName) { return PropertyRegistry::isKnownAttribute(attributeName); }
-
</del><span class="cx">     void parseAttribute(const QualifiedName&, const AtomicString&) override;
</span><span class="cx">     void svgAttributeChanged(const QualifiedName&) override;
</span><span class="cx"> 
</span><span class="lines">@@ -107,11 +102,6 @@
</span><span class="cx">     bool needsPendingResourceHandling() const override { return false; }
</span><span class="cx">     void childrenChanged(const ChildChange&) override;
</span><span class="cx"> 
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
</del><span class="cx">     Ref<SVGAnimatedEnumeration> m_spreadMethod { SVGAnimatedEnumeration::create(this, SVGSpreadMethodPad) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_gradientUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) };
</span><span class="cx">     Ref<SVGAnimatedTransformList> m_gradientTransform { SVGAnimatedTransformList::create(this) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGraphicsElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGraphicsElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGraphicsElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGGraphicsElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -62,9 +62,6 @@
</span><span class="cx"> 
</span><span class="cx">     size_t approximateMemoryCost() const override { return sizeof(*this); }
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGraphicsElement, SVGElement, SVGTests>;
-    static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGraphicsElement, SVGElement, SVGTests>;
</span><span class="cx"> 
</span><span class="cx">     const SVGTransformList& transform() const { return m_transform->currentValue(); }
</span><span class="lines">@@ -81,9 +78,6 @@
</span><span class="cx"> private:
</span><span class="cx">     bool isSVGGraphicsElement() const override { return true; }
</span><span class="cx"> 
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
</del><span class="cx">     // Used by <animateMotion>
</span><span class="cx">     std::unique_ptr<AffineTransform> m_supplementalTransform;
</span><span class="cx"> 
</span><span class="lines">@@ -90,8 +84,6 @@
</span><span class="cx">     // Used to isolate blend operations caused by masking.
</span><span class="cx">     bool m_shouldIsolateBlending;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
</del><span class="cx">     Ref<SVGAnimatedTransformList> m_transform { SVGAnimatedTransformList::create(this) };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageElement.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGImageElement.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -51,9 +51,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGImageElement(const QualifiedName&, Document&);
</span><span class="cx">     
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGImageElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGImageElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -71,7 +68,6 @@
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><span class="cx">     void didMoveToNewDocument(Document& oldDocument, Document& newDocument) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLineElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLineElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLineElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGLineElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -45,9 +45,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGLineElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGLineElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLineElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -58,7 +55,6 @@
</span><span class="cx">     bool supportsMarkers() const final { return true; }
</span><span class="cx">     bool selfHasRelativeLengths() const final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x1 { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y1 { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLinearGradientElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLinearGradientElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLinearGradientElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGLinearGradientElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -48,9 +48,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGLinearGradientElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGLinearGradientElement, SVGGradientElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLinearGradientElement, SVGGradientElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -61,7 +58,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x1 { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y1 { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMPathElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMPathElement.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGMPathElement.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -43,9 +43,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGMPathElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMPathElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMPathElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -62,7 +59,6 @@
</span><span class="cx"> 
</span><span class="cx">     void notifyParentOfPathChange(ContainerNode*);
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMarkerElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMarkerElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMarkerElement.cpp    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGMarkerElement.cpp       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -24,10 +24,8 @@
</span><span class="cx"> #include "SVGMarkerElement.h"
</span><span class="cx"> 
</span><span class="cx"> #include "RenderSVGResourceMarker.h"
</span><del>-#include "SVGFitToViewBox.h"
</del><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include <wtf/IsoMallocInlines.h>
</span><del>-#include <wtf/NeverDestroyed.h>
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMarkerElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMarkerElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMarkerElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGMarkerElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -71,9 +71,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGMarkerElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMarkerElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMarkerElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -90,8 +87,6 @@
</span><span class="cx"> 
</span><span class="cx">     void setOrient(SVGMarkerOrientType, const SVGAngleValue&);
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_refX { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_refY { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMaskElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMaskElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMaskElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGMaskElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -50,9 +50,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGMaskElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMaskElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMaskElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -66,7 +63,6 @@
</span><span class="cx">     bool needsPendingResourceHandling() const final { return false; }
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth, "-10%") };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight, "-10%") };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGPathElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -108,9 +108,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGPathElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx">     
</span><span class="lines">@@ -128,7 +125,6 @@
</span><span class="cx">     void invalidateMPathDependencies();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedPathSegList> m_pathSegList { SVGAnimatedPathSegList::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPatternElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPatternElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPatternElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGPatternElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -61,9 +61,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGPatternElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPatternElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGTests, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPatternElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGTests, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -77,7 +74,6 @@
</span><span class="cx">     bool needsPendingResourceHandling() const final { return false; }
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPolyElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPolyElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPolyElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGPolyElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -41,9 +41,6 @@
</span><span class="cx">     SVGPolyElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPolyElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPolyElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -53,7 +50,6 @@
</span><span class="cx">     bool isValid() const override { return SVGTests::isValid(); }
</span><span class="cx">     bool supportsMarkers() const override { return true; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedPointList> m_points { SVGAnimatedPointList::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRadialGradientElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRadialGradientElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRadialGradientElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGRadialGradientElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -52,9 +52,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGRadialGradientElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGRadialGradientElement, SVGGradientElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRadialGradientElement, SVGGradientElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -65,7 +62,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth, "50%") };
</span><span class="cx">     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight, "50%") };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRectElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRectElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRectElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGRectElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -49,9 +49,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGRectElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGRectElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRectElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -63,7 +60,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGSVGElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -131,9 +131,6 @@
</span><span class="cx">     SVGSVGElement(const QualifiedName&, Document&);
</span><span class="cx">     virtual ~SVGSVGElement();
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSVGElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSVGElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx">     
</span><span class="lines">@@ -166,7 +163,6 @@
</span><span class="cx"> 
</span><span class="cx">     Ref<SVGPoint> m_currentTranslate { SVGPoint::create() };
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGScriptElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGScriptElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGScriptElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGScriptElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -40,9 +40,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGScriptElement(const QualifiedName&, Document&, bool wasInsertedByParser, bool alreadyStarted);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGScriptElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGScriptElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +82,6 @@
</span><span class="cx">     bool filterOutAnimatableAttribute(const QualifiedName& name) const final { return name == SVGNames::typeAttr; }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Timer m_svgLoadEventTimer;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGStopElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGStopElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGStopElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGStopElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -38,9 +38,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGStopElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGStopElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGStopElement, SVGElement>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -52,7 +49,6 @@
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedNumber> m_offset { SVGAnimatedNumber::create(0) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSwitchElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSwitchElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSwitchElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGSwitchElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -34,9 +34,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGSwitchElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSwitchElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSwitchElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -45,7 +42,6 @@
</span><span class="cx">     bool childShouldCreateRenderer(const Node&) const final;
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSymbolElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSymbolElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSymbolElement.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGSymbolElement.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -35,9 +35,6 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGSymbolElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSymbolElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSymbolElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -47,7 +44,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTRefElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTRefElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTRefElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTRefElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -39,9 +39,6 @@
</span><span class="cx">     SVGTRefElement(const QualifiedName&, Document&);
</span><span class="cx">     virtual ~SVGTRefElement();
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTRefElement, SVGTextPositioningElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTRefElement, SVGTextPositioningElement, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -61,7 +58,6 @@
</span><span class="cx">     void detachTarget();
</span><span class="cx">     void buildPendingResource() override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGTRefTargetEventListener> m_targetListener;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTestscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTests.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTests.cpp    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTests.cpp       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include "DOMImplementation.h"
</span><span class="cx"> #include "HTMLNames.h"
</span><del>-#include "SVGAttributeOwnerProxy.h"
</del><span class="cx"> #include "SVGElement.h"
</span><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include "SVGStringList.h"
</span><span class="lines">@@ -121,16 +120,6 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTests::AttributeRegistry& SVGTests::attributeRegistry()
-{
-    return AttributeOwnerProxy::attributeRegistry();
-}
-
-bool SVGTests::isKnownAttribute(const QualifiedName& attributeName)
-{
-    return PropertyRegistry::isKnownAttribute(attributeName);
-}
-
</del><span class="cx"> bool SVGTests::hasExtension(const String& extension)
</span><span class="cx"> {
</span><span class="cx">     // We recognize XHTML and MathML, as implemented in Gecko and suggested in the SVG Tiny recommendation (http://www.w3.org/TR/SVG11/struct.html#RequiredExtensionsAttribute).
</span><span class="lines">@@ -170,7 +159,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SVGTests::svgAttributeChanged(const QualifiedName& attrName)
</span><span class="cx"> {
</span><del>-    if (!isKnownAttribute(attrName))
</del><ins>+    if (!PropertyRegistry::isKnownAttribute(attrName))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (!m_contextElement.isConnected())
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTestsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTests.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTests.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTests.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -30,12 +30,6 @@
</span><span class="cx"> class SVGStringList;
</span><span class="cx"> 
</span><span class="cx"> template<typename OwnerType, typename... BaseTypes>
</span><del>-class SVGAttributeRegistry;
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeOwnerProxyImpl;
-
-template<typename OwnerType, typename... BaseTypes>
</del><span class="cx"> class SVGPropertyOwnerRegistry;
</span><span class="cx"> 
</span><span class="cx"> class SVGTests {
</span><span class="lines">@@ -44,13 +38,8 @@
</span><span class="cx">     static bool hasExtension(const String&);
</span><span class="cx">     bool isValid() const;
</span><span class="cx"> 
</span><del>-    using AttributeRegistry = SVGAttributeRegistry<SVGTests>;
-    static AttributeRegistry& attributeRegistry();
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTests>;
</span><span class="cx"> 
</span><del>-    static bool isKnownAttribute(const QualifiedName&);
-
</del><span class="cx">     void parseAttribute(const QualifiedName&, const AtomicString&);
</span><span class="cx">     void svgAttributeChanged(const QualifiedName&);
</span><span class="cx"> 
</span><span class="lines">@@ -67,8 +56,6 @@
</span><span class="cx">     SVGTests(SVGElement* contextElement);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTests>;
-
</del><span class="cx">     SVGElement& m_contextElement;
</span><span class="cx">     Ref<SVGStringList> m_requiredFeatures;
</span><span class="cx">     Ref<SVGStringList> m_requiredExtensions;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextContentElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextContentElement.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextContentElement.cpp       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTextContentElement.cpp  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #include "RenderObject.h"
</span><span class="cx"> #include "RenderSVGResource.h"
</span><span class="cx"> #include "RenderSVGText.h"
</span><del>-#include "SVGDocumentExtensions.h"
</del><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include "SVGPoint.h"
</span><span class="cx"> #include "SVGRect.h"
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextContentElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextContentElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextContentElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTextContentElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -83,9 +83,6 @@
</span><span class="cx"> 
</span><span class="cx">     static SVGTextContentElement* elementFromRenderer(RenderObject*);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
</span><span class="cx"> 
</span><span class="cx">     const SVGLengthValue& specifiedTextLength() const { return m_specifiedTextLength; }
</span><span class="lines">@@ -110,11 +107,6 @@
</span><span class="cx"> private:
</span><span class="cx">     bool isTextContent() const final { return true; }
</span><span class="cx"> 
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
</del><span class="cx">     Ref<SVGAnimatedLength> m_textLength { SVGAnimatedLength::create(this, LengthModeOther) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_lengthAdjust { SVGAnimatedEnumeration::create(this, SVGLengthAdjustSpacing) };
</span><span class="cx">     SVGLengthValue m_specifiedTextLength { LengthModeOther };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextPathElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextPathElement.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTextPathElement.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -126,9 +126,6 @@
</span><span class="cx">     SVGTextPathElement(const QualifiedName&, Document&);
</span><span class="cx">     virtual ~SVGTextPathElement();
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextPathElement, SVGTextContentElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextPathElement, SVGTextContentElement, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -146,7 +143,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const override;
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_startOffset { SVGAnimatedLength::create(this, LengthModeOther) };
</span><span class="cx">     Ref<SVGAnimatedEnumeration> m_method { SVGAnimatedEnumeration::create(this, SVGTextPathMethodAlign) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextPositioningElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextPositioningElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextPositioningElement.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGTextPositioningElement.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -30,9 +30,6 @@
</span><span class="cx"> public:
</span><span class="cx">     static SVGTextPositioningElement* elementFromRenderer(RenderBoxModelObject&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextPositioningElement, SVGTextContentElement>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextPositioningElement, SVGTextContentElement>;
</span><span class="cx"> 
</span><span class="cx">     const SVGLengthList& x() const { return m_x->currentValue(); }
</span><span class="lines">@@ -57,10 +54,8 @@
</span><span class="cx">     bool isPresentationAttribute(const QualifiedName&) const final;
</span><span class="cx">     void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) final;
</span><span class="cx"> 
</span><del>-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
</del><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLengthList> m_x { SVGAnimatedLengthList::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLengthList> m_y { SVGAnimatedLengthList::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGURIReferencecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGURIReference.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGURIReference.cpp     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGURIReference.cpp        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include "Document.h"
</span><span class="cx"> #include "Element.h"
</span><del>-#include "SVGAttributeOwnerProxy.h"
</del><span class="cx"> #include "SVGElement.h"
</span><span class="cx"> #include <wtf/URL.h>
</span><span class="cx"> #include "XLinkNames.h"
</span><span class="lines">@@ -32,8 +31,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> SVGURIReference::SVGURIReference(SVGElement* contextElement)
</span><del>-    : m_attributeOwnerProxy(std::make_unique<AttributeOwnerProxy>(*this, *contextElement))
-    , m_href(SVGAnimatedString::create(contextElement))
</del><ins>+    : m_href(SVGAnimatedString::create(contextElement))
</ins><span class="cx"> {
</span><span class="cx">     static std::once_flag onceFlag;
</span><span class="cx">     std::call_once(onceFlag, [] {
</span><span class="lines">@@ -42,11 +40,6 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGURIReference::AttributeRegistry& SVGURIReference::attributeRegistry()
-{
-    return AttributeOwnerProxy::attributeRegistry();
-}
-
</del><span class="cx"> bool SVGURIReference::isKnownAttribute(const QualifiedName& attributeName)
</span><span class="cx"> {
</span><span class="cx">     return PropertyRegistry::isKnownAttribute(attributeName);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGURIReferenceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGURIReference.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGURIReference.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGURIReference.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -29,12 +29,6 @@
</span><span class="cx"> 
</span><span class="cx"> class SVGElement;
</span><span class="cx"> 
</span><del>-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeRegistry;
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeOwnerProxyImpl;
-
</del><span class="cx"> class SVGURIReference {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(SVGURIReference);
</span><span class="cx"> public:
</span><span class="lines">@@ -62,10 +56,6 @@
</span><span class="cx">         return !equalIgnoringFragmentIdentifier(url, document.url());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGURIReference>;
-    using AttributeRegistry = SVGAttributeRegistry<SVGURIReference>;
-    static AttributeRegistry& attributeRegistry();
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGURIReference>;
</span><span class="cx"> 
</span><span class="cx">     String href() const { return m_href->currentValue(); }
</span><span class="lines">@@ -77,7 +67,6 @@
</span><span class="cx">     static bool isKnownAttribute(const QualifiedName& attributeName);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    std::unique_ptr<AttributeOwnerProxy> m_attributeOwnerProxy;
</del><span class="cx">     Ref<SVGAnimatedString> m_href;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGUseElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGUseElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGUseElement.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGUseElement.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -63,9 +63,6 @@
</span><span class="cx">     void removedFromAncestor(RemovalType, ContainerNode&) override;
</span><span class="cx">     void buildPendingResource() override;
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGUseElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGUseElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><span class="lines">@@ -98,7 +95,6 @@
</span><span class="cx">     void clearShadowTree();
</span><span class="cx">     void invalidateDependentShadowTrees();
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
</span><span class="cx">     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGViewElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGViewElement.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGViewElement.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGViewElement.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -42,18 +42,14 @@
</span><span class="cx"> private:
</span><span class="cx">     SVGViewElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><del>-    // FIXME: svgAttributeChanged missing.
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGViewElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx"> 
</span><ins>+    // FIXME(webkit.org/b/196554): svgAttributeChanged missing.
</ins><span class="cx">     void parseAttribute(const QualifiedName&, const AtomicString&) final;
</span><span class="cx"> 
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&) final { return false; }
</span><span class="cx"> 
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
</del><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><span class="cx">     Ref<SVGStringList> m_viewTarget { SVGStringList::create(this) };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGViewSpeccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGViewSpec.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGViewSpec.cpp 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGViewSpec.cpp    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> SVGViewSpec::SVGViewSpec(SVGElement& contextElement)
</span><span class="cx">     : SVGFitToViewBox(&contextElement, SVGPropertyAccess::ReadOnly)
</span><span class="cx">     , m_contextElement(makeWeakPtr(contextElement))
</span><del>-    , m_attributeOwnerProxy(*this, contextElement)
</del><span class="cx">     , m_transform(SVGTransformList::create(&contextElement, SVGPropertyAccess::ReadOnly))
</span><span class="cx"> {
</span><span class="cx">     static std::once_flag onceFlag;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGViewSpech"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGViewSpec.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGViewSpec.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGViewSpec.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -50,12 +50,10 @@
</span><span class="cx"> private:
</span><span class="cx">     explicit SVGViewSpec(SVGElement&);
</span><span class="cx"> 
</span><del>-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGViewSpec, SVGFitToViewBox>;
</del><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewSpec, SVGFitToViewBox>;
</span><span class="cx"> 
</span><span class="cx">     WeakPtr<SVGElement> m_contextElement;
</span><span class="cx">     String m_viewTargetString;
</span><del>-    AttributeOwnerProxy m_attributeOwnerProxy;
</del><span class="cx">     Ref<SVGTransformList> m_transform;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGZoomAndPanTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGZoomAndPanType.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGZoomAndPanType.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/SVGZoomAndPanType.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -25,7 +25,6 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include "SVGAttributeAccessor.h"
</del><span class="cx"> #include "SVGPropertyTraits.h"
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -36,11 +35,6 @@
</span><span class="cx">     SVGZoomAndPanMagnify
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-using SVGZoomAndPanTypeAttribute = SVGPropertyAttribute<SVGZoomAndPanType>;
-
-template<typename OwnerType>
-using SVGZoomAndPanTypeAttributeAccessor = SVGPropertyAttributeAccessor<OwnerType, SVGZoomAndPanTypeAttribute>;
-
</del><span class="cx"> template<>
</span><span class="cx"> struct SVGPropertyTraits<SVGZoomAndPanType> {
</span><span class="cx">     static SVGZoomAndPanType initialValue() { return SVGZoomAndPanMagnify; }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedListPropertyTearOffh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,185 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGLegacyAnimatedProperty.h"
-#include "SVGListPropertyTearOff.h"
-
-namespace WebCore {
-
-template<typename PropertyType>
-class SVGPropertyTearOff;
-
-template<typename PropertyType>
-class SVGAnimatedListPropertyTearOff : public SVGLegacyAnimatedProperty {
-public:
-    using ListItemType = typename SVGPropertyTraits<PropertyType>::ListItemType;
-    using ListItemTearOff = typename SVGPropertyTraits<PropertyType>::ListItemTearOff;
-    using ListWrapperCache = Vector<WeakPtr<SVGPropertyTearOff<ListItemType>>>;
-    using ListProperty = SVGListProperty<PropertyType>;
-    using ListPropertyTearOff = typename SVGPropertyTraits<PropertyType>::ListPropertyTearOff;
-    using ContentType = PropertyType;
-
-    static Ref<SVGAnimatedListPropertyTearOff<PropertyType>> create(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, PropertyType& values)
-    {
-        ASSERT(contextElement);
-        return adoptRef(*new SVGAnimatedListPropertyTearOff<PropertyType>(contextElement, attributeName, animatedPropertyType, values));
-    }
-
-    virtual Ref<ListPropertyTearOff> baseVal()
-    {
-        if (m_baseVal)
-            return *static_cast<ListPropertyTearOff*>(m_baseVal.get());
-
-        auto property = ListPropertyTearOff::create(*this, BaseValRole, m_values, m_wrappers);
-        m_baseVal = makeWeakPtr(property.get());
-        return property;
-    }
-
-    virtual Ref<ListPropertyTearOff> animVal()
-    {
-        if (m_animVal)
-            return *static_cast<ListPropertyTearOff*>(m_animVal.get());
-
-        auto property = ListPropertyTearOff::create(*this, AnimValRole, m_values, m_wrappers);
-        m_animVal = makeWeakPtr(property.get());
-        return property;
-    }
-    
-    bool isAnimating() const override { return m_animatedProperty; }
-    bool isAnimatedListTearOff() const override { return true; }
-
-    int findItem(SVGLegacyProperty* property)
-    {
-        // This should ever be called for our baseVal, as animVal can't modify the list.
-        return baseVal()->findItem(static_cast<ListItemTearOff*>(property));
-    }
-
-    void removeItemFromList(size_t itemIndex, bool shouldSynchronizeWrappers)
-    {
-        // This should ever be called for our baseVal, as animVal can't modify the list.
-        baseVal()->removeItemFromList(itemIndex, shouldSynchronizeWrappers);
-    }
-
-    void detachListWrappers(unsigned newListSize)
-    {
-        ListProperty::detachListWrappersAndResize(&m_wrappers, newListSize);
-    }
-
-    PropertyType& currentAnimatedValue()
-    {
-        ASSERT(isAnimating());
-        return m_animatedProperty->values();
-    }
-
-    const PropertyType& currentBaseValue() const
-    {
-        return m_values;
-    }
-
-    void animationStarted(PropertyType* newAnimVal, bool shouldOwnValues = false)
-    {
-        ASSERT(!isAnimating());
-        ASSERT(newAnimVal);
-        ASSERT(m_values.size() == m_wrappers.size());
-        ASSERT(m_animatedWrappers.isEmpty());
-
-        // Switch to new passed in value type & new wrappers list. The new wrappers list must be created for the new value.
-        if (!newAnimVal->isEmpty())
-            m_animatedWrappers.fill(0, newAnimVal->size());
-
-        m_animatedProperty = animVal();
-        m_animatedProperty->setValuesAndWrappers(newAnimVal, &m_animatedWrappers, shouldOwnValues);
-        ASSERT(m_animatedProperty->values().size() == m_animatedProperty->wrappers().size());
-        ASSERT(m_animatedProperty->wrappers().size() == m_animatedWrappers.size());
-    }
-
-    void animationEnded()
-    {
-        ASSERT(isAnimating());
-        ASSERT(m_values.size() == m_wrappers.size());
-
-        ASSERT(m_animatedProperty->values().size() == m_animatedProperty->wrappers().size());
-        ASSERT(m_animatedProperty->wrappers().size() == m_animatedWrappers.size());
-
-        m_animatedProperty->setValuesAndWrappers(&m_values, &m_wrappers, false);
-        ASSERT(m_animatedProperty->values().size() == m_animatedProperty->wrappers().size());
-        ASSERT(m_animatedProperty->wrappers().size() == m_wrappers.size());
-
-        m_animatedWrappers.clear();
-        m_animatedProperty = nullptr;
-    }
-
-    void synchronizeWrappersIfNeeded()
-    {
-        if (!isAnimating()) {
-            // This should never happen, but we've seen it in the field. Please comment in bug #181316 if you hit this.
-            ASSERT_NOT_REACHED();
-            return;
-        }
-
-        // Eventually the wrapper list needs synchronization because any SVGAnimateLengthList::calculateAnimatedValue() call may
-        // mutate the length of our values() list, and thus the wrapper() cache needs synchronization, to have the same size.
-        // Also existing wrappers which point directly at elements in the existing SVGLengthListValues have to be detached (so a copy
-        // of them is created, so existing animVal variables in JS are kept-alive). If we'd detach them later the underlying
-        // SVGLengthListValues was already mutated, and our list item wrapper tear offs would point nowhere. Assertions would fire.
-        m_animatedProperty->detachListWrappers(m_animatedProperty->values().size());
-
-        ASSERT(m_animatedProperty->values().size() == m_animatedProperty->wrappers().size());
-        ASSERT(m_animatedProperty->wrappers().size() == m_animatedWrappers.size());
-    }
-
-    void animValWillChange()
-    {
-        ASSERT(m_values.size() == m_wrappers.size());
-        synchronizeWrappersIfNeeded();
-    }
-
-    void animValDidChange()
-    {
-        ASSERT(m_values.size() == m_wrappers.size());
-        synchronizeWrappersIfNeeded();
-    }
-
-protected:
-    SVGAnimatedListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, PropertyType& values)
-        : SVGLegacyAnimatedProperty(contextElement, attributeName, animatedPropertyType)
-        , m_values(values)
-    {
-        if (!values.isEmpty())
-            m_wrappers.fill(0, values.size());
-    }
-
-    PropertyType& m_values;
-
-    ListWrapperCache m_wrappers;
-    ListWrapperCache m_animatedWrappers;
-
-    // Cache weak pointers but return Ref pointers. This will break the cyclic reference
-    // between SVGListPropertyTearOff and SVGAnimatedListPropertyTearOff once the property
-    // pointer is not needed.
-    WeakPtr<SVGListProperty<PropertyType>> m_baseVal;
-    WeakPtr<SVGListProperty<PropertyType>> m_animVal;
-
-    RefPtr<ListProperty> m_animatedProperty;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimator.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimator.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">             removeAnimatedStyleProperty(targetElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         return m_function.calculateDistance(targetElement, from, to);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -53,9 +53,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -71,10 +71,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         bool& animated = m_animated->animVal();
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -92,10 +92,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         EnumType animated;
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">         m_animated->template setAnimVal<EnumType>(animated);
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="lines">@@ -114,9 +114,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -135,9 +135,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -156,9 +156,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -175,9 +175,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -192,9 +192,9 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -209,10 +209,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         m_animated->animVal()->pathByteStreamWillChange();
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->pathByteStream());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->pathByteStream());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -227,9 +227,9 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -246,10 +246,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         SVGMarkerOrientType animated;
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">         m_animated->setAnimVal(animated);
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="lines">@@ -265,10 +265,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         SVGPreserveAspectRatioValue& animated = m_animated->animVal()->value();
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -284,9 +284,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -301,10 +301,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         String& animated = m_animated->animVal();
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -319,9 +319,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyPairAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimator.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimator.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -57,10 +57,10 @@
</span><span class="cx">         m_animatedPropertyAnimator2->start(targetElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
</ins><span class="cx">     {
</span><del>-        m_animatedPropertyAnimator1->progress(targetElement, percentage, repeatCount);
-        m_animatedPropertyAnimator2->progress(targetElement, percentage, repeatCount);
</del><ins>+        m_animatedPropertyAnimator1->animate(targetElement, progress, repeatCount);
+        m_animatedPropertyAnimator2->animate(targetElement, progress, repeatCount);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void apply(SVGElement* targetElement) override
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyPairAnimatorImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -64,16 +64,16 @@
</span><span class="cx">         m_animatedPropertyAnimator1->m_function.addFromAndToValues(targetElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
</ins><span class="cx">     {
</span><span class="cx">         if (m_animatedPropertyAnimator2->m_function.m_from != m_animatedPropertyAnimator2->m_function.m_to) {
</span><span class="cx">             // Discrete animation - no linear interpolation possible between values (e.g. auto to angle).
</span><del>-            m_animatedPropertyAnimator2->progress(targetElement, percentage, repeatCount);
</del><ins>+            m_animatedPropertyAnimator2->animate(targetElement, progress, repeatCount);
</ins><span class="cx"> 
</span><span class="cx">             SVGAngleValue animatedAngle;
</span><del>-            if (percentage < 0.5f && m_animatedPropertyAnimator2->m_function.m_from == SVGMarkerOrientAngle)
</del><ins>+            if (progress < 0.5f && m_animatedPropertyAnimator2->m_function.m_from == SVGMarkerOrientAngle)
</ins><span class="cx">                 animatedAngle = m_animatedPropertyAnimator1->m_function.m_from;
</span><del>-            else if (percentage >= 0.5f && m_animatedPropertyAnimator2->m_function.m_to == SVGMarkerOrientAngle)
</del><ins>+            else if (progress >= 0.5f && m_animatedPropertyAnimator2->m_function.m_to == SVGMarkerOrientAngle)
</ins><span class="cx">                 animatedAngle = m_animatedPropertyAnimator1->m_function.m_to;
</span><span class="cx"> 
</span><span class="cx">             m_animatedPropertyAnimator1->m_animated->setAnimVal(animatedAngle);
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">             // Regular from- toangle animation, with support for smooth interpolation, and additive and accumulated animation.
</span><span class="cx">             m_animatedPropertyAnimator2->m_animated->setAnimVal(SVGMarkerOrientAngle);
</span><span class="cx"> 
</span><del>-            m_animatedPropertyAnimator1->progress(targetElement, percentage, repeatCount);
</del><ins>+            m_animatedPropertyAnimator1->animate(targetElement, progress, repeatCount);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTearOffh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,120 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGLegacyAnimatedProperty.h"
-#include "SVGPropertyTearOff.h"
-
-namespace WebCore {
-
-template<typename T>
-class SVGAnimatedPropertyTearOff final : public SVGLegacyAnimatedProperty {
-public:
-    using PropertyTearOff = T;
-    using PropertyType = typename PropertyTearOff::PropertyType;
-    using ContentType = PropertyType;
-
-    static Ref<SVGAnimatedPropertyTearOff<PropertyTearOff>> create(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, PropertyType& property)
-    {
-        ASSERT(contextElement);
-        return adoptRef(*new SVGAnimatedPropertyTearOff<PropertyTearOff>(contextElement, attributeName, animatedPropertyType, property));
-    }
-
-    Ref<PropertyTearOff> baseVal()
-    {
-        if (m_baseVal)
-            return *static_cast<PropertyTearOff*>(m_baseVal.get());
-
-        auto property = PropertyTearOff::create(*this, BaseValRole, m_property);
-        m_baseVal = makeWeakPtr(property.get());
-        return property;
-    }
-
-    Ref<PropertyTearOff> animVal()
-    {
-        if (m_animVal)
-            return *static_cast<PropertyTearOff*>(m_animVal.get());
-
-        auto property = PropertyTearOff::create(*this, AnimValRole, m_property);
-        m_animVal = makeWeakPtr(property.get());
-        return property;
-    }
-
-    bool isAnimating() const final { return m_animatedProperty; }
-
-    PropertyType& currentAnimatedValue()
-    {
-        ASSERT(isAnimating());
-        return m_animatedProperty->propertyReference();
-    }
-
-    const PropertyType& currentBaseValue() const
-    {
-        return m_property;
-    }
-
-    void animationStarted(PropertyType* newAnimVal)
-    {
-        ASSERT(!isAnimating());
-        ASSERT(newAnimVal);
-        m_animatedProperty = animVal();
-        m_animatedProperty->setValue(*newAnimVal);
-    }
-
-    void animationEnded()
-    {
-        ASSERT(isAnimating());
-        m_animatedProperty->setValue(m_property);
-        m_animatedProperty = nullptr;
-    }
-
-    void animValWillChange()
-    {
-        // no-op for non list types.
-        ASSERT(isAnimating());
-    }
-
-    void animValDidChange()
-    {
-        // no-op for non list types.
-        ASSERT(isAnimating());
-    }
-
-    void synchronizeWrappersIfNeeded()
-    {
-        // no-op
-    }
-
-private:
-    SVGAnimatedPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, PropertyType& property)
-        : SVGLegacyAnimatedProperty(contextElement, attributeName, animatedPropertyType)
-        , m_property(property)
-    {
-    }
-
-    PropertyType& m_property;
-    WeakPtr<SVGPropertyTearOff<PropertyType>> m_baseVal;
-    WeakPtr<SVGPropertyTearOff<PropertyType>> m_animVal;
-
-    RefPtr<PropertyTearOff> m_animatedProperty;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTypeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,58 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-namespace WebCore {
-
-enum AnimatedPropertyState {
-    PropertyIsReadWrite,
-    PropertyIsReadOnly
-};
-
-enum AnimatedPropertyType {
-    AnimatedPropertyTypeMin = 0,
-    AnimatedAngle = AnimatedPropertyTypeMin,
-    AnimatedBoolean,
-    AnimatedColor,
-    AnimatedEnumeration,
-    AnimatedInteger,
-    AnimatedIntegerOptionalInteger,
-    AnimatedLength,
-    AnimatedLengthList,
-    AnimatedNumber,
-    AnimatedNumberList,
-    AnimatedNumberOptionalNumber,
-    AnimatedPath,
-    AnimatedPoints,
-    AnimatedPreserveAspectRatio,
-    AnimatedRect,
-    AnimatedString,
-    AnimatedTransformList,
-    AnimatedPropertyTypeMax,
-    AnimatedUnknown = AnimatedPropertyTypeMax
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveFunction.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveFunction.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveFunction.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -51,13 +51,13 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><del>-    float progress(float percentage, unsigned repeatCount, float from, float to, float toAtEndOfDuration, float animated)
</del><ins>+    float animate(float progress, unsigned repeatCount, float from, float to, float toAtEndOfDuration, float animated)
</ins><span class="cx">     {
</span><span class="cx">         float number;
</span><span class="cx">         if (m_calcMode == CalcMode::Discrete)
</span><del>-            number = percentage < 0.5 ? from : to;
</del><ins>+            number = progress < 0.5 ? from : to;
</ins><span class="cx">         else
</span><del>-            number = (to - from) * percentage + from;
</del><ins>+            number = (to - from) * progress + from;
</ins><span class="cx"> 
</span><span class="cx">         if (m_isAccumulated && repeatCount)
</span><span class="cx">             number += toAtEndOfDuration * repeatCount;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveListFunctionImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveListFunctionImpl.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveListFunctionImpl.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveListFunctionImpl.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -56,9 +56,9 @@
</span><span class="cx">         m_toAtEndOfDuration->parse(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount, RefPtr<SVGLengthList>& animated)
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount, RefPtr<SVGLengthList>& animated)
</ins><span class="cx">     {
</span><del>-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
</del><ins>+        if (!adjustAnimatedList(m_animationMode, progress, animated))
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         const Vector<Ref<SVGLength>>& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> 
</span><span class="cx">         SVGLengthContext lengthContext(targetElement);
</span><span class="cx">         for (unsigned i = 0; i < toItems.size(); ++i) {
</span><del>-            SVGLengthType unitType = (i < fromItems.size() && percentage < 0.5 ? fromItems : toItems)[i]->value().unitType();
</del><ins>+            SVGLengthType unitType = (i < fromItems.size() && progress < 0.5 ? fromItems : toItems)[i]->value().unitType();
</ins><span class="cx"> 
</span><span class="cx">             float from = i < fromItems.size() ? fromItems[i]->value().value(lengthContext) : 0;
</span><span class="cx">             float to = toItems[i]->value().value(lengthContext);
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">             float toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value().value(lengthContext) : 0;
</span><span class="cx">             float value = animatedItems[i]->value().value(lengthContext);
</span><span class="cx"> 
</span><del>-            value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
</del><ins>+            value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
</ins><span class="cx">             animatedItems[i]->value().setValue(lengthContext, value, lengthMode, unitType);
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -115,9 +115,9 @@
</span><span class="cx">         m_toAtEndOfDuration->parse(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGNumberList>& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGNumberList>& animated)
</ins><span class="cx">     {
</span><del>-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
</del><ins>+        if (!adjustAnimatedList(m_animationMode, progress, animated))
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         auto& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">             float toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value() : 0;
</span><span class="cx"> 
</span><span class="cx">             float& value = animatedItems[i]->value();
</span><del>-            value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
</del><ins>+            value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -165,9 +165,9 @@
</span><span class="cx">         m_toAtEndOfDuration->parse(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGPointList>& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGPointList>& animated)
</ins><span class="cx">     {
</span><del>-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
</del><ins>+        if (!adjustAnimatedList(m_animationMode, progress, animated))
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         auto& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
</span><span class="lines">@@ -181,8 +181,8 @@
</span><span class="cx">             FloatPoint toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value() : FloatPoint();
</span><span class="cx">             FloatPoint& animated = animatedItems[i]->value();
</span><span class="cx"> 
</span><del>-            float animatedX = Base::progress(percentage, repeatCount, from.x(), to.x(), toAtEndOfDuration.x(), animated.x());
-            float animatedY = Base::progress(percentage, repeatCount, from.y(), to.y(), toAtEndOfDuration.y(), animated.y());
</del><ins>+            float animatedX = Base::animate(progress, repeatCount, from.x(), to.x(), toAtEndOfDuration.x(), animated.x());
+            float animatedY = Base::animate(progress, repeatCount, from.y(), to.y(), toAtEndOfDuration.y(), animated.y());
</ins><span class="cx"> 
</span><span class="cx">             animated = { animatedX, animatedY };
</span><span class="cx">         }
</span><span class="lines">@@ -218,10 +218,10 @@
</span><span class="cx">         m_toAtEndOfDuration->parse(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGTransformList>& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGTransformList>& animated)
</ins><span class="cx">     {
</span><span class="cx">         // Pass false to 'resizeAnimatedIfNeeded', as the special post-multiplication behavior of <animateTransform> needs to be respected below.
</span><del>-        if (!adjustAnimatedList(m_animationMode, percentage, animated, false))
</del><ins>+        if (!adjustAnimatedList(m_animationMode, progress, animated, false))
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         // Spec: To animations provide specific functionality to get a smooth change from the underlying
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx">         const SVGTransformValue zerosTransform = SVGTransformValue(to.type(), zerosAffineTransform);
</span><span class="cx"> 
</span><span class="cx">         const SVGTransformValue& from = fromItemsSize ? fromItems[0]->value() : zerosTransform;
</span><del>-        SVGTransformValue current = SVGTransformDistance(from, to).scaledDistance(percentage).addToSVGTransform(from);
</del><ins>+        SVGTransformValue current = SVGTransformDistance(from, to).scaledDistance(progress).addToSVGTransform(from);
</ins><span class="cx"> 
</span><span class="cx">         if (m_isAccumulated && repeatCount) {
</span><span class="cx">             const SVGTransformValue& toAtEndOfDuration = toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[0]->value() : zerosTransform;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveValueFunctionImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h      2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h 2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -46,10 +46,10 @@
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, SVGAngleValue& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, SVGAngleValue& animated)
</ins><span class="cx">     {
</span><span class="cx">         float number = animated.value();
</span><del>-        number = Base::progress(percentage, repeatCount, m_from.value(), m_to.value(), toAtEndOfDuration().value(), number);
</del><ins>+        number = Base::animate(progress, repeatCount, m_from.value(), m_to.value(), toAtEndOfDuration().value(), number);
</ins><span class="cx">         animated.setValue(number);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -78,26 +78,26 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGPropertyTraits<Color>::fromString(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, Color& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, Color& animated)
</ins><span class="cx">     {
</span><span class="cx">         Color from = m_animationMode == AnimationMode::To ? animated : m_from;
</span><span class="cx">         
</span><del>-        float red = Base::progress(percentage, repeatCount, from.red(), m_to.red(), toAtEndOfDuration().red(), animated.red());
-        float green = Base::progress(percentage, repeatCount, from.green(), m_to.green(), toAtEndOfDuration().green(), animated.green());
-        float blue = Base::progress(percentage, repeatCount, from.blue(), m_to.blue(), toAtEndOfDuration().blue(), animated.blue());
-        float alpha = Base::progress(percentage, repeatCount, from.alpha(), m_to.alpha(), toAtEndOfDuration().alpha(), animated.alpha());
</del><ins>+        float red = Base::animate(progress, repeatCount, from.red(), m_to.red(), toAtEndOfDuration().red(), animated.red());
+        float green = Base::animate(progress, repeatCount, from.green(), m_to.green(), toAtEndOfDuration().green(), animated.green());
+        float blue = Base::animate(progress, repeatCount, from.blue(), m_to.blue(), toAtEndOfDuration().blue(), animated.blue());
+        float alpha = Base::animate(progress, repeatCount, from.alpha(), m_to.alpha(), toAtEndOfDuration().alpha(), animated.alpha());
</ins><span class="cx">         
</span><span class="cx">         animated = { roundAndClampColorChannel(red), roundAndClampColorChannel(green), roundAndClampColorChannel(blue), roundAndClampColorChannel(alpha) };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         Color fromColor = CSSParser::parseColor(from.stripWhiteSpace());
</span><span class="cx">         if (!fromColor.isValid())
</span><del>-            return -1;
</del><ins>+            return { };
</ins><span class="cx">         Color toColor = CSSParser::parseColor(to.stripWhiteSpace());
</span><span class="cx">         if (!toColor.isValid())
</span><del>-            return -1;
</del><ins>+            return { };
</ins><span class="cx">         float red = fromColor.red() - toColor.red();
</span><span class="cx">         float green = fromColor.green() - toColor.green();
</span><span class="cx">         float blue = fromColor.blue() - toColor.blue();
</span><span class="lines">@@ -136,12 +136,12 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGPropertyTraits<int>::fromString(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, int& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, int& animated)
</ins><span class="cx">     {
</span><del>-        animated = static_cast<int>(roundf(Base::progress(percentage, repeatCount, m_from, m_to, toAtEndOfDuration(), animated)));
</del><ins>+        animated = static_cast<int>(roundf(Base::animate(progress, repeatCount, m_from, m_to, toAtEndOfDuration(), animated)));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         return std::abs(to.toIntStrict() - from.toIntStrict());
</span><span class="cx">     }
</span><span class="lines">@@ -174,10 +174,10 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGLengthValue(m_lengthMode, toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount, SVGLengthValue& animated)
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount, SVGLengthValue& animated)
</ins><span class="cx">     {
</span><span class="cx">         SVGLengthContext lengthContext(targetElement);
</span><del>-        SVGLengthType unitType = percentage < 0.5 ? m_from.unitType() : m_to.unitType();
</del><ins>+        SVGLengthType unitType = progress < 0.5 ? m_from.unitType() : m_to.unitType();
</ins><span class="cx"> 
</span><span class="cx">         float from = (m_animationMode == AnimationMode::To ? animated : m_from).value(lengthContext);
</span><span class="cx">         float to = m_to.value(lengthContext);
</span><span class="lines">@@ -184,11 +184,11 @@
</span><span class="cx">         float toAtEndOfDuration = this->toAtEndOfDuration().value(lengthContext);
</span><span class="cx">         float value = animated.value(lengthContext);
</span><span class="cx"> 
</span><del>-        value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
</del><ins>+        value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
</ins><span class="cx">         animated = { lengthContext, value, m_lengthMode, unitType };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         SVGLengthContext lengthContext(targetElement);
</span><span class="cx">         auto fromLength = SVGLengthValue(m_lengthMode, from);
</span><span class="lines">@@ -224,13 +224,13 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGPropertyTraits<float>::fromString(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, float& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, float& animated)
</ins><span class="cx">     {
</span><span class="cx">         float from = m_animationMode == AnimationMode::To ? animated : m_from;
</span><del>-        animated = Base::progress(percentage, repeatCount, from, m_to, toAtEndOfDuration(), animated);
</del><ins>+        animated = Base::animate(progress, repeatCount, from, m_to, toAtEndOfDuration(), animated);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         float fromNumber = 0;
</span><span class="cx">         float toNumber = 0;
</span><span class="lines">@@ -262,7 +262,7 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGPathByteStream(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, SVGPathByteStream& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, SVGPathByteStream& animated)
</ins><span class="cx">     {
</span><span class="cx">         SVGPathByteStream underlyingPath;
</span><span class="cx">         if (m_animationMode == AnimationMode::To)
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx">         if (!from.size() || (m_isAdditive && m_animationMode != AnimationMode::To))
</span><span class="cx">             lastAnimated = animated;
</span><span class="cx"> 
</span><del>-        buildAnimatedSVGPathByteStream(from, m_to, animated, percentage);
</del><ins>+        buildAnimatedSVGPathByteStream(from, m_to, animated, progress);
</ins><span class="cx"> 
</span><span class="cx">         // Handle additive='sum'.
</span><span class="cx">         if (!lastAnimated.isEmpty())
</span><span class="lines">@@ -311,14 +311,14 @@
</span><span class="cx">         m_toAtEndOfDuration = SVGPropertyTraits<FloatRect>::fromString(toAtEndOfDuration);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned repeatCount, FloatRect& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned repeatCount, FloatRect& animated)
</ins><span class="cx">     {
</span><span class="cx">         FloatRect from = m_animationMode == AnimationMode::To ? animated : m_from;
</span><span class="cx">         
</span><del>-        float x = Base::progress(percentage, repeatCount, from.x(), m_to.x(), toAtEndOfDuration().x(), animated.x());
-        float y = Base::progress(percentage, repeatCount, from.y(), m_to.y(), toAtEndOfDuration().y(), animated.y());
-        float width = Base::progress(percentage, repeatCount, from.width(), m_to.width(), toAtEndOfDuration().width(), animated.width());
-        float height = Base::progress(percentage, repeatCount, from.height(), m_to.height(), toAtEndOfDuration().height(), animated.height());
</del><ins>+        float x = Base::animate(progress, repeatCount, from.x(), m_to.x(), toAtEndOfDuration().x(), animated.x());
+        float y = Base::animate(progress, repeatCount, from.y(), m_to.y(), toAtEndOfDuration().y(), animated.y());
+        float width = Base::animate(progress, repeatCount, from.width(), m_to.width(), toAtEndOfDuration().width(), animated.width());
+        float height = Base::animate(progress, repeatCount, from.height(), m_to.height(), toAtEndOfDuration().height(), animated.height());
</ins><span class="cx">         
</span><span class="cx">         animated = { x, y, width, height };
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationDiscreteFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationDiscreteFunction.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationDiscreteFunction.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationDiscreteFunction.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -47,9 +47,9 @@
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement*, float percentage, unsigned, ValueType& animated)
</del><ins>+    void animate(SVGElement*, float progress, unsigned, ValueType& animated)
</ins><span class="cx">     {
</span><del>-        if ((m_animationMode == AnimationMode::FromTo && percentage > 0.5) || m_animationMode == AnimationMode::To || percentage == 1)
</del><ins>+        if ((m_animationMode == AnimationMode::FromTo && progress > 0.5) || m_animationMode == AnimationMode::To || progress == 1)
</ins><span class="cx">             animated = m_to;
</span><span class="cx">         else
</span><span class="cx">             animated = m_from;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationFunction.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationFunction.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationFunction.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     virtual void setFromAndByValues(SVGElement* targetElement, const String&, const String&) = 0;
</span><span class="cx">     virtual void setToAtEndOfDurationValue(const String&) = 0;
</span><span class="cx"> 
</span><del>-    virtual float calculateDistance(SVGElement*, const String&, const String&) const { return -1; }
</del><ins>+    virtual Optional<float> calculateDistance(SVGElement*, const String&, const String&) const { return { }; }
</ins><span class="cx"> protected:
</span><span class="cx">     SVGAnimationFunction(AnimationMode animationMode)
</span><span class="cx">         : m_animationMode(animationMode)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttribute.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttribute.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttribute.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,131 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "Element.h"
-#include "SVGAttributeOwnerProxy.h"
-#include "SVGPropertyTraits.h"
-
-namespace WebCore {
-
-class SVGAttribute { };
-
-template<typename PropertyType>
-class SVGPropertyAttribute : public SVGAttribute {
-public:
-    SVGPropertyAttribute()
-        : m_property(SVGPropertyTraits<PropertyType>::initialValue())
-    {
-    }
-
-    template<typename... Arguments>
-    SVGPropertyAttribute(Arguments&&... arguments)
-        : m_property(std::forward<Arguments>(arguments)...)
-    {
-    }
-
-    PropertyType& value() { return m_property; }
-    const PropertyType& value() const { return m_property; }
-
-    void setValue(const PropertyType& property) { m_property = property; }
-    void setValue(PropertyType&& property) { m_property = WTFMove(property); }
-    void resetValue() { m_property = SVGPropertyTraits<PropertyType>::initialValue(); }
-
-    String toString() const { return SVGPropertyTraits<PropertyType>::toString(m_property); }
-
-    void setShouldSynchronize(bool shouldSynchronize) { m_shouldSynchronize = shouldSynchronize; }
-    bool shouldSynchronize() const { return m_shouldSynchronize; }
-    void synchronize(Element& element, const QualifiedName& attributeName)
-    {
-        if (!m_shouldSynchronize)
-            return;
-        element.setSynchronizedLazyAttribute(attributeName, toString());
-    }
-
-protected:
-    PropertyType m_property;
-    bool m_shouldSynchronize { false };
-};
-
-template<typename TearOffType>
-class SVGAnimatedAttribute : public SVGPropertyAttribute<typename TearOffType::ContentType> {
-public:
-    using PropertyTearOffType = TearOffType;
-    using PropertyType = typename PropertyTearOffType::ContentType;
-    using Base = SVGPropertyAttribute<PropertyType>;
-    using Base::m_property;
-    using Base::m_shouldSynchronize;
-
-    SVGAnimatedAttribute() = default;
-
-    template<typename... Arguments>
-    SVGAnimatedAttribute(Arguments&&... arguments)
-        : Base(std::forward<Arguments>(arguments)...)
-    {
-    }
-
-    const PropertyType& currentValue(const SVGAttributeOwnerProxy& attributeOwnerProxy) const
-    {
-        if (auto wrapper = attributeOwnerProxy.lookupAnimatedProperty(*this)) {
-            if (wrapper->isAnimating())
-                return static_pointer_cast<PropertyTearOffType>(wrapper)->currentAnimatedValue();
-        }
-        return m_property;
-    }
-
-    RefPtr<PropertyTearOffType> animatedProperty(const SVGAttributeOwnerProxy& attributeOwnerProxy)
-    {
-        m_shouldSynchronize = true;
-        if (auto wrapper = attributeOwnerProxy.lookupOrCreateAnimatedProperty(*this))
-            return static_pointer_cast<PropertyTearOffType>(wrapper);
-        RELEASE_ASSERT_NOT_REACHED();
-        return nullptr;
-    }
-};
-
-template<typename TearOffType>
-class SVGAnimatedAttributeList : public SVGAnimatedAttribute<TearOffType> {
-public:
-    using PropertyTearOffType = TearOffType;
-    using PropertyType = typename PropertyTearOffType::ContentType;
-    using Base = SVGAnimatedAttribute<PropertyTearOffType>;
-
-    SVGAnimatedAttributeList() = default;
-
-    template<typename... Arguments>
-    SVGAnimatedAttributeList(Arguments&&... arguments)
-        : Base(std::forward<Arguments>(arguments)...)
-    {
-    }
-
-    void detachAnimatedListWrappers(const SVGAttributeOwnerProxy& attributeOwnerProxy, unsigned newListSize)
-    {
-        if (auto wrapper = attributeOwnerProxy.lookupAnimatedProperty(*this))
-            static_pointer_cast<PropertyTearOffType>(wrapper)->detachListWrappers(newListSize);
-    }
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeAccessorh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttributeAccessor.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeAccessor.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeAccessor.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,248 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "Element.h"
-#include "QualifiedName.h"
-#include "SVGAnimatedPropertyType.h"
-#include "SVGAttribute.h"
-#include "SVGLegacyAnimatedProperty.h"
-#include "SVGLengthValue.h"
-#include "SVGNames.h"
-#include "SVGPropertyTraits.h"
-
-namespace WebCore {
-
-class SVGAttribute;
-class SVGElement;
-
-template<typename OwnerType>
-class SVGAttributeAccessor {
-    WTF_MAKE_FAST_ALLOCATED;
-public:
-    SVGAttributeAccessor(const QualifiedName& attributeName)
-        : m_attributeName(attributeName)
-    {
-    }
-    virtual ~SVGAttributeAccessor() = default;
-
-    const QualifiedName& attributeName() const { return m_attributeName; }
-
-    virtual bool isMatched(const OwnerType&, const SVGAttribute&) const = 0;
-    virtual void synchronizeProperty(OwnerType&, Element&) const = 0;
-
-    virtual bool isAnimatedLengthAttribute() const { return false; }
-    virtual AnimatedPropertyType animatedType() const { return AnimatedUnknown; }
-    virtual Vector<AnimatedPropertyType> animatedTypes() const { return { animatedType() }; }
-
-    virtual RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(OwnerType&, SVGElement&, const SVGAttribute&, AnimatedPropertyState) const { return nullptr; };
-    virtual RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const OwnerType&, const SVGElement&, const SVGAttribute&) const { return nullptr; };
-    virtual Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(OwnerType&, SVGElement&, AnimatedPropertyState) const { return { }; }
-
-protected:
-    const QualifiedName m_attributeName;
-};
-
-template<typename OwnerType, typename AttributeType>
-class SVGPropertyAttributeAccessor : public SVGAttributeAccessor<OwnerType> {
-public:
-    using Base = SVGAttributeAccessor<OwnerType>;
-    using Base::m_attributeName;
-    
-    template<const LazyNeverDestroyed<const QualifiedName>& attributeName, AttributeType OwnerType::*attribute>
-    static SVGAttributeAccessor<OwnerType>& singleton()
-    {
-        static NeverDestroyed<SVGPropertyAttributeAccessor> attributeAccessor { attributeName, attributeName->localName(), attribute };
-        return attributeAccessor;
-    }
-
-    SVGPropertyAttributeAccessor(const QualifiedName& attributeName, const AtomicString& identifier, AttributeType OwnerType::*attribute)
-        : Base(attributeName)
-        , m_identifier(identifier)
-        , m_attribute(attribute)
-    {
-    }
-
-protected:
-    auto& attribute(OwnerType& owner) const { return owner.*m_attribute; }
-    const auto& attribute(const OwnerType& owner) const { return owner.*m_attribute; }
-
-    bool isMatched(const OwnerType& owner, const SVGAttribute& attribute) const override
-    {
-        return &this->attribute(owner) == &attribute;
-    }
-
-    void synchronizeProperty(OwnerType& owner, Element& element) const override
-    {
-        attribute(owner).synchronize(element, m_attributeName);
-    }
-
-    const AtomicString& m_identifier;
-    AttributeType OwnerType::*m_attribute;
-};
-
-template<typename OwnerType, typename AnimatedAttributeType, AnimatedPropertyType type>
-class SVGAnimatedAttributeAccessor : public SVGPropertyAttributeAccessor<OwnerType, AnimatedAttributeType> {
-public:
-    using PropertyTearOffType = typename AnimatedAttributeType::PropertyTearOffType;
-    using PropertyType = typename AnimatedAttributeType::PropertyType;
-    using Base = SVGPropertyAttributeAccessor<OwnerType, AnimatedAttributeType>;
-    using Base::attribute;
-    using Base::isMatched;
-    using Base::m_attributeName;
-    using Base::m_identifier;
-
-    template<const LazyNeverDestroyed<const QualifiedName>& attributeName, AnimatedAttributeType OwnerType::*attribute>
-    static SVGAttributeAccessor<OwnerType>& singleton()
-    {
-        static NeverDestroyed<SVGAnimatedAttributeAccessor> attributeAccessor { attributeName, attributeName->localName(), attribute };
-        return attributeAccessor;
-    }
-
-    template<const LazyNeverDestroyed<const QualifiedName>& attributeName, const AtomicString& (*identifier)(), AnimatedAttributeType OwnerType::*attribute>
-    static SVGAttributeAccessor<OwnerType>& singleton()
-    {
-        static NeverDestroyed<SVGAnimatedAttributeAccessor> attributeAccessor { attributeName, identifier(), attribute };
-        return attributeAccessor;
-    }
-
-    SVGAnimatedAttributeAccessor(const QualifiedName& attributeName, const AtomicString& identifier, AnimatedAttributeType OwnerType::*attribute)
-        : Base(attributeName, identifier, attribute)
-    {
-    }
-
-protected:
-    template<typename PropertyTearOff = PropertyTearOffType, typename Property = PropertyType, AnimatedPropertyType animatedType = type>
-    static RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(SVGElement& element, const QualifiedName& attributeName, const AtomicString& identifier, Property& property, AnimatedPropertyState animatedState)
-    {
-        return SVGLegacyAnimatedProperty::lookupOrCreateAnimatedProperty<PropertyTearOff, Property, animatedType>(element, attributeName, identifier, property, animatedState);
-    }
-
-    static RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const SVGElement& element, const AtomicString& identifier)
-    {
-        return SVGLegacyAnimatedProperty::lookupAnimatedProperty(element, identifier);
-    }
-
-    bool isAnimatedLengthAttribute() const override { return std::is_same<PropertyType, SVGLengthValue>::value; }
-    AnimatedPropertyType animatedType() const override { return type; }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(OwnerType& owner, SVGElement& element, const SVGAttribute& attribute, AnimatedPropertyState animatedState) const override
-    {
-        ASSERT_UNUSED(attribute, isMatched(owner, attribute));
-        return lookupOrCreateAnimatedProperty(element, m_attributeName, m_identifier, this->attribute(owner).value(), animatedState);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const OwnerType&, const SVGElement& element, const SVGAttribute&) const override
-    {
-        return lookupAnimatedProperty(element, m_identifier);
-    }
-
-    Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(OwnerType& owner, SVGElement& element, AnimatedPropertyState animatedState) const override
-    {
-        return { lookupOrCreateAnimatedProperty(element, m_attributeName, m_identifier, attribute(owner).value(), animatedState) };
-    }
-};
-
-template<typename OwnerType, typename AnimatedAttributeType, AnimatedPropertyType type, typename SecondAnimatedAttributeType, AnimatedPropertyType secondType>
-class SVGAnimatedPairAttributeAccessor : public SVGAnimatedAttributeAccessor<OwnerType, AnimatedAttributeType, type> {
-public:
-    using PropertyTearOffType = typename AnimatedAttributeType::PropertyTearOffType;
-    using SecondPropertyTearOffType = typename SecondAnimatedAttributeType::PropertyTearOffType;
-    using SecondPropertyType = typename SecondAnimatedAttributeType::PropertyType;
-    using Base = SVGAnimatedAttributeAccessor<OwnerType, AnimatedAttributeType, type>;
-    using Base::attribute;
-    using Base::lookupOrCreateAnimatedProperty;
-    using Base::lookupAnimatedProperty;
-    using Base::m_attributeName;
-    using Base::m_identifier;
-
-    template<
-        const LazyNeverDestroyed<const QualifiedName>& attributeName,
-        const AtomicString& (*identifier)(), AnimatedAttributeType OwnerType::*attribute,
-        const AtomicString& (*secondIdentifier)(), SecondAnimatedAttributeType OwnerType::*secondAttribute
-    >
-    static SVGAttributeAccessor<OwnerType>& singleton()
-    {
-        static NeverDestroyed<SVGAnimatedPairAttributeAccessor> attributeAccessor { attributeName, identifier(), attribute, secondIdentifier(), secondAttribute };
-        return attributeAccessor;
-    }
-
-    SVGAnimatedPairAttributeAccessor(const QualifiedName& attributeName, const AtomicString& identifier, AnimatedAttributeType OwnerType::*attribute, const AtomicString& secondIdentifier, SecondAnimatedAttributeType OwnerType::*secondAttribute)
-        : Base(attributeName, identifier, attribute)
-        , m_secondIdentifier(secondIdentifier)
-        , m_secondAttribute(secondAttribute)
-    {
-    }
-
-private:
-    auto& secondAttribute(OwnerType& owner) const { return owner.*m_secondAttribute; }
-    const auto& secondAttribute(const OwnerType& owner) const { return owner.*m_secondAttribute; }
-
-    bool isMatched(const OwnerType& owner, const SVGAttribute& attribute) const override
-    {
-        return Base::isMatched(owner, attribute) || &secondAttribute(owner) == &attribute;
-    }
-
-    void synchronizeProperty(OwnerType& owner, Element& element) const override
-    {
-        attribute(owner).synchronize(element, m_attributeName);
-        secondAttribute(owner).synchronize(element, m_attributeName);
-    }
-
-    Vector<AnimatedPropertyType> animatedTypes() const override { return { type, secondType }; }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(OwnerType& owner, SVGElement& element, const SVGAttribute& attribute, AnimatedPropertyState animatedState) const override
-    {
-        if (Base::isMatched(owner, attribute))
-            return lookupOrCreateAnimatedProperty(element, m_attributeName, m_identifier, this->attribute(owner).value(), animatedState);
-        ASSERT(&secondAttribute(owner) == &attribute);
-        return Base::template lookupOrCreateAnimatedProperty<SecondPropertyTearOffType, SecondPropertyType, secondType>(element, m_attributeName, m_secondIdentifier, secondAttribute(owner).value(), animatedState);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const OwnerType& owner, const SVGElement& element, const SVGAttribute& attribute) const override
-    {
-        if (Base::isMatched(owner, attribute))
-            return lookupAnimatedProperty(element, m_identifier);
-        ASSERT(&secondAttribute(owner) == &attribute);
-        return lookupAnimatedProperty(element, m_secondIdentifier);
-    }
-
-    Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(OwnerType& owner, SVGElement& element, AnimatedPropertyState animatedState) const override
-    {
-        return {
-            lookupOrCreateAnimatedProperty(element, m_attributeName, m_identifier, attribute(owner).value(), animatedState),
-            Base::template lookupOrCreateAnimatedProperty<SecondPropertyTearOffType, SecondPropertyType, secondType>(element, m_attributeName, m_secondIdentifier, secondAttribute(owner).value(), animatedState)
-        };
-    }
-
-    const AtomicString& m_secondIdentifier;
-    SecondAnimatedAttributeType OwnerType::*m_secondAttribute;
-};
-
-template<typename OwnerType, typename AnimatedAttributeType, AnimatedPropertyType type>
-using SVGAnimatedOptionalAttributeAccessor = SVGAnimatedPairAttributeAccessor<OwnerType, AnimatedAttributeType, type, AnimatedAttributeType, type>;
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAttributeAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeAnimator.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeAnimator.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -67,11 +67,11 @@
</span><span class="cx">     virtual void setToAtEndOfDurationValue(const String&) { }
</span><span class="cx"> 
</span><span class="cx">     virtual void start(SVGElement*) = 0;
</span><del>-    virtual void progress(SVGElement*, float, unsigned) = 0;
</del><ins>+    virtual void animate(SVGElement*, float progress, unsigned repeatCount) = 0;
</ins><span class="cx">     virtual void apply(SVGElement*) = 0;
</span><span class="cx">     virtual void stop(SVGElement* targetElement) = 0;
</span><span class="cx"> 
</span><del>-    virtual float calculateDistance(SVGElement*, const String&, const String&) const { return -1; }
</del><ins>+    virtual Optional<float> calculateDistance(SVGElement*, const String&, const String&) const { return { }; }
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     bool isAnimatedStylePropertyAniamtor(const SVGElement*) const;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxycpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,43 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SVGAttributeOwnerProxy.h"
-
-#include "SVGElement.h"
-
-namespace WebCore {
-
-SVGAttributeOwnerProxy::SVGAttributeOwnerProxy(SVGElement& element)
-    : m_element(makeWeakPtr(element))
-{
-}
-
-SVGElement& SVGAttributeOwnerProxy::element() const
-{
-    return *m_element;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,59 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "QualifiedName.h"
-#include "SVGAnimatedPropertyType.h"
-#include <wtf/WeakPtr.h>
-
-namespace WebCore {
-
-class SVGAttribute;
-class SVGElement;
-class SVGLegacyAnimatedProperty;
-
-class SVGAttributeOwnerProxy {
-public:
-    SVGAttributeOwnerProxy(SVGElement&);
-
-    virtual ~SVGAttributeOwnerProxy() = default;
-
-    SVGElement& element() const;
-
-    virtual void synchronizeAttributes() const = 0;
-    virtual void synchronizeAttribute(const QualifiedName&) const = 0;
-
-    virtual Vector<AnimatedPropertyType> animatedTypes(const QualifiedName&) const = 0;
-
-    virtual RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute&) const = 0;
-    virtual RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const SVGAttribute&) const = 0;
-    virtual Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName&) const = 0;
-
-protected:
-    WeakPtr<SVGElement> m_element;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeOwnerProxyImplh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,103 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "SVGAttributeOwnerProxy.h"
-#include "SVGAttributeRegistry.h"
-
-namespace WebCore {
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeOwnerProxyImpl : public SVGAttributeOwnerProxy {
-public:
-    using AttributeRegistry = SVGAttributeRegistry<OwnerType, BaseTypes...>;
-
-    SVGAttributeOwnerProxyImpl(OwnerType& owner, SVGElement& element, AnimatedPropertyState animatedState = PropertyIsReadWrite)
-        : SVGAttributeOwnerProxy(element)
-        , m_owner(owner)
-        , m_animatedState(animatedState)
-    {
-        // This is the OwnerProxy constructor for the non SVGElement based owners, e.g. SVGTests.
-    }
-
-    SVGAttributeOwnerProxyImpl(OwnerType& owner)
-        : SVGAttributeOwnerProxy(owner)
-        , m_owner(owner)
-    {
-        static_assert(std::is_base_of<SVGElement, OwnerType>::value, "The owner of SVGAttributeOwnerProxy should be derived from SVGElement.");
-    }
-
-    static AttributeRegistry& attributeRegistry()
-    {
-        return AttributeRegistry::singleton();
-    }
-
-    static bool isKnownAttribute(const QualifiedName& attributeName)
-    {
-        return attributeRegistry().isKnownAttribute(attributeName);
-    }
-
-    static bool isAnimatedLengthAttribute(const QualifiedName& attributeName)
-    {
-        return attributeRegistry().isAnimatedLengthAttribute(attributeName);
-    }
-
-private:
-    void synchronizeAttributes() const override
-    {
-        attributeRegistry().synchronizeAttributes(m_owner, *m_element);
-    }
-
-    void synchronizeAttribute(const QualifiedName& attributeName) const override
-    {
-        attributeRegistry().synchronizeAttribute(m_owner, *m_element, attributeName);
-    }
-
-    Vector<AnimatedPropertyType> animatedTypes(const QualifiedName& attributeName) const override
-    {
-        return attributeRegistry().animatedTypes(attributeName);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute& attribute) const override
-    {
-        return attributeRegistry().lookupOrCreateAnimatedProperty(m_owner, *m_element, attribute, m_animatedState);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const SVGAttribute& attribute) const override
-    {
-        return attributeRegistry().lookupAnimatedProperty(m_owner, *m_element, attribute);
-    }
-
-    Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName& attributeName) const override
-    {
-        return attributeRegistry().lookupOrCreateAnimatedProperties(m_owner, *m_element, attributeName, m_animatedState);
-    }
-
-    OwnerType& m_owner;
-    AnimatedPropertyState m_animatedState { PropertyIsReadWrite };
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAttributeRegistryh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAttributeRegistry.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAttributeRegistry.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGAttributeRegistry.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,215 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "SVGAttributeAccessor.h"
-#include "SVGLegacyAnimatedProperty.h"
-#include "SVGZoomAndPanType.h"
-#include <wtf/HashMap.h>
-
-namespace WebCore {
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeRegistry {
-public:
-    static SVGAttributeRegistry<OwnerType, BaseTypes...>& singleton()
-    {
-        static NeverDestroyed<SVGAttributeRegistry<OwnerType, BaseTypes...>> map;
-        return map;
-    }
-
-    bool isEmpty() const { return m_map.isEmpty(); }
-
-    bool isKnownAttribute(const QualifiedName& attributeName) const
-    {
-        // Here we need to loop through the entries in the map and use matches() to compare them with attributeName.
-        // m_map.contains() uses QualifiedName::operator==() which compares the impl pointers only while matches()
-        // compares the contents if the impl pointers differ.
-        auto it = std::find_if(m_map.begin(), m_map.end(), [&attributeName](const auto& entry) -> bool {
-            return entry.key.matches(attributeName);
-        });
-        return it != m_map.end();
-    }
-
-    bool isAnimatedLengthAttribute(const QualifiedName& attributeName) const
-    {
-        if (const auto* attributeAccessor = findAttributeAccessor(attributeName))
-            return attributeAccessor->isAnimatedLengthAttribute();
-        return false;
-    }
-
-    Vector<AnimatedPropertyType> animatedTypes(const QualifiedName& attributeName) const
-    {
-        // If this registry has an accessor for attributeName, return animatedTypes() of this accessor.
-        if (const auto* attributeAccessor = findAttributeAccessor(attributeName))
-            return attributeAccessor->animatedTypes();
-        // Otherwise loop through BaeTypes and see if any of them knows attributeName.
-        return animatedTypesBaseTypes(attributeName);
-    }
-
-    void synchronizeAttributes(OwnerType& owner, SVGElement& element) const
-    {
-        for (auto* attributeAccessor : m_map.values())
-            attributeAccessor->synchronizeProperty(owner, element);
-        synchronizeAttributesBaseTypes(owner, element);
-    }
-
-    bool synchronizeAttribute(OwnerType& owner, SVGElement& element, const QualifiedName& attributeName) const
-    {
-        if (const auto* attributeAccessor = findAttributeAccessor(attributeName)) {
-            attributeAccessor->synchronizeProperty(owner, element);
-            return true;
-        }
-        return synchronizeAttributeBaseTypes(owner, element, attributeName);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(OwnerType& owner, SVGElement& element, const SVGAttribute& attribute, AnimatedPropertyState animatedState) const
-    {
-        if (const auto* attributeAccessor = findAttributeAccessor(owner, attribute))
-            return attributeAccessor->lookupOrCreateAnimatedProperty(owner, element, attribute, animatedState);
-        return lookupOrCreateAnimatedPropertyBaseTypes(owner, element, attribute, animatedState);
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const OwnerType& owner, const SVGElement& element, const SVGAttribute& attribute) const
-    {
-        if (const auto* attributeAccessor = findAttributeAccessor(owner, attribute))
-            return attributeAccessor->lookupAnimatedProperty(owner, element, attribute);
-        return lookupAnimatedPropertyBaseTypes(owner, element, attribute);
-    }
-
-    Vector<RefPtr<SVGLegacyAnimatedProperty>> lookupOrCreateAnimatedProperties(OwnerType& owner, SVGElement& element, const QualifiedName& attributeName, AnimatedPropertyState animatedState) const
-    {
-        if (const auto* attributeAccessor = findAttributeAccessor(attributeName))
-            return attributeAccessor->lookupOrCreateAnimatedProperties(owner, element, animatedState);
-        return lookupOrCreateAnimatedPropertiesBaseTypes(owner, element, attributeName, animatedState);
-    }
-
-    void registerAttribute(const SVGAttributeAccessor<OwnerType>& attributeAccessor)
-    {
-        m_map.add(attributeAccessor.attributeName(), &attributeAccessor);
-    }
-
-private:
-    // This is a template function with parameter 'I' whose default value = 0. So you can call it without any parameter from animatedTypes().
-    // It returns Vector<AnimatedPropertyType> and is enable_if<I == sizeof...(BaseTypes)>. So it is mainly for breaking the recursion. If
-    // it is called, this means no attribute was found in this registry for this QualifiedName. So return an empty Vector<AnimatedPropertyType>.
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), Vector<AnimatedPropertyType>>::type animatedTypesBaseTypes(const QualifiedName&) { return { }; }
-
-    // This version of animatedTypesBaseTypes() is enable_if<I < sizeof...(BaseTypes)>.
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), Vector<AnimatedPropertyType>>::type animatedTypesBaseTypes(const QualifiedName& attributeName)
-    {
-        // Get the base type at index 'I' using std::tuple and std::tuple_element.
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-
-        // Get the SVGAttributeRegistry of BaseType. If it knows attributeName break the recursion.
-        auto animatedTypes = BaseType::attributeRegistry().animatedTypes(attributeName);
-        if (!animatedTypes.isEmpty())
-            return animatedTypes;
-
-        // SVGAttributeRegistry of BaseType does not know attributeName. Recurse to the next BaseType.
-        return animatedTypesBaseTypes<I + 1>(attributeName);
-    }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), void>::type synchronizeAttributesBaseTypes(OwnerType&, Element&) { }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), void>::type synchronizeAttributesBaseTypes(OwnerType& owner, SVGElement& element)
-    {
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-        BaseType::attributeRegistry().synchronizeAttributes(owner, element);
-        synchronizeAttributesBaseTypes<I + 1>(owner, element);
-    }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), bool>::type synchronizeAttributeBaseTypes(OwnerType&, Element&, const QualifiedName&) { return false; }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), bool>::type synchronizeAttributeBaseTypes(OwnerType& owner, SVGElement& element, const QualifiedName& attributeName)
-    {
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-        if (BaseType::attributeRegistry().synchronizeAttribute(owner, element, attributeName))
-            return true;
-        return synchronizeAttributeBaseTypes<I + 1>(owner, element, attributeName);
-    }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), RefPtr<SVGLegacyAnimatedProperty>>::type lookupOrCreateAnimatedPropertyBaseTypes(OwnerType&, SVGElement&, const SVGAttribute&, AnimatedPropertyState) { return nullptr; }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), RefPtr<SVGLegacyAnimatedProperty>>::type lookupOrCreateAnimatedPropertyBaseTypes(OwnerType& owner, SVGElement& element, const SVGAttribute& attribute, AnimatedPropertyState animatedState)
-    {
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-        if (auto animatedProperty = BaseType::attributeRegistry().lookupOrCreateAnimatedProperty(owner, element, attribute, animatedState))
-            return animatedProperty;
-        return lookupOrCreateAnimatedPropertyBaseTypes<I + 1>(owner, element, attribute, animatedState);
-    }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), RefPtr<SVGLegacyAnimatedProperty>>::type lookupAnimatedPropertyBaseTypes(const OwnerType&, const SVGElement&, const SVGAttribute&) { return nullptr; }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), RefPtr<SVGLegacyAnimatedProperty>>::type lookupAnimatedPropertyBaseTypes(const OwnerType& owner, const SVGElement& element, const SVGAttribute& attribute)
-    {
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-        if (auto animatedProperty = BaseType::attributeRegistry().lookupAnimatedProperty(owner, element, attribute))
-            return animatedProperty;
-        return lookupAnimatedPropertyBaseTypes<I + 1>(owner, element, attribute);
-    }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I == sizeof...(BaseTypes), Vector<RefPtr<SVGLegacyAnimatedProperty>>>::type lookupOrCreateAnimatedPropertiesBaseTypes(OwnerType&, SVGElement&, const QualifiedName&, AnimatedPropertyState) { return { }; }
-
-    template<size_t I = 0>
-    static typename std::enable_if<I < sizeof...(BaseTypes), Vector<RefPtr<SVGLegacyAnimatedProperty>>>::type lookupOrCreateAnimatedPropertiesBaseTypes(OwnerType& owner, SVGElement& element, const QualifiedName& attributeName, AnimatedPropertyState animatedState)
-    {
-        using BaseType = typename std::tuple_element<I, typename std::tuple<BaseTypes...>>::type;
-        auto animatedProperties = BaseType::attributeRegistry().lookupOrCreateAnimatedProperties(owner, element, attributeName, animatedState);
-        if (!animatedProperties.isEmpty())
-            return animatedProperties;
-        return lookupOrCreateAnimatedPropertiesBaseTypes<I + 1>(owner, element, attributeName, animatedState);
-    }
-
-    const SVGAttributeAccessor<OwnerType>* findAttributeAccessor(const OwnerType& owner, const SVGAttribute& attribute) const
-    {
-        for (auto* attributeAccessor : m_map.values()) {
-            if (attributeAccessor->isMatched(owner, attribute))
-                return attributeAccessor;
-        }
-        return nullptr;
-    }
-
-    const SVGAttributeAccessor<OwnerType>* findAttributeAccessor(const QualifiedName& attributeName) const
-    {
-        return m_map.get(attributeName);
-    }
-
-    HashMap<QualifiedName, const SVGAttributeAccessor<OwnerType>*> m_map;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGLegacyAnimatedPropertycpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "SVGLegacyAnimatedProperty.h"
-
-#include "SVGElement.h"
-
-namespace WebCore {
-
-SVGLegacyAnimatedProperty::SVGLegacyAnimatedProperty(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType)
-    : m_contextElement(contextElement)
-    , m_attributeName(attributeName)
-    , m_animatedPropertyType(animatedPropertyType)
-{
-}
-
-SVGLegacyAnimatedProperty::~SVGLegacyAnimatedProperty()
-{
-    // Assure that animationEnded() was called, if animationStarted() was called before.
-    ASSERT(!isAnimating());
-
-    // Remove wrapper from cache.
-    for (auto& cache : animatedPropertyCache()) {
-        if (cache.value == this) {
-            animatedPropertyCache().remove(cache.key);
-            return;
-        }
-    }
-
-    RELEASE_ASSERT_NOT_REACHED();
-}
-
-void SVGLegacyAnimatedProperty::commitChange()
-{
-    ASSERT(m_contextElement);
-    ASSERT(!m_contextElement->m_deletionHasBegun);
-    m_contextElement->invalidateSVGAttributes();
-    m_contextElement->svgAttributeChanged(m_attributeName);
-    // Needed to synchronize with CSSOM for presentation attributes with SVG DOM.
-    m_contextElement->synchronizeAnimatedSVGAttribute(m_attributeName);
-}
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGLegacyAnimatedPropertyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,93 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "QualifiedName.h"
-#include "SVGAnimatedPropertyDescription.h"
-#include "SVGAnimatedPropertyType.h"
-#include <wtf/RefCounted.h>
-
-namespace WebCore {
-
-class SVGElement;
-class SVGLegacyProperty;
-
-class SVGLegacyAnimatedProperty : public RefCounted<SVGLegacyAnimatedProperty> {
-public:
-    virtual ~SVGLegacyAnimatedProperty();
-    virtual bool isAnimating() const { return false; }
-    virtual bool isAnimatedListTearOff() const { return false; }
-
-    SVGElement* contextElement() const { return m_contextElement.get(); }
-    const QualifiedName& attributeName() const { return m_attributeName; }
-    AnimatedPropertyType animatedPropertyType() const { return m_animatedPropertyType; }
-    bool isReadOnly() const { return m_isReadOnly; }
-    void setIsReadOnly() { m_isReadOnly = true; }
-
-    void commitChange();
-
-    template<typename TearOffType, typename PropertyType, AnimatedPropertyType animatedType>
-    static RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateAnimatedProperty(SVGElement& element, const QualifiedName& attributeName, const AtomicString& identifier, PropertyType& property, AnimatedPropertyState animatedState)
-    {
-        SVGAnimatedPropertyDescription key(&element, identifier);
-
-        auto result = animatedPropertyCache().add(key, nullptr);
-        if (!result.isNewEntry)
-            return result.iterator->value;
-
-        auto wrapper = TearOffType::create(&element, attributeName, animatedType, property);
-        if (animatedState == PropertyIsReadOnly)
-            wrapper->setIsReadOnly();
-
-        // Cache the raw pointer but return a RefPtr<>. This will break the cyclic reference
-        // between SVGAnimatedProperty and SVGElement once the property pointer is not needed.
-        result.iterator->value = wrapper.ptr();
-        return static_reference_cast<SVGLegacyAnimatedProperty>(wrapper);
-    }
-
-    static RefPtr<SVGLegacyAnimatedProperty> lookupAnimatedProperty(const SVGElement& element, const AtomicString& identifier)
-    {
-        SVGAnimatedPropertyDescription key(const_cast<SVGElement*>(&element), identifier);
-        return animatedPropertyCache().get(key);
-    }
-
-protected:
-    SVGLegacyAnimatedProperty(SVGElement*, const QualifiedName&, AnimatedPropertyType);
-
-private:
-    // Caching facilities.
-    using Cache = HashMap<SVGAnimatedPropertyDescription, SVGLegacyAnimatedProperty*, SVGAnimatedPropertyDescriptionHash, SVGAnimatedPropertyDescriptionHashTraits>;
-    static Cache& animatedPropertyCache()
-    {
-        static NeverDestroyed<Cache> cache;
-        return cache;
-    }
-
-    RefPtr<SVGElement> m_contextElement;
-    const QualifiedName& m_attributeName;
-    AnimatedPropertyType m_animatedPropertyType;
-
-protected:
-    bool m_isReadOnly { false };
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGLegacyPropertyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGLegacyProperty.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGLegacyProperty.h  2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGLegacyProperty.h     2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,40 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include <wtf/RefCounted.h>
-
-namespace WebCore {
-
-enum SVGPropertyRole {
-    UndefinedRole,
-    BaseValRole,
-    AnimValRole
-};
-
-class SVGLegacyProperty : public RefCounted<SVGLegacyProperty> {
-public:
-    virtual ~SVGLegacyProperty() = default;
-
-    virtual bool isReadOnly() const = 0;
-    virtual void commitChange() = 0;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGListProperty.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListProperty.h    2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGListProperty.h       2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,486 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPropertyTearOff.h"
-#include "SVGPropertyTraits.h"
-#include <wtf/Ref.h>
-
-namespace WebCore {
-
-enum ListModification {
-    ListModificationUnknown = 0,
-    ListModificationInsert = 1,
-    ListModificationReplace = 2,
-    ListModificationRemove = 3,
-    ListModificationAppend = 4
-};
-
-template<typename PropertyType>
-class SVGAnimatedListPropertyTearOff;
-
-template<typename PropertyType>
-class SVGListProperty : public SVGLegacyProperty, public CanMakeWeakPtr<SVGListProperty<PropertyType>> {
-public:
-    typedef SVGListProperty<PropertyType> Self;
-
-    using ListItemType = typename SVGPropertyTraits<PropertyType>::ListItemType;
-    using ListItemTearOff = typename SVGPropertyTraits<PropertyType>::ListItemTearOff;
-    using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff<PropertyType>;
-    using ListWrapperCache = typename AnimatedListPropertyTearOff::ListWrapperCache;
-
-    ExceptionOr<bool> canAlterList() const
-    {
-        if (m_role == AnimValRole)
-            return Exception { NoModificationAllowedError };
-
-        return true;
-    }
-
-    static void detachListWrappersAndResize(ListWrapperCache* wrappers, unsigned newListSize = 0)
-    {
-        // See SVGPropertyTearOff::detachWrapper() for an explanation about what's happening here.
-        ASSERT(wrappers);
-        for (auto& item : *wrappers) {
-            if (item)
-                item->detachWrapper();
-        }
-
-        // Reinitialize the wrapper cache to be equal to the new values size, after the XML DOM changed the list.
-        if (newListSize)
-            wrappers->fill(0, newListSize);
-        else
-            wrappers->clear();
-    }
-
-    void detachListWrappers(unsigned newListSize)
-    {
-        detachListWrappersAndResize(m_wrappers, newListSize);
-    }
-
-    void setValuesAndWrappers(PropertyType* values, ListWrapperCache* wrappers, bool shouldOwnValues)
-    {
-        // This is only used for animVal support, to switch the underlying values & wrappers
-        // to the current animated values, once animation for a list starts.
-        ASSERT(m_values);
-        ASSERT(m_wrappers);
-        ASSERT(m_role == AnimValRole);
-        if (m_ownsValues)
-            delete m_values;
-        m_values = values;
-        m_ownsValues = shouldOwnValues;
-        m_wrappers = wrappers;
-        ASSERT(m_values->size() == m_wrappers->size());
-    }
-
-    // SVGList::clear()
-    ExceptionOr<void> clearValues()
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        m_values->clear();
-        commitChange();
-        return { };
-    }
-
-    ExceptionOr<void> clearValuesAndWrappers()
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        detachListWrappers(0);
-        m_values->clear();
-        commitChange();
-        return { };
-    }
-
-    // SVGList::numberOfItems()
-    unsigned numberOfItems() const
-    {
-        return m_values->size();
-    }
-
-    // SVGList::initialize()
-    ExceptionOr<ListItemType> initializeValues(const ListItemType& newItem)
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list.
-        processIncomingListItemValue(newItem, 0);
-
-        // Spec: Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter.
-        m_values->clear();
-        m_values->append(newItem);
-
-        commitChange();
-        return ListItemType { newItem };
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> initializeValuesAndWrappers(ListItemTearOff& item)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        ASSERT(m_values->size() == m_wrappers->size());
-
-        Ref<ListItemTearOff> newItem(item);
-
-        // Spec: If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list.
-        processIncomingListItemWrapper(newItem, 0);
-
-        // Spec: Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter.
-        detachListWrappers(0);
-        m_values->clear();
-
-        m_values->append(newItem->propertyReference());
-        m_wrappers->append(makeWeakPtr(newItem.get()));
-
-        commitChange();
-        return newItem;
-    }
-
-    // SVGList::getItem()
-    ExceptionOr<bool> canGetItem(unsigned index)
-    {
-        if (index >= m_values->size())
-            return Exception { IndexSizeError };
-
-        return true;
-    }
-
-    ExceptionOr<ListItemType> getItemValues(unsigned index)
-    {
-        auto result = canGetItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
-        return ListItemType { m_values->at(index) };
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> getItemValuesAndWrappers(AnimatedListPropertyTearOff& animatedList, unsigned index)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canGetItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
-        // Any changes made to the item are immediately reflected in the list.
-        ASSERT(m_values->size() == m_wrappers->size());
-        RefPtr<ListItemTearOff> wrapper = static_cast<ListItemTearOff*>(m_wrappers->at(index).get());
-        if (!wrapper) {
-            // Create new wrapper, which is allowed to directly modify the item in the list, w/o copying and cache the wrapper in our map.
-            // It is also associated with our animated property, so it can notify the SVG Element which holds the SVGAnimated*List
-            // that it has been modified (and thus can call svgAttributeChanged(associatedAttributeName)).
-            wrapper = ListItemTearOff::create(animatedList, UndefinedRole, m_values->at(index));
-            m_wrappers->at(index) = makeWeakPtr(*wrapper);
-        }
-
-        return wrapper.releaseNonNull();
-    }
-
-    // SVGList::insertItemBefore()
-    ExceptionOr<ListItemType> insertItemBeforeValues(const ListItemType& newItem, unsigned index)
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
-        if (index > m_values->size())
-            index = m_values->size();
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        if (!processIncomingListItemValue(newItem, &index)) {
-            // Inserting the item before itself is a no-op.
-            return ListItemType { newItem };
-        }
-
-        // Spec: Inserts a new item into the list at the specified position. The index of the item before which the new item is to be
-        // inserted. The first item is number 0. If the index is equal to 0, then the new item is inserted at the front of the list.
-        m_values->insert(index, newItem);
-
-        commitChange();
-        return ListItemType { newItem };
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> insertItemBeforeValuesAndWrappers(ListItemTearOff& item, unsigned index)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
-        if (index > m_values->size())
-            index = m_values->size();
-
-        ASSERT(m_values->size() == m_wrappers->size());
-
-        Ref<ListItemTearOff> newItem(item);
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        if (!processIncomingListItemWrapper(newItem, &index))
-            return newItem;
-
-        // Spec: Inserts a new item into the list at the specified position. The index of the item before which the new item is to be
-        // inserted. The first item is number 0. If the index is equal to 0, then the new item is inserted at the front of the list.
-        m_values->insert(index, newItem->propertyReference());
-
-        // Store new wrapper at position 'index', change its underlying value, so mutations of newItem, directly affect the item in the list.
-        m_wrappers->insert(index, makeWeakPtr(newItem.get()));
-
-        commitChange();
-        return newItem;
-    }
-
-    // SVGList::replaceItem()
-    ExceptionOr<bool> canReplaceItem(unsigned index)
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        if (index >= m_values->size())
-            return Exception { IndexSizeError };
-
-        return true;
-    }
-
-    ExceptionOr<ListItemType> replaceItemValues(const ListItemType& newItem, unsigned index)
-    {
-        auto result = canReplaceItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item.
-        if (!processIncomingListItemValue(newItem, &index)) {
-            // Replacing the item with itself is a no-op.
-            return ListItemType { newItem };
-        }
-
-        if (m_values->isEmpty()) {
-            // 'newItem' already lived in our list, we removed it, and now we're empty, which means there's nothing to replace.
-            return Exception { IndexSizeError };
-        }
-
-        // Update the value at the desired position 'index'. 
-        m_values->at(index) = newItem;
-
-        commitChange();
-        return ListItemType { newItem };
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> replaceItemValuesAndWrappers(ListItemTearOff& item, unsigned index)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canReplaceItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        ASSERT(m_values->size() == m_wrappers->size());
-
-        Ref<ListItemTearOff> newItem(item);
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item.
-        if (!processIncomingListItemWrapper(newItem, &index))
-            return newItem;
-
-        if (m_values->isEmpty()) {
-            ASSERT(m_wrappers->isEmpty());
-            // 'newItem' already lived in our list, we removed it, and now we're empty, which means there's nothing to replace.
-            return Exception { IndexSizeError };
-        }
-
-        // Detach the existing wrapper.
-        RefPtr<ListItemTearOff> oldItem = static_cast<ListItemTearOff*>(m_wrappers->at(index).get());
-        if (oldItem)
-            oldItem->detachWrapper();
-
-        // Update the value and the wrapper at the desired position 'index'. 
-        m_values->at(index) = newItem->propertyReference();
-        m_wrappers->at(index) = makeWeakPtr(newItem.get());
-
-        commitChange();
-        return newItem;
-    }
-
-    // SVGList::removeItem()
-    ExceptionOr<bool> canRemoveItem(unsigned index)
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        if (index >= m_values->size())
-            return Exception { IndexSizeError };
-
-        return true;
-    }
-
-    ExceptionOr<ListItemType> removeItemValues(unsigned index)
-    {
-        auto result = canRemoveItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        ListItemType oldItem = m_values->at(index);
-        m_values->remove(index);
-
-        commitChange();
-        return oldItem;
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> removeItemValuesAndWrappers(AnimatedListPropertyTearOff& animatedList, unsigned index)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canRemoveItem(index);
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        ASSERT(m_values->size() == m_wrappers->size());
-
-        // Detach the existing wrapper.
-        RefPtr<ListItemTearOff> oldItem = static_cast<ListItemTearOff*>(m_wrappers->at(index).get());
-        if (!oldItem)
-            oldItem = ListItemTearOff::create(animatedList, UndefinedRole, m_values->at(index));
-
-        oldItem->detachWrapper();
-        m_wrappers->remove(index);
-        m_values->remove(index);
-
-        commitChange();
-        return oldItem.releaseNonNull();
-    }
-
-    // SVGList::appendItem()
-    ExceptionOr<ListItemType> appendItemValues(const ListItemType& newItem)
-    {
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        processIncomingListItemValue(newItem, 0);
-
-        // Append the value at the end of the list.
-        m_values->append(newItem);
-
-        commitChange(ListModificationAppend);
-        return ListItemType { newItem };
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> appendItemValuesAndWrappers(ListItemTearOff& item)
-    {
-        ASSERT(m_wrappers);
-
-        auto result = canAlterList();
-        if (result.hasException())
-            return result.releaseException();
-        ASSERT(result.releaseReturnValue());
-
-        ASSERT(m_values->size() == m_wrappers->size());
-
-        Ref<ListItemTearOff> newItem(item);
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        processIncomingListItemWrapper(newItem, 0);
-
-        // Append the value and wrapper at the end of the list.
-        m_values->append(newItem->propertyReference());
-        m_wrappers->append(makeWeakPtr(newItem.get()));
-
-        commitChange(ListModificationAppend);
-        return newItem;
-    }
-
-    PropertyType& values()
-    {
-        ASSERT(m_values);
-        return *m_values;
-    }
-
-    ListWrapperCache& wrappers() const
-    {
-        ASSERT(m_wrappers);
-        return *m_wrappers;
-    }
-
-protected:
-    SVGListProperty(SVGPropertyRole role, PropertyType& values, ListWrapperCache* wrappers)
-        : m_role(role)
-        , m_ownsValues(false)
-        , m_values(&values)
-        , m_wrappers(wrappers)
-    {
-    }
-
-    virtual ~SVGListProperty()
-    {
-        if (m_ownsValues)
-            delete m_values;
-    }
-
-    void commitChange() override = 0;
-    virtual void commitChange(ListModification)
-    {
-        commitChange();
-    }
-
-    virtual bool processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify) = 0;
-    virtual bool processIncomingListItemWrapper(Ref<ListItemTearOff>& newItem, unsigned* indexToModify) = 0;
-
-    SVGPropertyRole m_role;
-    bool m_ownsValues;
-    PropertyType* m_values;
-    ListWrapperCache* m_wrappers;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h     2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h        2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,208 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGListProperty.h"
-
-namespace WebCore {
-
-template<typename PropertyType>
-class SVGListPropertyTearOff : public SVGListProperty<PropertyType> {
-public:
-    using Base = SVGListProperty<PropertyType>;
-    using Self = SVGListPropertyTearOff<PropertyType>;
-
-    using ListItemType = typename SVGPropertyTraits<PropertyType>::ListItemType;
-    using ListItemTearOff = typename SVGPropertyTraits<PropertyType>::ListItemTearOff;
-    using PtrListItemTearOff = RefPtr<ListItemTearOff>;
-    using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff<PropertyType>;
-    using ListWrapperCache = typename SVGAnimatedListPropertyTearOff<PropertyType>::ListWrapperCache;
-
-    using Base::m_role;
-    using Base::m_values;
-    using Base::m_wrappers;
-
-    static Ref<Self> create(AnimatedListPropertyTearOff& animatedProperty, SVGPropertyRole role, PropertyType& values, ListWrapperCache& wrappers)
-    {
-        return adoptRef(*new Self(animatedProperty, role, values, wrappers));
-    }
-
-    int findItem(ListItemTearOff* item) const
-    {
-        ASSERT(m_values);
-        ASSERT(m_wrappers);
-
-        unsigned size = m_wrappers->size();
-        ASSERT(size == m_values->size());
-        for (size_t i = 0; i < size; ++i) {
-            if (item == m_wrappers->at(i))
-                return i;
-        }
-
-        return -1;
-    }
-
-    void removeItemFromList(size_t itemIndex, bool shouldSynchronizeWrappers)
-    {
-        ASSERT(m_values);
-        ASSERT(m_wrappers);
-        ASSERT(m_values->size() == m_wrappers->size());
-        ASSERT_WITH_SECURITY_IMPLICATION(itemIndex < m_wrappers->size());
-
-        auto item = m_wrappers->at(itemIndex);
-        item->detachWrapper();
-        m_wrappers->remove(itemIndex);
-        m_values->remove(itemIndex);
-
-        if (shouldSynchronizeWrappers)
-            commitChange();
-    }
-
-    // SVGList API
-    ExceptionOr<void> clear()
-    {
-        return Base::clearValuesAndWrappers();
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> initialize(ListItemTearOff& newItem)
-    {
-        return Base::initializeValuesAndWrappers(newItem);
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> getItem(unsigned index)
-    {
-        return Base::getItemValuesAndWrappers(m_animatedProperty.get(), index);
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> insertItemBefore(ListItemTearOff& newItem, unsigned index)
-    {
-        return Base::insertItemBeforeValuesAndWrappers(newItem, index);
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> replaceItem(ListItemTearOff& newItem, unsigned index)
-    {
-        return Base::replaceItemValuesAndWrappers(newItem, index);
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> removeItem(unsigned index)
-    {
-        return Base::removeItemValuesAndWrappers(m_animatedProperty.get(), index);
-    }
-
-    ExceptionOr<Ref<ListItemTearOff>> appendItem(ListItemTearOff& newItem)
-    {
-        return Base::appendItemValuesAndWrappers(newItem);
-    }
-
-protected:
-    SVGListPropertyTearOff(AnimatedListPropertyTearOff& animatedProperty, SVGPropertyRole role, PropertyType& values, ListWrapperCache& wrappers)
-        : SVGListProperty<PropertyType>(role, values, &wrappers)
-        , m_animatedProperty(animatedProperty)
-    {
-    }
-
-    bool isReadOnly() const override
-    {
-        if (m_role == AnimValRole)
-            return true;
-        if (m_animatedProperty->isReadOnly())
-            return true;
-        return false;
-    }
-
-    void commitChange() override
-    {
-        ASSERT(m_values);
-        ASSERT(m_wrappers);
-
-        // Update existing wrappers, as the index in the values list has changed.
-        unsigned size = m_wrappers->size();
-        ASSERT(size == m_values->size());
-        for (unsigned i = 0; i < size; ++i) {
-            auto item = m_wrappers->at(i);
-            if (!item)
-                continue;
-            item->setAnimatedProperty(m_animatedProperty.ptr());
-            item->setValue(m_values->at(i));
-        }
-
-        m_animatedProperty->commitChange();
-    }
-
-    bool processIncomingListItemValue(const ListItemType&, unsigned*) override
-    {
-        ASSERT_NOT_REACHED();
-        return true;
-    }
-
-    bool processIncomingListItemWrapper(Ref<ListItemTearOff>& newItem, unsigned* indexToModify) override
-    {
-        auto animatedPropertyOfItem = makeRefPtr(newItem->animatedProperty());
-
-        // newItem has been created manually, it doesn't belong to any SVGElement.
-        // (for example: "textElement.x.baseVal.appendItem(svgsvgElement.createSVGLength())")
-        if (!animatedPropertyOfItem)
-            return true;
-
-        // newItem belongs to a SVGElement, but its associated SVGAnimatedProperty is not an animated list tear off.
-        // (for example: "textElement.x.baseVal.appendItem(rectElement.width.baseVal)")
-        if (!animatedPropertyOfItem->isAnimatedListTearOff()) {
-            // We have to copy the incoming newItem, as we're not allowed to insert this tear off as is into our wrapper cache.
-            // Otherwhise we'll end up having two SVGAnimatedPropertys that operate on the same SVGPropertyTearOff. Consider the example above:
-            // SVGRectElements SVGAnimatedLength 'width' property baseVal points to the same tear off object
-            // that's inserted into SVGTextElements SVGAnimatedLengthList 'x'. textElement.x.baseVal.getItem(0).value += 150 would
-            // mutate the rectElement width _and_ the textElement x list. That's obviously wrong, take care of that.
-            newItem = ListItemTearOff::create(newItem->propertyReference());
-            return true;
-        }
-
-        // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-        // 'newItem' is already living in another list. If it's not our list, synchronize the other lists wrappers after the removal.
-        bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty.ptr();
-        AnimatedListPropertyTearOff* propertyTearOff = static_cast<AnimatedListPropertyTearOff*>(animatedPropertyOfItem.get());
-        int indexToRemove = propertyTearOff->findItem(newItem.ptr());
-        ASSERT(indexToRemove != -1);
-
-        // Do not remove newItem if already in this list at the target index.
-        if (!livesInOtherList && indexToModify && static_cast<unsigned>(indexToRemove) == *indexToModify)
-            return false;
-
-        propertyTearOff->removeItemFromList(indexToRemove, true);
-
-        if (!indexToModify)
-            return true;
-
-        // If the item lived in our list, adjust the insertion index.
-        if (!livesInOtherList) {
-            unsigned& index = *indexToModify;
-            // Spec: If the item is already in this list, note that the index of the item to (replace|insert before) is before the removal of the item.
-            if (static_cast<unsigned>(indexToRemove) < index)
-                --index;
-        }
-
-        return true;
-    }
-
-    // Back pointer to the animated property that created us
-    // For example (text.x.baseVal): m_animatedProperty points to the 'x' SVGAnimatedLengthList object
-    Ref<AnimatedListPropertyTearOff> m_animatedProperty;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPrimitivePropertyAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGPrimitivePropertyAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPrimitivePropertyAnimator.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGPrimitivePropertyAnimator.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -60,10 +60,10 @@
</span><span class="cx">         m_property->setValue(SVGPropertyTraits<PropertyType>::fromString(baseValue));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
</ins><span class="cx">     {
</span><span class="cx">         PropertyType& animated = m_property->value();
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, animated);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, animated);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void apply(SVGElement* targetElement) override
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPropertyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGProperty.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGProperty.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGProperty.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -21,7 +21,9 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "SVGPropertyOwner.h"
</span><ins>+#include <wtf/Optional.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><ins>+#include <wtf/text/WTFString.h>
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPropertyAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGPropertyAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPropertyAnimator.h        2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGPropertyAnimator.h   2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">         removeAnimatedStyleProperty(targetElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</del><ins>+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
</ins><span class="cx">     {
</span><span class="cx">         return m_function.calculateDistance(targetElement, from, to);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPropertyTearOffh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h 2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h    2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -1,175 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "ExceptionOr.h"
-#include "SVGLegacyAnimatedProperty.h"
-#include "SVGLegacyProperty.h"
-#include <wtf/WeakPtr.h>
-
-namespace WebCore {
-
-class SVGElement;
-
-class SVGPropertyTearOffBase : public SVGLegacyProperty {
-public:
-    virtual void detachWrapper() = 0;
-};
-
-template<typename T>
-class SVGPropertyTearOff : public SVGPropertyTearOffBase, public CanMakeWeakPtr<SVGPropertyTearOff<T>> {
-public:
-    using PropertyType = T;
-    using Self = SVGPropertyTearOff<PropertyType>;
-
-    // Used for child types (baseVal/animVal) of a SVGAnimated* property (for example: SVGAnimatedLength::baseVal()).
-    // Also used for list tear offs (for example: text.x.baseVal.getItem(0)).
-    static Ref<Self> create(SVGLegacyAnimatedProperty& animatedProperty, SVGPropertyRole role, PropertyType& value)
-    {
-        return adoptRef(*new Self(animatedProperty, role, value));
-    }
-
-    // Used for non-animated POD types (for example: SVGSVGElement::createSVGLength()).
-    static Ref<Self> create(const PropertyType& initialValue)
-    {
-        return adoptRef(*new Self(initialValue));
-    }
-
-    template<typename U> static ExceptionOr<Ref<Self>> create(ExceptionOr<U>&& initialValue)
-    {
-        if (initialValue.hasException())
-            return initialValue.releaseException();
-        return create(initialValue.releaseReturnValue());
-    }
-
-    virtual const PropertyType& propertyReference() const { return *m_value; }
-    virtual PropertyType& propertyReference() { return *m_value; }
-    SVGLegacyAnimatedProperty* animatedProperty() const { return m_animatedProperty.get(); }
-
-    virtual void setValue(PropertyType& value)
-    {
-        if (m_valueIsCopy) {
-            detachChildren();
-            delete m_value;
-        }
-        m_valueIsCopy = false;
-        m_value = &value;
-    }
-
-    void setAnimatedProperty(SVGLegacyAnimatedProperty* animatedProperty)
-    {
-        m_animatedProperty = animatedProperty;
-    }
-
-    SVGElement* contextElement() const
-    {
-        if (!m_animatedProperty || m_valueIsCopy)
-            return nullptr;
-        return m_animatedProperty->contextElement();
-    }
-
-    void addChild(WeakPtr<SVGPropertyTearOffBase> child)
-    {
-        m_childTearOffs.append(child);
-    }
-
-    void detachWrapper() override
-    {
-        if (m_valueIsCopy)
-            return;
-
-        detachChildren();
-
-        // Switch from a live value, to a non-live value.
-        // For example: <text x="50"/>
-        // var item = text.x.baseVal.getItem(0);
-        // text.setAttribute("x", "100");
-        // item.value still has to report '50' and it has to be possible to modify 'item'
-        // w/o changing the "new item" (with x=100) in the text element.
-        // Whenever the XML DOM modifies the "x" attribute, all existing wrappers are detached, using this function.
-        m_value = new PropertyType(*m_value);
-        m_valueIsCopy = true;
-        m_animatedProperty = nullptr;
-    }
-
-    void commitChange() override
-    {
-        if (!m_animatedProperty || m_valueIsCopy)
-            return;
-        m_animatedProperty->commitChange();
-    }
-
-    bool isReadOnly() const override
-    {
-        if (m_role == AnimValRole)
-            return true;
-        if (m_animatedProperty && m_animatedProperty->isReadOnly())
-            return true;
-        return false;
-    }
-
-protected:
-    SVGPropertyTearOff(SVGLegacyAnimatedProperty* animatedProperty, SVGPropertyRole role, PropertyType& value)
-        : m_animatedProperty(animatedProperty)
-        , m_role(role)
-        , m_value(&value)
-        , m_valueIsCopy(false)
-    {
-    }
-
-    SVGPropertyTearOff(const PropertyType& initialValue)
-        : SVGPropertyTearOff(&initialValue)
-    {
-    }
-
-    SVGPropertyTearOff(const PropertyType* initialValue)
-        : m_animatedProperty(nullptr)
-        , m_role(UndefinedRole)
-        , m_value(initialValue ? new PropertyType(*initialValue) : nullptr)
-        , m_valueIsCopy(true)
-    {
-    }
-
-    virtual ~SVGPropertyTearOff()
-    {
-        if (m_valueIsCopy) {
-            detachChildren();
-            delete m_value;
-        }
-    }
-
-    void detachChildren()
-    {
-        for (const auto& childTearOff : m_childTearOffs) {
-            if (childTearOff.get())
-                childTearOff.get()->detachWrapper();
-        }
-        m_childTearOffs.clear();
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> m_animatedProperty;
-    SVGPropertyRole m_role;
-    PropertyType* m_value;
-    Vector<WeakPtr<SVGPropertyTearOffBase>> m_childTearOffs;
-    bool m_valueIsCopy;
-};
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGValuePropertyAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGValuePropertyAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGValuePropertyAnimator.h   2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGValuePropertyAnimator.h      2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -44,9 +44,9 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_property->value());
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_property->value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void apply(SVGElement* targetElement) override
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGValuePropertyListAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGValuePropertyListAnimator.h (243829 => 243830)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGValuePropertyListAnimator.h       2019-04-03 22:04:57 UTC (rev 243829)
+++ trunk/Source/WebCore/svg/properties/SVGValuePropertyListAnimator.h  2019-04-03 22:07:59 UTC (rev 243830)
</span><span class="lines">@@ -44,9 +44,9 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
</del><ins>+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
</ins><span class="cx">     {
</span><del>-        m_function.progress(targetElement, percentage, repeatCount, m_list);
</del><ins>+        m_function.animate(targetElement, progress, repeatCount, m_list);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void apply(SVGElement* targetElement) override
</span></span></pre>
</div>
</div>

</body>
</html>