Remove SVG properties tear-off objects
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Apr 2019 22:07:59 +0000 (22:07 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Apr 2019 22:07:59 +0000 (22:07 +0000)
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:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@243830 268f45cc-cd09-0410-ab3c-d52691b4dbfc

116 files changed:
Source/WebCore/ChangeLog
Source/WebCore/Sources.txt
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/dom/Element.cpp
Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
Source/WebCore/svg/SVGAElement.h
Source/WebCore/svg/SVGAltGlyphElement.h
Source/WebCore/svg/SVGAnimateElementBase.cpp
Source/WebCore/svg/SVGAnimateElementBase.h
Source/WebCore/svg/SVGAnimateMotionElement.cpp
Source/WebCore/svg/SVGAnimateMotionElement.h
Source/WebCore/svg/SVGAnimationElement.cpp
Source/WebCore/svg/SVGAnimationElement.h
Source/WebCore/svg/SVGAttributeAnimationController.cpp [deleted file]
Source/WebCore/svg/SVGAttributeAnimationController.h [deleted file]
Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp [deleted file]
Source/WebCore/svg/SVGAttributeAnimationControllerBase.h [deleted file]
Source/WebCore/svg/SVGCircleElement.h
Source/WebCore/svg/SVGClipPathElement.h
Source/WebCore/svg/SVGComponentTransferFunctionElement.h
Source/WebCore/svg/SVGCursorElement.h
Source/WebCore/svg/SVGDefsElement.h
Source/WebCore/svg/SVGElement.cpp
Source/WebCore/svg/SVGElement.h
Source/WebCore/svg/SVGEllipseElement.h
Source/WebCore/svg/SVGExternalResourcesRequired.h
Source/WebCore/svg/SVGFEBlendElement.h
Source/WebCore/svg/SVGFEColorMatrixElement.h
Source/WebCore/svg/SVGFEComponentTransferElement.h
Source/WebCore/svg/SVGFECompositeElement.h
Source/WebCore/svg/SVGFEConvolveMatrixElement.h
Source/WebCore/svg/SVGFEDiffuseLightingElement.h
Source/WebCore/svg/SVGFEDisplacementMapElement.h
Source/WebCore/svg/SVGFEDropShadowElement.h
Source/WebCore/svg/SVGFEGaussianBlurElement.h
Source/WebCore/svg/SVGFEImageElement.h
Source/WebCore/svg/SVGFELightElement.h
Source/WebCore/svg/SVGFEMergeNodeElement.h
Source/WebCore/svg/SVGFEMorphologyElement.h
Source/WebCore/svg/SVGFEOffsetElement.h
Source/WebCore/svg/SVGFESpecularLightingElement.h
Source/WebCore/svg/SVGFETileElement.h
Source/WebCore/svg/SVGFETurbulenceElement.h
Source/WebCore/svg/SVGFilterElement.h
Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
Source/WebCore/svg/SVGFitToViewBox.h
Source/WebCore/svg/SVGFontElement.h
Source/WebCore/svg/SVGForeignObjectElement.h
Source/WebCore/svg/SVGGElement.h
Source/WebCore/svg/SVGGeometryElement.h
Source/WebCore/svg/SVGGlyphRefElement.h
Source/WebCore/svg/SVGGradientElement.cpp
Source/WebCore/svg/SVGGradientElement.h
Source/WebCore/svg/SVGGraphicsElement.h
Source/WebCore/svg/SVGImageElement.h
Source/WebCore/svg/SVGLineElement.h
Source/WebCore/svg/SVGLinearGradientElement.h
Source/WebCore/svg/SVGMPathElement.h
Source/WebCore/svg/SVGMarkerElement.cpp
Source/WebCore/svg/SVGMarkerElement.h
Source/WebCore/svg/SVGMaskElement.h
Source/WebCore/svg/SVGPathElement.h
Source/WebCore/svg/SVGPatternElement.h
Source/WebCore/svg/SVGPolyElement.h
Source/WebCore/svg/SVGRadialGradientElement.h
Source/WebCore/svg/SVGRectElement.h
Source/WebCore/svg/SVGSVGElement.h
Source/WebCore/svg/SVGScriptElement.h
Source/WebCore/svg/SVGStopElement.h
Source/WebCore/svg/SVGSwitchElement.h
Source/WebCore/svg/SVGSymbolElement.h
Source/WebCore/svg/SVGTRefElement.h
Source/WebCore/svg/SVGTests.cpp
Source/WebCore/svg/SVGTests.h
Source/WebCore/svg/SVGTextContentElement.cpp
Source/WebCore/svg/SVGTextContentElement.h
Source/WebCore/svg/SVGTextPathElement.h
Source/WebCore/svg/SVGTextPositioningElement.h
Source/WebCore/svg/SVGURIReference.cpp
Source/WebCore/svg/SVGURIReference.h
Source/WebCore/svg/SVGUseElement.h
Source/WebCore/svg/SVGViewElement.h
Source/WebCore/svg/SVGViewSpec.cpp
Source/WebCore/svg/SVGViewSpec.h
Source/WebCore/svg/SVGZoomAndPanType.h
Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h [deleted file]
Source/WebCore/svg/properties/SVGAnimatedPropertyAnimator.h
Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h
Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimator.h
Source/WebCore/svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h
Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h [deleted file]
Source/WebCore/svg/properties/SVGAnimatedPropertyType.h [deleted file]
Source/WebCore/svg/properties/SVGAnimationAdditiveFunction.h
Source/WebCore/svg/properties/SVGAnimationAdditiveListFunctionImpl.h
Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h
Source/WebCore/svg/properties/SVGAnimationDiscreteFunction.h
Source/WebCore/svg/properties/SVGAnimationFunction.h
Source/WebCore/svg/properties/SVGAttribute.h [deleted file]
Source/WebCore/svg/properties/SVGAttributeAccessor.h [deleted file]
Source/WebCore/svg/properties/SVGAttributeAnimator.h
Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp [deleted file]
Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h [deleted file]
Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h [deleted file]
Source/WebCore/svg/properties/SVGAttributeRegistry.h [deleted file]
Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp [deleted file]
Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h [deleted file]
Source/WebCore/svg/properties/SVGLegacyProperty.h [deleted file]
Source/WebCore/svg/properties/SVGListProperty.h [deleted file]
Source/WebCore/svg/properties/SVGListPropertyTearOff.h [deleted file]
Source/WebCore/svg/properties/SVGPrimitivePropertyAnimator.h
Source/WebCore/svg/properties/SVGProperty.h
Source/WebCore/svg/properties/SVGPropertyAnimator.h
Source/WebCore/svg/properties/SVGPropertyTearOff.h [deleted file]
Source/WebCore/svg/properties/SVGValuePropertyAnimator.h
Source/WebCore/svg/properties/SVGValuePropertyListAnimator.h

index 1d57a38..c5d1d4a 100644 (file)
@@ -1,3 +1,266 @@
+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:
+
 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Documents can be destroyed before their CSSFontFaceSet is destroyed
index 2d9d3c1..62fc43f 100644 (file)
@@ -2230,8 +2230,6 @@ svg/SVGAnimateElementBase.cpp
 svg/SVGAnimateMotionElement.cpp
 svg/SVGAnimateTransformElement.cpp
 svg/SVGAnimationElement.cpp
-svg/SVGAttributeAnimationController.cpp
-svg/SVGAttributeAnimationControllerBase.cpp
 svg/SVGCircleElement.cpp
 svg/SVGClipPathElement.cpp
 svg/SVGComponentTransferFunctionElement.cpp
@@ -2361,8 +2359,6 @@ svg/graphics/filters/SVGFilterBuilder.cpp
 svg/properties/SVGAnimatedProperty.cpp
 svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp
 svg/properties/SVGAttributeAnimator.cpp
-svg/properties/SVGAttributeOwnerProxy.cpp
-svg/properties/SVGLegacyAnimatedProperty.cpp
 
 workers/AbstractWorker.cpp
 workers/DedicatedWorkerGlobalScope.cpp
index 2dab246..dea32f8 100644 (file)
                0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; };
                080E49261255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */; };
                080E49281255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49241255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h */; };
-               0810764412828556007C63BA /* SVGListProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 0810764312828556007C63BA /* SVGListProperty.h */; };
                081093DC1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081093DA1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h */; };
                081668D4125603BF006F25DE /* SVGTextChunkBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D2125603BF006F25DE /* SVGTextChunkBuilder.h */; };
                081668DA125603D5006F25DE /* SVGTextLayoutEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D8125603D5006F25DE /* SVGTextLayoutEngine.h */; };
                087558C613B4A57D00F49307 /* SurrogatePairAwareTextIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 087558C413B4A57D00F49307 /* SurrogatePairAwareTextIterator.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0885067F11DA045B00182B98 /* PaintInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0885067D11DA045B00182B98 /* PaintInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0885068011DA045B00182B98 /* PaintPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0885067E11DA045B00182B98 /* PaintPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */; };
                088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               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 */; };
                088A0E0C126EF1DB00978F7A /* SVGPropertyTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
                088C2F7A12390081003D65CE /* SVGTextLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */; };
                089582560E857A7E00F82C83 /* ImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 089582540E857A7E00F82C83 /* ImageLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
                53ED3FDE167A88E7006762E6 /* JSInternalSettingsGenerated.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53ED3FDC167A88E7006762E6 /* JSInternalSettingsGenerated.cpp */; };
                53ED3FDF167A88E7006762E6 /* JSInternalSettingsGenerated.h in Headers */ = {isa = PBXBuildFile; fileRef = 53ED3FDD167A88E7006762E6 /* JSInternalSettingsGenerated.h */; };
                550A0BCA085F6039007353D6 /* QualifiedName.h in Headers */ = {isa = PBXBuildFile; fileRef = 550A0BC8085F6039007353D6 /* QualifiedName.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               55346AF121150FAF0059BCDD /* SVGAttributeOwnerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5546757B1FD212A9003B10B0 /* ImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 554675781FD1FC1A003B10B0 /* ImageSource.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5550CB421E955E3C00111AA0 /* ImageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 5550CB411E955E3C00111AA0 /* ImageTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
                555130011E7CCCCB00A69E38 /* DecodingOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 555130001E7CCCCA00A69E38 /* DecodingOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5576A5651D88A70800CCC04C /* ImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 5576A5631D88A70800CCC04C /* ImageFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
                55A336F91D821E3C0022C4C7 /* ImageBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A336F81D821E3C0022C4C7 /* ImageBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
                55AF14E61EAAC59B0026EEAA /* UTIRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 55AF14E41EAAC59B0026EEAA /* UTIRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               55D70D23223B017C00044B8E /* SVGLegacyAnimatedProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 55D70D20223B009100044B8E /* SVGLegacyAnimatedProperty.h */; settings = {ATTRIBUTES = (Private, ); }; };
                55DCC52822407B2000C26E32 /* SVGPrimitiveList.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC5252240749E00C26E32 /* SVGPrimitiveList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                55DCC52922407B2A00C26E32 /* SVGList.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC523224073FE00C26E32 /* SVGList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                55EC9599206AA7A0007DD0A9 /* PaintFrequencyTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 55EC95972069C92D007DD0A9 /* PaintFrequencyTracker.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               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 */; };
                55FA7FFB2110ECD7005AEFE7 /* SVGZoomAndPanType.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               55FA7FFF21110E6E005AEFE7 /* SVGAnimatedPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5704405A1E53936200356601 /* JSAesCbcCfbParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 570440591E53936200356601 /* JSAesCbcCfbParams.h */; };
                5706A6961DDE5C9500A03B14 /* CryptoAlgorithmRsaOaepParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 5706A6951DDE5C9500A03B14 /* CryptoAlgorithmRsaOaepParams.h */; };
                5706A6981DDE5E4600A03B14 /* JSRsaOaepParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 5706A6971DDE5E4600A03B14 /* JSRsaOaepParams.h */; };
                080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutEngineBaseline.h; sourceTree = "<group>"; };
                080E49231255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutEngineSpacing.cpp; sourceTree = "<group>"; };
                080E49241255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutEngineSpacing.h; sourceTree = "<group>"; };
-               0810764312828556007C63BA /* SVGListProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGListProperty.h; sourceTree = "<group>"; };
                081093D91255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutAttributesBuilder.cpp; sourceTree = "<group>"; };
                081093DA1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutAttributesBuilder.h; sourceTree = "<group>"; };
                081668D1125603BF006F25DE /* SVGTextChunkBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextChunkBuilder.cpp; sourceTree = "<group>"; };
                087558C413B4A57D00F49307 /* SurrogatePairAwareTextIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurrogatePairAwareTextIterator.h; sourceTree = "<group>"; };
                0885067D11DA045B00182B98 /* PaintInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaintInfo.h; sourceTree = "<group>"; };
                0885067E11DA045B00182B98 /* PaintPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaintPhase.h; sourceTree = "<group>"; };
-               088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedListPropertyTearOff.h; sourceTree = "<group>"; };
                088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyDescription.h; sourceTree = "<group>"; };
-               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>"; };
                088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPropertyTraits.h; sourceTree = "<group>"; };
                088C2F7512390080003D65CE /* SVGTextLayoutAttributes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutAttributes.cpp; sourceTree = "<group>"; };
                088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutAttributes.h; sourceTree = "<group>"; };
                550A0BC7085F6039007353D6 /* QualifiedName.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QualifiedName.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                550A0BC8085F6039007353D6 /* QualifiedName.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = QualifiedName.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                55137B2C20379E550001004B /* SVGMarkerTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerTypes.h; sourceTree = "<group>"; };
-               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>"; };
                554675771FD1FC1A003B10B0 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = "<group>"; };
                554675781FD1FC1A003B10B0 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = "<group>"; };
                5550CB411E955E3C00111AA0 /* ImageTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageTypes.h; sourceTree = "<group>"; };
                55BE025E223B29C40032F08A /* SVGAnimatedPropertyPairAccessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyPairAccessor.h; sourceTree = "<group>"; };
                55BE025F223B29C50032F08A /* SVGAnimationAdditiveFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationAdditiveFunction.h; sourceTree = "<group>"; };
                55D408F71A7C631800C78450 /* SVGImageClients.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGImageClients.h; sourceTree = "<group>"; };
-               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>"; };
                55DCC51C2240605E00C26E32 /* SVGAnimationDiscreteFunctionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationDiscreteFunctionImpl.h; sourceTree = "<group>"; };
                55DCC51D2240615500C26E32 /* SVGAnimationDiscreteFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimationDiscreteFunction.h; sourceTree = "<group>"; };
                55DCC523224073FE00C26E32 /* SVGList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGList.h; sourceTree = "<group>"; };
                55EE5362223B2A2300FBA944 /* SVGAnimatedProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedProperty.h; sourceTree = "<group>"; };
                55EE5363223B2A2400FBA944 /* SVGProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGProperty.h; sourceTree = "<group>"; };
                55EE5364223B2A2400FBA944 /* SVGAttributeAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAnimator.h; sourceTree = "<group>"; };
-               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>"; };
                55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGZoomAndPanType.h; sourceTree = "<group>"; };
-               55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyType.h; sourceTree = "<group>"; };
                570440571E53851600356601 /* CryptoAlgorithmAES_CFBMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoAlgorithmAES_CFBMac.cpp; sourceTree = "<group>"; };
                570440591E53936200356601 /* JSAesCbcCfbParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAesCbcCfbParams.h; sourceTree = "<group>"; };
                5704405B1E53937900356601 /* JSAesCbcCfbParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAesCbcCfbParams.cpp; sourceTree = "<group>"; };
                71F936F71DD4F99B00922CC7 /* tracks-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tracks-support.js"; sourceTree = "<group>"; };
                721443452240C8BA00F12FF7 /* SVGAnimatedValueProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedValueProperty.h; sourceTree = "<group>"; };
                721443462240CAD200F12FF7 /* SVGValueProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGValueProperty.h; sourceTree = "<group>"; };
-               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>"; };
                724ED3291A3A7E5400F5F13C /* EXTBlendMinMax.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EXTBlendMinMax.cpp; sourceTree = "<group>"; };
                724ED32A1A3A7E5400F5F13C /* EXTBlendMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTBlendMinMax.h; sourceTree = "<group>"; };
                724ED32B1A3A7E5400F5F13C /* EXTBlendMinMax.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EXTBlendMinMax.idl; sourceTree = "<group>"; };
                7A29BA69187B781C00F29CEB /* TemporaryOpenGLSetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemporaryOpenGLSetting.cpp; sourceTree = "<group>"; };
                7A29F57118C69514004D0F81 /* OutOfBandTextTrackPrivateAVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutOfBandTextTrackPrivateAVF.h; sourceTree = "<group>"; };
                7A3EBEAA21BF054C000D043D /* JSSVGViewSpecCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGViewSpecCustom.cpp; sourceTree = "<group>"; };
-               7A3EBEAC21BF0921000D043D /* SVGAttributeOwnerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAttributeOwnerProxy.cpp; sourceTree = "<group>"; };
                7A45032D18DB717200377B34 /* BufferedLineReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BufferedLineReader.cpp; sourceTree = "<group>"; };
                7A45032E18DB717200377B34 /* BufferedLineReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BufferedLineReader.h; sourceTree = "<group>"; };
                7A54857D14E02D51006AE05A /* InspectorHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorHistory.cpp; sourceTree = "<group>"; };
                        isa = PBXGroup;
                        children = (
                                5553592022441A16008F5EC9 /* SVGAnimatedDecoratedProperty.h */,
-                               088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */,
                                55EE5357223B29F800FBA944 /* SVGAnimatedPrimitiveProperty.h */,
                                55BE025D223B29C40032F08A /* SVGAnimatedProperty.cpp */,
                                55EE5362223B2A2300FBA944 /* SVGAnimatedProperty.h */,
                                55EE535D223B2A0D00FBA944 /* SVGAnimatedPropertyPairAccessorImpl.h */,
                                55EE535F223B2A0F00FBA944 /* SVGAnimatedPropertyPairAnimator.h */,
                                55EE535B223B2A0C00FBA944 /* SVGAnimatedPropertyPairAnimatorImpl.h */,
-                               088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */,
-                               55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */,
                                721443452240C8BA00F12FF7 /* SVGAnimatedValueProperty.h */,
                                55BE025F223B29C50032F08A /* SVGAnimationAdditiveFunction.h */,
                                7266F029224312B100833975 /* SVGAnimationAdditiveListFunction.h */,
                                55DCC51D2240615500C26E32 /* SVGAnimationDiscreteFunction.h */,
                                55DCC51C2240605E00C26E32 /* SVGAnimationDiscreteFunctionImpl.h */,
                                55BE025B223B29C20032F08A /* SVGAnimationFunction.h */,
-                               55FA7FEF210FA386005AEFE7 /* SVGAttribute.h */,
-                               55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */,
                                55EE5361223B2A2200FBA944 /* SVGAttributeAnimator.cpp */,
                                55EE5364223B2A2400FBA944 /* SVGAttributeAnimator.h */,
-                               7A3EBEAC21BF0921000D043D /* SVGAttributeOwnerProxy.cpp */,
-                               55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */,
-                               55346AFA2117FFAF0059BCDD /* SVGAttributeOwnerProxyImpl.h */,
-                               55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */,
                                5553592122441B97008F5EC9 /* SVGDecoratedEnumeration.h */,
                                5553592222441BE9008F5EC9 /* SVGDecoratedPrimitive.h */,
                                5553592322441C18008F5EC9 /* SVGDecoratedProperty.h */,
-                               55D70D21223B00BB00044B8E /* SVGLegacyAnimatedProperty.cpp */,
-                               55D70D20223B009100044B8E /* SVGLegacyAnimatedProperty.h */,
-                               55D70D22223B00EA00044B8E /* SVGLegacyProperty.h */,
                                55DCC523224073FE00C26E32 /* SVGList.h */,
-                               0810764312828556007C63BA /* SVGListProperty.h */,
-                               088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */,
                                55EE5354223B29E900FBA944 /* SVGMemberAccessor.h */,
                                55BE025A223B29C20032F08A /* SVGPointerMemberAccessor.h */,
                                55DCC5252240749E00C26E32 /* SVGPrimitiveList.h */,
                                55EE5360223B2A2100FBA944 /* SVGPropertyOwner.h */,
                                55BE025C223B29C30032F08A /* SVGPropertyOwnerRegistry.h */,
                                55BE0257223B29C00032F08A /* SVGPropertyRegistry.h */,
-                               088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */,
                                088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
                                721443462240CAD200F12FF7 /* SVGValueProperty.h */,
                                72FB238622497AD5007E5AC7 /* SVGValuePropertyAnimator.h */,
                                B22278010D00BF1F0071B782 /* SVGAnimationElement.cpp */,
                                B22278020D00BF1F0071B782 /* SVGAnimationElement.h */,
                                B22278030D00BF1F0071B782 /* SVGAnimationElement.idl */,
-                               723F97BC2238EE08007F079C /* SVGAttributeAnimationController.cpp */,
-                               723F97BD2238EE08007F079C /* SVGAttributeAnimationController.h */,
-                               723F97C122397725007F079C /* SVGAttributeAnimationControllerBase.cpp */,
-                               723F97C022396B88007F079C /* SVGAttributeAnimationControllerBase.h */,
                                B22278040D00BF1F0071B782 /* svgattrs.in */,
                                B22278050D00BF1F0071B782 /* SVGCircleElement.cpp */,
                                B22278060D00BF1F0071B782 /* SVGCircleElement.h */,
                                24D912B813CA9A6900D21915 /* SVGAltGlyphItemElement.h in Headers */,
                                B22279770D00BF220071B782 /* SVGAngle.h in Headers */,
                                B222797A0D00BF220071B782 /* SVGAnimateColorElement.h in Headers */,
-                               088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */,
                                088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */,
-                               088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */,
-                               55FA7FFF21110E6E005AEFE7 /* SVGAnimatedPropertyType.h in Headers */,
                                B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
                                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */,
                                B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
                                B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
                                B22279980D00BF220071B782 /* SVGAnimationElement.h in Headers */,
-                               55FA7FF0210FA386005AEFE7 /* SVGAttribute.h in Headers */,
-                               55FA7FF5210FB6B1005AEFE7 /* SVGAttributeAccessor.h in Headers */,
-                               55346AF121150FAF0059BCDD /* SVGAttributeOwnerProxy.h in Headers */,
-                               55FA7FF7210FBE3E005AEFE7 /* SVGAttributeRegistry.h in Headers */,
                                B222799C0D00BF220071B782 /* SVGCircleElement.h in Headers */,
                                B222799F0D00BF220071B782 /* SVGClipPathElement.h in Headers */,
                                B22279A50D00BF220071B782 /* SVGComponentTransferFunctionElement.h in Headers */,
                                0854B01F1255E4E600B9CDD0 /* SVGInlineFlowBox.h in Headers */,
                                0854B0211255E4E600B9CDD0 /* SVGInlineTextBox.h in Headers */,
                                B2227A300D00BF220071B782 /* SVGLangSpace.h in Headers */,
-                               55D70D23223B017C00044B8E /* SVGLegacyAnimatedProperty.h in Headers */,
                                7134496E146941B300720312 /* SVGLengthContext.h in Headers */,
                                B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */,
                                7CCEBFC01DD8F6AB002C40B8 /* SVGLengthValue.h in Headers */,
                                B2227A390D00BF220071B782 /* SVGLinearGradientElement.h in Headers */,
                                B2227A3C0D00BF220071B782 /* SVGLineElement.h in Headers */,
                                55DCC52922407B2A00C26E32 /* SVGList.h in Headers */,
-                               0810764412828556007C63BA /* SVGListProperty.h in Headers */,
-                               088A0E09126EF1DB00978F7A /* SVGListPropertyTearOff.h in Headers */,
                                B2227A410D00BF220071B782 /* SVGLocatable.h in Headers */,
                                436708EE12D9CA4B00044234 /* SVGMarkerData.h in Headers */,
                                B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */,
                                55DCC52822407B2000C26E32 /* SVGPrimitiveList.h in Headers */,
                                72144333223EC8B000F12FF7 /* SVGProperty.h in Headers */,
                                72144334223EC91600F12FF7 /* SVGPropertyOwner.h in Headers */,
-                               088A0E0B126EF1DB00978F7A /* SVGPropertyTearOff.h in Headers */,
                                088A0E0C126EF1DB00978F7A /* SVGPropertyTraits.h in Headers */,
                                B2227A9A0D00BF220071B782 /* SVGRadialGradientElement.h in Headers */,
                                08EDE19F12A50B8E00B95797 /* SVGRect.h in Headers */,
index a610324..1930432 100644 (file)
@@ -480,11 +480,9 @@ void Element::synchronizeAllAttributes() const
         ASSERT(isStyledElement());
         static_cast<const StyledElement*>(this)->synchronizeStyleAttributeInternal();
     }
-
-    if (elementData()->animatedSVGAttributesAreDirty()) {
-        ASSERT(isSVGElement());
-        downcast<SVGElement>(*this).synchronizeAnimatedSVGAttribute(anyQName());
-    }
+    
+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAllAttributes();
 }
 
 ALWAYS_INLINE void Element::synchronizeAttribute(const QualifiedName& name) const
@@ -497,10 +495,8 @@ ALWAYS_INLINE void Element::synchronizeAttribute(const QualifiedName& name) cons
         return;
     }
 
-    if (UNLIKELY(elementData()->animatedSVGAttributesAreDirty())) {
-        ASSERT(isSVGElement());
-        downcast<SVGElement>(*this).synchronizeAnimatedSVGAttribute(name);
-    }
+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAttribute(name);
 }
 
 static ALWAYS_INLINE bool isStyleAttribute(const Element& element, const AtomicString& attributeLocalName)
@@ -521,11 +517,9 @@ ALWAYS_INLINE void Element::synchronizeAttribute(const AtomicString& localName)
         static_cast<const StyledElement*>(this)->synchronizeStyleAttributeInternal();
         return;
     }
-    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()));
-    }
+
+    if (isSVGElement())
+        downcast<SVGElement>(const_cast<Element&>(*this)).synchronizeAttribute(QualifiedName(nullAtom(), localName, nullAtom()));
 }
 
 const AtomicString& Element::getAttribute(const QualifiedName& name) const
@@ -3596,7 +3590,7 @@ bool Element::fastAttributeLookupAllowed(const QualifiedName& name) const
         return false;
 
     if (isSVGElement())
-        return !downcast<SVGElement>(*this).isAnimatableAttribute(name);
+        return !downcast<SVGElement>(*this).isAnimatedPropertyAttribute(name);
 
     return true;
 }
index eb35ac5..d8ad080 100644 (file)
@@ -104,7 +104,7 @@ bool RenderSVGResourceGradient::applyResource(RenderElement& renderer, const Ren
     // synchronization to kick in, which causes removeAllClientsFromCache() to be called, which in turn deletes our
     // GradientData object! Leaving out the line below will cause svg/dynamic-updates/SVG*GradientElement-svgdom* to crash.
     if (m_shouldCollectGradientAttributes) {
-        gradientElement().synchronizeAnimatedSVGAttribute(anyQName());
+        gradientElement().synchronizeAllAttributes();
         if (!collectGradientAttributes())
             return false;
 
index ba6ea47..cc2cbfc 100644 (file)
@@ -149,7 +149,7 @@ bool RenderSVGResourcePattern::applyResource(RenderElement& renderer, const Rend
     ASSERT(!resourceMode.isEmpty());
 
     if (m_shouldCollectPatternAttributes) {
-        patternElement().synchronizeAnimatedSVGAttribute(anyQName());
+        patternElement().synchronizeAllAttributes();
 
         m_attributes = PatternAttributes();
         collectPatternAttributes(m_attributes);
index 3c9909b..6dae894 100644 (file)
@@ -39,9 +39,6 @@ public:
 private:
     SVGAElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -64,7 +61,6 @@ private:
 
     bool willRespondToMouseClickEvents() final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_target { SVGAnimatedString::create(this) };
 };
index d34f9ed..5d902f6 100644 (file)
@@ -45,16 +45,12 @@ public:
 private:
     SVGAltGlyphElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAltGlyphElement, SVGTextPositioningElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAltGlyphElement, SVGTextPositioningElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
     bool childShouldCreateRenderer(const Node&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index 8e78012..a103ad8 100644 (file)
@@ -25,7 +25,7 @@
 #include "SVGAnimateElementBase.h"
 
 #include "QualifiedName.h"
-#include "SVGAttributeAnimationController.h"
+#include "SVGAttributeAnimator.h"
 #include "SVGElement.h"
 #include "SVGNames.h"
 #include <wtf/IsoMallocInlines.h>
@@ -37,20 +37,21 @@ WTF_MAKE_ISO_ALLOCATED_IMPL(SVGAnimateElementBase);
 SVGAnimateElementBase::SVGAnimateElementBase(const QualifiedName& tagName, Document& document)
     : SVGAnimationElement(tagName, document)
 {
-    ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
+    ASSERT(hasTagName(SVGNames::animateTag)
+        || hasTagName(SVGNames::setTag)
+        || hasTagName(SVGNames::animateColorTag)
+        || hasTagName(SVGNames::animateTransformTag));
 }
 
-SVGAnimateElementBase::~SVGAnimateElementBase() = default;
-
-SVGAttributeAnimationControllerBase& SVGAnimateElementBase::attributeAnimationController()
+SVGAttributeAnimator* SVGAnimateElementBase::animator() const
 {
     ASSERT(targetElement());
     ASSERT(!hasInvalidCSSAttributeType());
 
-    if (!m_attributeAnimationController)
-        m_attributeAnimationController = std::make_unique<SVGAttributeAnimationController>(*this, *targetElement());
+    if (!m_animator)
+        m_animator = targetElement()->createAnimator(attributeName(), animationMode(), calcMode(), isAccumulated(), isAdditive());
 
-    return *m_attributeAnimationController;
+    return m_animator.get();
 }
 
 bool SVGAnimateElementBase::hasValidAttributeType() const
@@ -61,116 +62,139 @@ bool SVGAnimateElementBase::hasValidAttributeType() const
     return targetElement()->isAnimatedAttribute(attributeName());
 }
 
-AnimatedPropertyType SVGAnimateElementBase::determineAnimatedPropertyType(SVGElement& targetElement) const
+bool SVGAnimateElementBase::hasInvalidCSSAttributeType() const
 {
-    return SVGAttributeAnimationControllerBase::determineAnimatedPropertyType(*this, targetElement, attributeName());
+    if (!targetElement())
+        return false;
+
+    if (!m_hasInvalidCSSAttributeType)
+        m_hasInvalidCSSAttributeType = hasValidAttributeName() && attributeType() == AttributeType::CSS && !isTargetAttributeCSSProperty(targetElement(), attributeName());
+
+    return m_hasInvalidCSSAttributeType.value();
 }
 
 bool SVGAnimateElementBase::isDiscreteAnimator() const
 {
-    return hasValidAttributeType() && attributeAnimationControllerIfExists() && attributeAnimationControllerIfExists()->isDiscreteAnimator();
+    return hasValidAttributeType() && animatorIfExists() && animatorIfExists()->isDiscrete();
 }
 
-void SVGAnimateElementBase::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
+void SVGAnimateElementBase::setTargetElement(SVGElement* target)
 {
-    if (!targetElement())
-        return;
-    attributeAnimationController().calculateAnimatedValue(percentage, repeatCount, resultElement);
+    SVGAnimationElement::setTargetElement(target);
+    resetAnimation();
 }
 
-bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
+void SVGAnimateElementBase::setAttributeName(const QualifiedName& attributeName)
 {
-    if (!targetElement())
-        return false;
-    return attributeAnimationController().calculateToAtEndOfDurationValue(animateRangeString(toAtEndOfDurationString));
+    SVGSMILElement::setAttributeName(attributeName);
+    resetAnimation();
+}
+
+void SVGAnimateElementBase::resetAnimation()
+{
+    SVGAnimationElement::resetAnimation();
+    m_animator = nullptr;
+    m_hasInvalidCSSAttributeType = { };
 }
 
 bool SVGAnimateElementBase::calculateFromAndToValues(const String& fromString, const String& toString)
 {
     if (!targetElement())
         return false;
-    return attributeAnimationController().calculateFromAndToValues(animateRangeString(fromString), animateRangeString(toString));
+
+    if (auto* animator = this->animator()) {
+        animator->setFromAndToValues(targetElement(), animateRangeString(fromString), animateRangeString(toString));
+        return true;
+    }
+    return false;
 }
 
 bool SVGAnimateElementBase::calculateFromAndByValues(const String& fromString, const String& byString)
 {
     if (!this->targetElement())
         return false;
-    return attributeAnimationController().calculateFromAndByValues(animateRangeString(fromString), animateRangeString(byString));
+
+    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;
 }
 
-void SVGAnimateElementBase::resetAnimatedType()
+bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
 {
-    if (!targetElement())
-        return;
-    attributeAnimationController().resetAnimatedType();
+    if (!targetElement() || toAtEndOfDurationString.isEmpty())
+        return false;
+
+    if (isDiscreteAnimator())
+        return true;
+
+    if (auto* animator = this->animator()) {
+        animator->setToAtEndOfDurationValue(animateRangeString(toAtEndOfDurationString));
+        return true;
+    }
+    return false;
 }
 
-void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
+void SVGAnimateElementBase::resetAnimatedType()
 {
-    if (!targetElement)
+    if (!targetElement())
         return;
 
-    if (auto* controller = attributeAnimationControllerIfExists())
-        controller->clearAnimatedType(targetElement);
+    if (auto* animator = this->animator())
+        animator->start(targetElement());
 }
 
-void SVGAnimateElementBase::applyResultsToTarget()
+void SVGAnimateElementBase::calculateAnimatedValue(float progress, unsigned repeatCount, SVGSMILElement*)
 {
     if (!targetElement())
         return;
-    attributeAnimationController().applyResultsToTarget();
-}
 
-bool SVGAnimateElementBase::isAdditive() const
-{
-    if (animationMode() == AnimationMode::By || animationMode() == AnimationMode::FromBy) {
-        if (auto* controller = attributeAnimationControllerIfExists()) {
-            if (!controller->isAdditive())
-                return false;
-        }
-    }
+    ASSERT(progress >= 0 && progress <= 1);
+    if (hasTagName(SVGNames::setTag))
+        progress = 1;
+
+    if (calcMode() == CalcMode::Discrete)
+        progress = progress < 0.5 ? 0 : 1;
 
-    return SVGAnimationElement::isAdditive();
+    if (auto* animator = this->animator())
+        animator->animate(targetElement(), progress, repeatCount);
 }
 
-float SVGAnimateElementBase::calculateDistance(const String& fromString, const String& toString)
+void SVGAnimateElementBase::applyResultsToTarget()
 {
-    // FIXME: A return value of float is not enough to support paced animations on lists.
     if (!targetElement())
-        return -1;
+        return;
 
-    return attributeAnimationController().calculateDistance(fromString, toString);
+    if (auto* animator = this->animator())
+        animator->apply(targetElement());
 }
 
-void SVGAnimateElementBase::setTargetElement(SVGElement* target)
-{
-    SVGAnimationElement::setTargetElement(target);
-    resetAnimation();
-}
-
-void SVGAnimateElementBase::setAttributeName(const QualifiedName& attributeName)
+void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
 {
-    SVGSMILElement::setAttributeName(attributeName);
-    resetAnimation();
-}
+    if (!targetElement)
+        return;
 
-void SVGAnimateElementBase::resetAnimation()
-{
-    SVGAnimationElement::resetAnimation();
-    m_attributeAnimationController = nullptr;
-    m_hasInvalidCSSAttributeType = WTF::nullopt;
+    if (auto* animator = this->animatorIfExists())
+        animator->stop(targetElement);
 }
 
-bool SVGAnimateElementBase::hasInvalidCSSAttributeType() const
+Optional<float> SVGAnimateElementBase::calculateDistance(const String& fromString, const String& toString)
 {
+    // FIXME: A return value of float is not enough to support paced animations on lists.
     if (!targetElement())
-        return false;
+        return { };
 
-    if (!m_hasInvalidCSSAttributeType)
-        m_hasInvalidCSSAttributeType = hasValidAttributeName() && attributeType() == AttributeType::CSS && !isTargetAttributeCSSProperty(targetElement(), attributeName());
+    if (auto* animator = this->animator())
+        return animator->calculateDistance(targetElement(), fromString, toString);
 
-    return m_hasInvalidCSSAttributeType.value();
+    return { };
 }
 
 } // namespace WebCore
index 7722cdf..50a82c0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
- * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
  * Copyright (C) Research In Motion Limited 2011. All rights reserved.
  * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
  *
 
 namespace WebCore {
 
-class SVGAttributeAnimationControllerBase;
+class SVGAttributeAnimator;
 
 class SVGAnimateElementBase : public SVGAnimationElement {
     WTF_MAKE_ISO_ALLOCATED(SVGAnimateElementBase);
 public:
-    virtual ~SVGAnimateElementBase();
-
-    SVGAttributeAnimationControllerBase& attributeAnimationController();
-    SVGAttributeAnimationControllerBase* attributeAnimationControllerIfExists() const { return m_attributeAnimationController.get(); }
-
-    AnimatedPropertyType determineAnimatedPropertyType(SVGElement&) const;
     bool isDiscreteAnimator() const;
 
 protected:
     SVGAnimateElementBase(const QualifiedName&, Document&);
 
+    SVGAttributeAnimator* animator() const;
+    SVGAttributeAnimator* animatorIfExists() const { return m_animator.get(); }
+
     bool hasValidAttributeType() const override;
 
-    void resetAnimatedType() override;
-    void clearAnimatedType(SVGElement* targetElement) override;
+    void setTargetElement(SVGElement*) override;
+    void setAttributeName(const QualifiedName&) override;
+    void resetAnimation() override;
 
-    bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
     bool calculateFromAndToValues(const String& fromString, const String& toString) override;
     bool calculateFromAndByValues(const String& fromString, const String& byString) 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 calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
 
-    void setTargetElement(SVGElement*) override;
-    void setAttributeName(const QualifiedName&) override;
-    void resetAnimation() override;
+    void resetAnimatedType() override;
+    void calculateAnimatedValue(float progress, unsigned repeatCount, SVGSMILElement* resultElement) override;
+    void applyResultsToTarget() override;
+    void clearAnimatedType(SVGElement* targetElement) override;
+    Optional<float> calculateDistance(const String& fromString, const String& toString) override;
 
     virtual String animateRangeString(const String& string) const { return string; }
 
 private:
     bool hasInvalidCSSAttributeType() const;
 
+    mutable std::unique_ptr<SVGAttributeAnimator> m_animator;
     mutable Optional<bool> m_hasInvalidCSSAttributeType;
-    std::unique_ptr<SVGAttributeAnimationControllerBase> m_attributeAnimationController;
 };
 
 } // namespace WebCore
index 1cb9af6..8ec41b7 100644 (file)
@@ -273,14 +273,14 @@ void SVGAnimateMotionElement::applyResultsToTarget()
     }
 }
 
-float SVGAnimateMotionElement::calculateDistance(const String& fromString, const String& toString)
+Optional<float> SVGAnimateMotionElement::calculateDistance(const String& fromString, const String& toString)
 {
     FloatPoint from;
     FloatPoint to;
     if (!parsePoint(fromString, from))
-        return -1;
+        return { };
     if (!parsePoint(toString, to))
-        return -1;
+        return { };
     FloatSize diff = to - from;
     return sqrtf(diff.width() * diff.width() + diff.height() * diff.height());
 }
index f93e643..2a90d3b 100644 (file)
@@ -48,7 +48,7 @@ private:
     bool calculateFromAndByValues(const String& fromString, const String& byString) override;
     void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
     void applyResultsToTarget() override;
-    float calculateDistance(const String& fromString, const String& toString) override;
+    Optional<float> calculateDistance(const String& fromString, const String& toString) override;
 
     enum RotateMode {
         RotateAngle,
index a06fbee..542428b 100644 (file)
@@ -341,26 +341,6 @@ bool SVGAnimationElement::isTargetAttributeCSSProperty(SVGElement* targetElement
     return targetElement->isAnimatedStyleAttribute(attributeName);
 }
 
-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;
-}
-
 void SVGAnimationElement::calculateKeyTimesForCalcModePaced()
 {
     ASSERT(calcMode() == CalcMode::Paced);
@@ -379,11 +359,11 @@ void SVGAnimationElement::calculateKeyTimesForCalcModePaced()
     keyTimesForPaced.append(0);
     for (unsigned n = 0; n < valuesCount - 1; ++n) {
         // Distance in any units
-        float distance = calculateDistance(m_values[n], m_values[n + 1]);
-        if (distance < 0)
+        auto distance = calculateDistance(m_values[n], m_values[n + 1]);
+        if (!distance)
             return;
-        totalDistance += distance;
-        keyTimesForPaced.append(distance);
+        totalDistance += *distance;
+        keyTimesForPaced.append(*distance);
     }
     if (!totalDistance)
         return;
index 4656f47..54e9128 100644 (file)
@@ -57,15 +57,6 @@ public:
     AnimationMode animationMode() const { return m_animationMode; }
     CalcMode calcMode() const { return m_calcMode; }
 
-    enum ShouldApplyAnimation {
-        DontApplyAnimation,
-        ApplyCSSAnimation,
-        ApplyXMLAnimation,
-        ApplyXMLandCSSAnimation // For presentation attributes with SVG DOM properties.
-    };
-
-    ShouldApplyAnimation shouldApplyAnimation(SVGElement* targetElement, const QualifiedName& attributeName);
-
     AnimatedPropertyValueType fromPropertyValueType() const { return m_fromPropertyValueType; }
     AnimatedPropertyValueType toPropertyValueType() const { return m_toPropertyValueType; }
 
@@ -95,10 +86,6 @@ public:
 protected:
     SVGAnimationElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGAnimationElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAnimationElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
 
@@ -135,7 +122,7 @@ private:
     virtual bool calculateFromAndToValues(const String& fromString, const String& toString) = 0;
     virtual bool calculateFromAndByValues(const String& fromString, const String& byString) = 0;
     virtual void calculateAnimatedValue(float percent, unsigned repeatCount, SVGSMILElement* resultElement) = 0;
-    virtual float calculateDistance(const String& /*fromString*/, const String& /*toString*/) { return -1.f; }
+    virtual Optional<float> calculateDistance(const String& /*fromString*/, const String& /*toString*/) = 0;
 
     void currentValuesForValuesAnimation(float percent, float& effectivePercent, String& from, String& to);
     void calculateKeyTimesForCalcModePaced();
@@ -158,7 +145,6 @@ private:
     String m_lastValuesAnimationTo;
     CalcMode m_calcMode { CalcMode::Linear };
     AnimationMode m_animationMode { AnimationMode::None };
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
diff --git a/Source/WebCore/svg/SVGAttributeAnimationController.cpp b/Source/WebCore/svg/SVGAttributeAnimationController.cpp
deleted file mode 100644 (file)
index b2ff032..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * 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;
-}
-
-}
diff --git a/Source/WebCore/svg/SVGAttributeAnimationController.h b/Source/WebCore/svg/SVGAttributeAnimationController.h
deleted file mode 100644 (file)
index 7936f0b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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
diff --git a/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp b/Source/WebCore/svg/SVGAttributeAnimationControllerBase.cpp
deleted file mode 100644 (file)
index 12401d7..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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;
-}
-
-}
diff --git a/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h b/Source/WebCore/svg/SVGAttributeAnimationControllerBase.h
deleted file mode 100644 (file)
index daa895d..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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
-
index 93cd60d..5f90c70 100644 (file)
@@ -43,9 +43,6 @@ public:
 private:
     SVGCircleElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGCircleElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCircleElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -57,7 +54,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight) };
index cf805f1..3ef0368 100644 (file)
@@ -40,9 +40,6 @@ public:
 private:
     SVGClipPathElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGClipPathElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGClipPathElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -56,7 +53,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedEnumeration> m_clipPathUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) };
 };
index f9d9a5b..a3388f8 100644 (file)
@@ -91,9 +91,6 @@ public:
 protected:
     SVGComponentTransferFunctionElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGComponentTransferFunctionElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGComponentTransferFunctionElement, SVGElement>;
     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
 
@@ -103,7 +100,6 @@ protected:
     bool rendererIsNeeded(const RenderStyle&) override { return false; }
     
 private:
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedEnumeration> m_type { SVGAnimatedEnumeration::create(this, FECOMPONENTTRANSFER_TYPE_IDENTITY) };
     Ref<SVGAnimatedNumberList> m_tableValues { SVGAnimatedNumberList::create(this) };
index e12f24c..9b812eb 100644 (file)
@@ -49,9 +49,6 @@ public:
 private:
     SVGCursorElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGCursorElement, SVGElement, SVGExternalResourcesRequired, SVGTests, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCursorElement, SVGElement, SVGExternalResourcesRequired, SVGTests, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
@@ -63,7 +60,6 @@ private:
 
     void addSubresourceAttributeURLs(ListHashSet<URL>&) const final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index 3ab4e99..8fbbef8 100644 (file)
@@ -34,9 +34,6 @@ public:
 private:
     SVGDefsElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGDefsElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGDefsElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -45,7 +42,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index aa10e82..85d7600 100644 (file)
@@ -158,121 +158,6 @@ static NEVER_INLINE HashMap<AtomicStringImpl*, CSSPropertyID> createAttributeNam
     return map;
 }
 
-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;
-}
-
 SVGElement::SVGElement(const QualifiedName& tagName, Document& document)
     : StyledElement(tagName, document, CreateSVGElement)
     , SVGLangSpace(this)
@@ -480,33 +365,6 @@ void SVGElement::parseAttribute(const QualifiedName& name, const AtomicString& v
     SVGLangSpace::parseAttribute(name, value);
 }
 
-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;
-}
-
 bool SVGElement::haveLoadedRequiredResources()
 {
     for (auto& child : childrenOfType<SVGElement>(*this)) {
@@ -690,42 +548,27 @@ void SVGElement::attributeChanged(const QualifiedName& name, const AtomicString&
         svgAttributeChanged(name);
 }
 
-void SVGElement::synchronizeAllAnimatedSVGAttribute(SVGElement* svgElement)
+void SVGElement::synchronizeAttribute(const QualifiedName& name)
 {
-    ASSERT(svgElement->elementData());
-    ASSERT(svgElement->elementData()->animatedSVGAttributesAreDirty());
-
-    svgElement->synchronizeAttributes();
-    svgElement->elementData()->setAnimatedSVGAttributesAreDirty(false);
-    
-    // FIXME: Delete the SVG tear off properties code from this function
+    // If the value of the property has changed, serialize the new value to the attribute.
+    if (auto value = propertyRegistry().synchronize(name))
+        setSynchronizedLazyAttribute(name, *value);
+}
     
+void SVGElement::synchronizeAllAttributes()
+{
     // SVGPropertyRegistry::synchronizeAllAttributes() returns the new values of
     // the properties which have changed but not committed yet.
-    auto map = svgElement->propertyRegistry().synchronizeAllAttributes();
+    auto map = propertyRegistry().synchronizeAllAttributes();
     for (const auto& entry : map)
-        svgElement->setSynchronizedLazyAttribute(entry.key, entry.value);
+        setSynchronizedLazyAttribute(entry.key, entry.value);
 }
 
-void SVGElement::synchronizeAnimatedSVGAttribute(const QualifiedName& name) const
+void SVGElement::synchronizeAllAnimatedSVGAttribute(SVGElement& svgElement)
 {
-    if (!elementData() || !elementData()->animatedSVGAttributesAreDirty())
-        return;
-
-    // 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);
-    }
+    svgElement.synchronizeAllAttributes();
 }
-    
+
 void SVGElement::commitPropertyChange(SVGProperty* property)
 {
     // We want to dirty the top-level property when a descendant changes. For example
@@ -988,17 +831,6 @@ CSSPropertyID SVGElement::cssPropertyIdForSVGAttributeName(const QualifiedName&
     return properties.get().get(attrName.localName().impl());
 }
 
-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();
-}
-
 bool SVGElement::isPresentationAttribute(const QualifiedName& name) const
 {
     if (cssPropertyIdForSVGAttributeName(name) > 0)
index f202504..979ad43 100644 (file)
@@ -23,8 +23,6 @@
 #pragma once
 
 #include "SVGAnimatedPropertyImpl.h"
-#include "SVGAttributeOwnerProxy.h"
-#include "SVGAttributeOwnerProxyImpl.h"
 #include "SVGLangSpace.h"
 #include "SVGLocatable.h"
 #include "SVGNames.h"
@@ -58,8 +56,6 @@ public:
     SVGElement* viewportElement() const;
 
     String title() const override;
-    static bool isAnimatableCSSProperty(const QualifiedName&);
-    bool isPresentationAttributeWithSVGDOM(const QualifiedName&);
     RefPtr<DeprecatedCSSOMValue> getPresentationAttribute(const String& name);
     virtual bool supportsMarkers() const { return false; }
     bool hasRelativeLengths() const { return !m_elementsWithRelativeLengths.isEmpty(); }
@@ -80,8 +76,6 @@ public:
 
     virtual void svgAttributeChanged(const QualifiedName&);
 
-    Vector<AnimatedPropertyType> animatedPropertyTypesForAttribute(const QualifiedName&);
-
     void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false);
     void sendSVGLoadEventIfPossibleAsynchronously();
     void svgLoadEventTimerFired();
@@ -107,9 +101,6 @@ public:
 
     void setCorrespondingElement(SVGElement*);
 
-    void synchronizeAnimatedSVGAttribute(const QualifiedName&) const;
-    static void synchronizeAllAnimatedSVGAttribute(SVGElement*);
     Optional<ElementStyle> resolveCustomStyle(const RenderStyle& parentStyle, const RenderStyle* shadowHostStyle) override;
 
     static QualifiedName animatableAttributeForName(const AtomicString&);
@@ -135,31 +126,17 @@ public:
     class InstanceUpdateBlocker;
     class InstanceInvalidationGuard;
 
-    // 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); }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGElement>;
-    static bool isKnownAttribute(const QualifiedName& attributeName) { return PropertyRegistry::isKnownAttribute(attributeName); }
-
     virtual const SVGPropertyRegistry& propertyRegistry() const { return m_propertyRegistry; }
 
     bool isAnimatedPropertyAttribute(const QualifiedName&) const;
     bool isAnimatedAttribute(const QualifiedName&) const;
     bool isAnimatedStyleAttribute(const QualifiedName&) const;
 
+    void synchronizeAttribute(const QualifiedName&);
+    void synchronizeAllAttributes();
+    static void synchronizeAllAnimatedSVGAttribute(SVGElement&);
+
     void commitPropertyChange(SVGProperty*) override;
     void commitPropertyChange(SVGAnimatedProperty&);
 
@@ -222,7 +199,6 @@ private:
 
     std::unique_ptr<SVGPropertyAnimatorFactory> m_propertyAnimatorFactory;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_className { SVGAnimatedString::create(this) };
 };
index 712a388..0fdca37 100644 (file)
@@ -45,9 +45,6 @@ public:
 private:
     SVGEllipseElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGEllipseElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGEllipseElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -59,7 +56,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight) };
index e2cea0f..9919af6 100644 (file)
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "QualifiedName.h"
-#include "SVGAttributeOwnerProxyImpl.h"
 #include "SVGPropertyOwnerRegistry.h"
 #include <wtf/HashSet.h>
 
@@ -45,9 +44,6 @@ public:
 
     static void addSupportedAttributes(HashSet<QualifiedName>&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGExternalResourcesRequired>;
-    static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGExternalResourcesRequired>;
 
     bool externalResourcesRequired() const { return m_externalResourcesRequired->currentValue(); }
@@ -68,8 +64,6 @@ protected:
     bool haveLoadedRequiredResources() const;
 
 private:
-    AttributeOwnerProxy attributeOwnerProxy() { return { *this, m_contextElement }; }
-    
     SVGElement& m_contextElement;
     Ref<SVGAnimatedBoolean> m_externalResourcesRequired;
 };
index 92d8f12..a9c98e4 100644 (file)
@@ -63,9 +63,6 @@ public:
 private:
     SVGFEBlendElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEBlendElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEBlendElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -75,7 +72,6 @@ private:
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
index 46de369..3ef24c9 100644 (file)
@@ -79,9 +79,6 @@ public:
 private:
     SVGFEColorMatrixElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEColorMatrixElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEColorMatrixElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -91,7 +88,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedEnumeration> m_type { SVGAnimatedEnumeration::create(this, FECOLORMATRIX_TYPE_MATRIX) };
index c0121ac..526216e 100644 (file)
@@ -37,9 +37,6 @@ public:
 private:
     SVGFEComponentTransferElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEComponentTransferElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEComponentTransferElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -48,7 +45,6 @@ private:
 
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
 };
index 7355820..a33c982 100644 (file)
@@ -102,9 +102,6 @@ public:
 private:
     SVGFECompositeElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFECompositeElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFECompositeElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -114,7 +111,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
index c8ab5bc..cea1123 100644 (file)
@@ -96,9 +96,6 @@ public:
 private:
     SVGFEConvolveMatrixElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEConvolveMatrixElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEConvolveMatrixElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -108,7 +105,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedInteger> m_orderX { SVGAnimatedInteger::create(this) };
index f262fc9..8d79599 100644 (file)
@@ -51,9 +51,6 @@ public:
 private:
     SVGFEDiffuseLightingElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDiffuseLightingElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
@@ -63,7 +60,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedNumber> m_diffuseConstant { SVGAnimatedNumber::create(this, 1) };
index e746d23..422f0cf 100644 (file)
@@ -84,9 +84,6 @@ public:
 private:
     SVGFEDisplacementMapElement(const QualifiedName& tagName, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDisplacementMapElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDisplacementMapElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -96,7 +93,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedString> m_in2 { SVGAnimatedString::create(this) };
index 5be87b6..061cca2 100644 (file)
@@ -47,9 +47,6 @@ public:
 private:
     SVGFEDropShadowElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEDropShadowElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEDropShadowElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -58,7 +55,6 @@ private:
 
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedNumber> m_dx { SVGAnimatedNumber::create(this, 2) };
index 4abf6b3..b2d5e83 100644 (file)
@@ -47,9 +47,6 @@ public:
 private:
     SVGFEGaussianBlurElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEGaussianBlurElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEGaussianBlurElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -58,7 +55,6 @@ private:
 
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedNumber> m_stdDeviationX { SVGAnimatedNumber::create(this) };
index 3940950..7624990 100644 (file)
@@ -45,9 +45,6 @@ public:
 private:
     SVGFEImageElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -68,7 +65,6 @@ private:
     InsertedIntoAncestorResult insertedIntoAncestor(InsertionType, ContainerNode&) override;
     void removedFromAncestor(RemovalType, ContainerNode&) override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio { SVGAnimatedPreserveAspectRatio::create(this) };
     CachedResourceHandle<CachedImage> m_cachedImage;
index 1eb4eac..2534d1d 100644 (file)
@@ -63,9 +63,6 @@ protected:
     bool rendererIsNeeded(const RenderStyle&) override { return false; }
 
 private:
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFELightElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFELightElement, SVGElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -73,7 +70,6 @@ private:
     void svgAttributeChanged(const QualifiedName&) override;
     void childrenChanged(const ChildChange&) override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedNumber> m_azimuth { SVGAnimatedNumber::create(this) };
     Ref<SVGAnimatedNumber> m_elevation { SVGAnimatedNumber::create(this) };
index 9bc6144..8da9236 100644 (file)
@@ -36,9 +36,6 @@ public:
 private:
     SVGFEMergeNodeElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEMergeNodeElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEMergeNodeElement, SVGElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -47,7 +44,6 @@ private:
 
     bool rendererIsNeeded(const RenderStyle&) final { return false; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
 };
index 6122e54..9993355 100644 (file)
@@ -74,9 +74,6 @@ public:
 private:
     SVGFEMorphologyElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEMorphologyElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEMorphologyElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -86,7 +83,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedEnumeration> m_svgOperator { SVGAnimatedEnumeration::create(this, FEMORPHOLOGY_OPERATOR_ERODE) };
index 0d42103..3d8d77d 100644 (file)
@@ -41,9 +41,6 @@ public:
 private:
     SVGFEOffsetElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFEOffsetElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEOffsetElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -52,7 +49,6 @@ private:
 
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedNumber> m_dx { SVGAnimatedNumber::create(this) };
index c47c0b4..ce23cb5 100644 (file)
@@ -51,9 +51,6 @@ public:
 private:
     SVGFESpecularLightingElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFESpecularLightingElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -63,7 +60,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
     Ref<SVGAnimatedNumber> m_specularConstant { SVGAnimatedNumber::create(this, 1) };
index 0292fc0..adcc7a8 100644 (file)
@@ -36,9 +36,6 @@ public:
 private:
     SVGFETileElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFETileElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFETileElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -47,7 +44,6 @@ private:
 
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedString> m_in1 { SVGAnimatedString::create(this) };
 };
index 79c3328..cca7f85 100644 (file)
@@ -112,9 +112,6 @@ public:
 private:
     SVGFETurbulenceElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFETurbulenceElement, SVGFilterPrimitiveStandardAttributes>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFETurbulenceElement, SVGFilterPrimitiveStandardAttributes>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -124,7 +121,6 @@ private:
     bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override;
     RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedNumber> m_baseFrequencyX { SVGAnimatedNumber::create(this) };
     Ref<SVGAnimatedNumber> m_baseFrequencyY { SVGAnimatedNumber::create(this) };
index 1a76bd0..e1f2f5b 100644 (file)
@@ -52,9 +52,6 @@ public:
 private:
     SVGFilterElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFilterElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -69,7 +66,6 @@ private:
 
     bool selfHasRelativeLengths() const final { return true; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedEnumeration> m_filterUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) };
     Ref<SVGAnimatedEnumeration> m_primitiveUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) };
index 1433b25..eb25b53 100644 (file)
@@ -42,9 +42,6 @@ public:
     // Returns true, if the new value is different from the old one.
     virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFilterPrimitiveStandardAttributes, SVGElement>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterPrimitiveStandardAttributes, SVGElement>;
 
     const SVGLengthValue& x() const { return m_x->currentValue(); }
@@ -70,17 +67,12 @@ protected:
     void primitiveAttributeChanged(const QualifiedName& attributeName);
 
 private:
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
     bool isFilterEffect() const override { return true; }
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
     bool rendererIsNeeded(const RenderStyle&) override;
     bool childShouldCreateRenderer(const Node&) const override { return false; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
     // Spec: If the x/y attribute is not specified, the effect is as if a value of "0%" were specified.
     // Spec: If the width/height attribute is not specified, the effect is as if a value of "100%" were specified.
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth, "0%") };
index a20915a..7cc4231 100644 (file)
@@ -24,8 +24,6 @@
 #include "FloatRect.h"
 #include "QualifiedName.h"
 #include "SVGAnimatedPropertyImpl.h"
-#include "SVGAttributeOwnerProxyImpl.h"
-#include "SVGAttributeRegistry.h"
 #include "SVGNames.h"
 #include "SVGPreserveAspectRatio.h"
 #include "SVGPropertyOwnerRegistry.h"
@@ -40,9 +38,6 @@ class SVGFitToViewBox {
 public:
     static AffineTransform viewBoxToViewTransform(const FloatRect& viewBoxRect, const SVGPreserveAspectRatioValue&, float viewWidth, float viewHeight);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFitToViewBox>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFitToViewBox>;
 
     const FloatRect& viewBox() const { return m_viewBox->currentValue(); }
index 34a0da7..cd1e8ea 100644 (file)
@@ -52,13 +52,9 @@ private:
 
     bool rendererIsNeeded(const RenderStyle&) final { return false; }
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFontElement, SVGElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFontElement, SVGElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index 52bd41e..fb57468 100644 (file)
@@ -44,9 +44,6 @@ public:
 private:
     SVGForeignObjectElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGForeignObjectElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGForeignObjectElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -60,7 +57,6 @@ private:
     bool isValid() const final { return SVGTests::isValid(); }
     bool selfHasRelativeLengths() const final { return true; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index 62a2bd2..cb206ae 100644 (file)
@@ -37,9 +37,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -49,7 +46,6 @@ private:
     bool isValid() const final { return SVGTests::isValid(); }
     bool rendererIsNeeded(const RenderStyle&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index 2871f58..d24e622 100644 (file)
@@ -34,14 +34,12 @@ class SVGPoint;
 class SVGGeometryElement : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGGeometryElement);
 public:
-    
     virtual float getTotalLength() const;
     virtual Ref<SVGPoint> getPointAtLength(float distance) const;
 
     bool isPointInFill(DOMPointInit&&);
     bool isPointInStroke(DOMPointInit&&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGeometryElement, SVGGraphicsElement>;
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGeometryElement, SVGGraphicsElement>;
 
     float pathLength() const { return m_pathLength->currentValue(); }
@@ -56,11 +54,6 @@ protected:
 private:
     bool isSVGGeometryElement() const override { return true; }
 
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedNumber> m_pathLength { SVGAnimatedNumber::create(this) };
 };
 
index 57ec5cd..be046ee 100644 (file)
@@ -46,9 +46,6 @@ public:
 private:
     SVGGlyphRefElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGlyphRefElement, SVGElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGlyphRefElement, SVGElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -59,7 +56,6 @@ private:
     float m_y { 0 };
     float m_dx { 0 };
     float m_dy { 0 };
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index bcb675e..80374dd 100644 (file)
@@ -79,7 +79,7 @@ void SVGGradientElement::parseAttribute(const QualifiedName& name, const AtomicS
 
 void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
 {
-    if (isKnownAttribute(attrName) || SVGURIReference::isKnownAttribute(attrName)) {
+    if (PropertyRegistry::isKnownAttribute(attrName) || SVGURIReference::isKnownAttribute(attrName)) {
         InstanceInvalidationGuard guard(*this);
         if (RenderObject* object = renderer())
             object->setNeedsLayout();
index 2908a7e..21b210c 100644 (file)
@@ -82,9 +82,6 @@ public:
 
     Vector<Gradient::ColorStop> buildStops();
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
 
     SVGSpreadMethodType spreadMethod() const { return m_spreadMethod->currentValue<SVGSpreadMethodType>(); }
@@ -98,8 +95,6 @@ public:
 protected:
     SVGGradientElement(const QualifiedName&, Document&);
 
-    static bool isKnownAttribute(const QualifiedName& attributeName) { return PropertyRegistry::isKnownAttribute(attributeName); }
-
     void parseAttribute(const QualifiedName&, const AtomicString&) override;
     void svgAttributeChanged(const QualifiedName&) override;
 
@@ -107,11 +102,6 @@ private:
     bool needsPendingResourceHandling() const override { return false; }
     void childrenChanged(const ChildChange&) override;
 
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedEnumeration> m_spreadMethod { SVGAnimatedEnumeration::create(this, SVGSpreadMethodPad) };
     Ref<SVGAnimatedEnumeration> m_gradientUnits { SVGAnimatedEnumeration::create(this, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) };
     Ref<SVGAnimatedTransformList> m_gradientTransform { SVGAnimatedTransformList::create(this) };
index 5d5f4ba..d516e59 100644 (file)
@@ -62,9 +62,6 @@ public:
 
     size_t approximateMemoryCost() const override { return sizeof(*this); }
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGraphicsElement, SVGElement, SVGTests>;
-    static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGraphicsElement, SVGElement, SVGTests>;
 
     const SVGTransformList& transform() const { return m_transform->currentValue(); }
@@ -81,17 +78,12 @@ protected:
 private:
     bool isSVGGraphicsElement() const override { return true; }
 
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
     // Used by <animateMotion>
     std::unique_ptr<AffineTransform> m_supplementalTransform;
 
     // Used to isolate blend operations caused by masking.
     bool m_shouldIsolateBlending;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedTransformList> m_transform { SVGAnimatedTransformList::create(this) };
 };
 
index 5c40752..dcd7a08 100644 (file)
@@ -51,9 +51,6 @@ public:
 private:
     SVGImageElement(const QualifiedName&, Document&);
     
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGImageElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGImageElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -71,7 +68,6 @@ private:
     bool selfHasRelativeLengths() const final { return true; }
     void didMoveToNewDocument(Document& oldDocument, Document& newDocument) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index 0801407..dd029a3 100644 (file)
@@ -45,9 +45,6 @@ public:
 private:
     SVGLineElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGLineElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLineElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -58,7 +55,6 @@ private:
     bool supportsMarkers() const final { return true; }
     bool selfHasRelativeLengths() const final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x1 { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y1 { SVGAnimatedLength::create(this, LengthModeHeight) };
index 83c5dd3..04a31dd 100644 (file)
@@ -48,9 +48,6 @@ public:
 private:
     SVGLinearGradientElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGLinearGradientElement, SVGGradientElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLinearGradientElement, SVGGradientElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -61,7 +58,6 @@ private:
 
     bool selfHasRelativeLengths() const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x1 { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y1 { SVGAnimatedLength::create(this, LengthModeHeight) };
index 6f7b955..d65903c 100644 (file)
@@ -43,9 +43,6 @@ public:
 private:
     SVGMPathElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMPathElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMPathElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -62,7 +59,6 @@ private:
 
     void notifyParentOfPathChange(ContainerNode*);
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index 8b6a12e..b3c4672 100644 (file)
 #include "SVGMarkerElement.h"
 
 #include "RenderSVGResourceMarker.h"
-#include "SVGFitToViewBox.h"
 #include "SVGNames.h"
 #include <wtf/IsoMallocInlines.h>
-#include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
 
index ef360e9..f034584 100644 (file)
@@ -71,9 +71,6 @@ public:
 private:
     SVGMarkerElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMarkerElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMarkerElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -90,8 +87,6 @@ private:
 
     void setOrient(SVGMarkerOrientType, const SVGAngleValue&);
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_refX { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_refY { SVGAnimatedLength::create(this, LengthModeHeight) };
index 2ea7eb4..c5e358d 100644 (file)
@@ -50,9 +50,6 @@ public:
 private:
     SVGMaskElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGMaskElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMaskElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -66,7 +63,6 @@ private:
     bool needsPendingResourceHandling() const final { return false; }
     bool selfHasRelativeLengths() const final { return true; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth, "-10%") };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight, "-10%") };
index a5f5b91..6774d06 100644 (file)
@@ -108,9 +108,6 @@ public:
 private:
     SVGPathElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
@@ -128,7 +125,6 @@ private:
     void invalidateMPathDependencies();
 
 private:
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedPathSegList> m_pathSegList { SVGAnimatedPathSegList::create(this) };
 };
index c188d0d..36cdefb 100644 (file)
@@ -61,9 +61,6 @@ public:
 private:
     SVGPatternElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPatternElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGTests, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPatternElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGTests, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -77,7 +74,6 @@ private:
     bool needsPendingResourceHandling() const final { return false; }
     bool selfHasRelativeLengths() const final { return true; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index 227d59c..6722490 100644 (file)
@@ -41,9 +41,6 @@ protected:
     SVGPolyElement(const QualifiedName&, Document&);
 
 private:
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPolyElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPolyElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -53,7 +50,6 @@ private:
     bool isValid() const override { return SVGTests::isValid(); }
     bool supportsMarkers() const override { return true; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedPointList> m_points { SVGAnimatedPointList::create(this) };
 };
index 685f1ba..b88a35a 100644 (file)
@@ -52,9 +52,6 @@ public:
 private:
     SVGRadialGradientElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGRadialGradientElement, SVGGradientElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRadialGradientElement, SVGGradientElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -65,7 +62,6 @@ private:
 
     bool selfHasRelativeLengths() const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_cx { SVGAnimatedLength::create(this, LengthModeWidth, "50%") };
     Ref<SVGAnimatedLength> m_cy { SVGAnimatedLength::create(this, LengthModeHeight, "50%") };
index 57269aa..c392e1e 100644 (file)
@@ -49,9 +49,6 @@ public:
 private:
     SVGRectElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGRectElement, SVGGeometryElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRectElement, SVGGeometryElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -63,7 +60,6 @@ private:
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index f2f945e..960f85a 100644 (file)
@@ -131,9 +131,6 @@ private:
     SVGSVGElement(const QualifiedName&, Document&);
     virtual ~SVGSVGElement();
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSVGElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSVGElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
@@ -166,7 +163,6 @@ private:
 
     Ref<SVGPoint> m_currentTranslate { SVGPoint::create() };
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index 96dae29..f15f3b7 100644 (file)
@@ -40,9 +40,6 @@ public:
 private:
     SVGScriptElement(const QualifiedName&, Document&, bool wasInsertedByParser, bool alreadyStarted);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGScriptElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGScriptElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -85,7 +82,6 @@ private:
     bool filterOutAnimatableAttribute(const QualifiedName& name) const final { return name == SVGNames::typeAttr; }
 #endif
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Timer m_svgLoadEventTimer;
 };
index f7781fc..8104fbb 100644 (file)
@@ -38,9 +38,6 @@ public:
 private:
     SVGStopElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGStopElement, SVGElement>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGStopElement, SVGElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -52,7 +49,6 @@ private:
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
     bool rendererIsNeeded(const RenderStyle&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedNumber> m_offset { SVGAnimatedNumber::create(0) };
 };
index 9dac1be..3d14a4f 100644 (file)
@@ -34,9 +34,6 @@ public:
 private:
     SVGSwitchElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSwitchElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSwitchElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -45,7 +42,6 @@ private:
     bool childShouldCreateRenderer(const Node&) const final;
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index 0876a44..8c4afde 100644 (file)
@@ -35,9 +35,6 @@ public:
 private:
     SVGSymbolElement(const QualifiedName&, Document&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGSymbolElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSymbolElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -47,7 +44,6 @@ private:
 
     bool selfHasRelativeLengths() const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
 };
 
index b8ed01a..8e816f5 100644 (file)
@@ -39,9 +39,6 @@ private:
     SVGTRefElement(const QualifiedName&, Document&);
     virtual ~SVGTRefElement();
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTRefElement, SVGTextPositioningElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTRefElement, SVGTextPositioningElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -61,7 +58,6 @@ private:
     void detachTarget();
     void buildPendingResource() override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGTRefTargetEventListener> m_targetListener;
 };
index f44f90e..4552304 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "DOMImplementation.h"
 #include "HTMLNames.h"
-#include "SVGAttributeOwnerProxy.h"
 #include "SVGElement.h"
 #include "SVGNames.h"
 #include "SVGStringList.h"
@@ -121,16 +120,6 @@ SVGTests::SVGTests(SVGElement* contextElement)
     });
 }
 
-SVGTests::AttributeRegistry& SVGTests::attributeRegistry()
-{
-    return AttributeOwnerProxy::attributeRegistry();
-}
-
-bool SVGTests::isKnownAttribute(const QualifiedName& attributeName)
-{
-    return PropertyRegistry::isKnownAttribute(attributeName);
-}
-
 bool SVGTests::hasExtension(const String& extension)
 {
     // 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).
@@ -170,7 +159,7 @@ void SVGTests::parseAttribute(const QualifiedName& attributeName, const AtomicSt
 
 void SVGTests::svgAttributeChanged(const QualifiedName& attrName)
 {
-    if (!isKnownAttribute(attrName))
+    if (!PropertyRegistry::isKnownAttribute(attrName))
         return;
 
     if (!m_contextElement.isConnected())
index 96c57f4..449270d 100644 (file)
@@ -30,12 +30,6 @@ class SVGElement;
 class SVGStringList;
 
 template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeRegistry;
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeOwnerProxyImpl;
-
-template<typename OwnerType, typename... BaseTypes>
 class SVGPropertyOwnerRegistry;
 
 class SVGTests {
@@ -44,13 +38,8 @@ public:
     static bool hasExtension(const String&);
     bool isValid() const;
 
-    using AttributeRegistry = SVGAttributeRegistry<SVGTests>;
-    static AttributeRegistry& attributeRegistry();
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTests>;
 
-    static bool isKnownAttribute(const QualifiedName&);
-
     void parseAttribute(const QualifiedName&, const AtomicString&);
     void svgAttributeChanged(const QualifiedName&);
 
@@ -67,8 +56,6 @@ protected:
     SVGTests(SVGElement* contextElement);
 
 private:
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTests>;
-
     SVGElement& m_contextElement;
     Ref<SVGStringList> m_requiredFeatures;
     Ref<SVGStringList> m_requiredExtensions;
index 26dc64e..4e1316b 100644 (file)
@@ -30,7 +30,6 @@
 #include "RenderObject.h"
 #include "RenderSVGResource.h"
 #include "RenderSVGText.h"
-#include "SVGDocumentExtensions.h"
 #include "SVGNames.h"
 #include "SVGPoint.h"
 #include "SVGRect.h"
index 6ed78d3..0e6da5c 100644 (file)
@@ -83,9 +83,6 @@ public:
 
     static SVGTextContentElement* elementFromRenderer(RenderObject*);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
 
     const SVGLengthValue& specifiedTextLength() const { return m_specifiedTextLength; }
@@ -110,11 +107,6 @@ protected:
 private:
     bool isTextContent() const final { return true; }
 
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
-    const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
-
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
-    PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_textLength { SVGAnimatedLength::create(this, LengthModeOther) };
     Ref<SVGAnimatedEnumeration> m_lengthAdjust { SVGAnimatedEnumeration::create(this, SVGLengthAdjustSpacing) };
     SVGLengthValue m_specifiedTextLength { LengthModeOther };
index 18fe5a3..435387b 100644 (file)
@@ -126,9 +126,6 @@ private:
     SVGTextPathElement(const QualifiedName&, Document&);
     virtual ~SVGTextPathElement();
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextPathElement, SVGTextContentElement, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextPathElement, SVGTextContentElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -146,7 +143,6 @@ private:
 
     bool selfHasRelativeLengths() const override;
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_startOffset { SVGAnimatedLength::create(this, LengthModeOther) };
     Ref<SVGAnimatedEnumeration> m_method { SVGAnimatedEnumeration::create(this, SVGTextPathMethodAlign) };
index 45d5c93..a4862ec 100644 (file)
@@ -30,9 +30,6 @@ class SVGTextPositioningElement : public SVGTextContentElement {
 public:
     static SVGTextPositioningElement* elementFromRenderer(RenderBoxModelObject&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextPositioningElement, SVGTextContentElement>;
-    static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextPositioningElement, SVGTextContentElement>;
 
     const SVGLengthList& x() const { return m_x->currentValue(); }
@@ -57,10 +54,8 @@ private:
     bool isPresentationAttribute(const QualifiedName&) const final;
     void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) final;
 
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLengthList> m_x { SVGAnimatedLengthList::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLengthList> m_y { SVGAnimatedLengthList::create(this, LengthModeHeight) };
index 1424bbf..4c0e266 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "Document.h"
 #include "Element.h"
-#include "SVGAttributeOwnerProxy.h"
 #include "SVGElement.h"
 #include <wtf/URL.h>
 #include "XLinkNames.h"
@@ -32,8 +31,7 @@
 namespace WebCore {
 
 SVGURIReference::SVGURIReference(SVGElement* contextElement)
-    : m_attributeOwnerProxy(std::make_unique<AttributeOwnerProxy>(*this, *contextElement))
-    , m_href(SVGAnimatedString::create(contextElement))
+    : m_href(SVGAnimatedString::create(contextElement))
 {
     static std::once_flag onceFlag;
     std::call_once(onceFlag, [] {
@@ -42,11 +40,6 @@ SVGURIReference::SVGURIReference(SVGElement* contextElement)
     });
 }
 
-SVGURIReference::AttributeRegistry& SVGURIReference::attributeRegistry()
-{
-    return AttributeOwnerProxy::attributeRegistry();
-}
-
 bool SVGURIReference::isKnownAttribute(const QualifiedName& attributeName)
 {
     return PropertyRegistry::isKnownAttribute(attributeName);
index f244c7e..201b6c7 100644 (file)
@@ -29,12 +29,6 @@ namespace WebCore {
 
 class SVGElement;
 
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeRegistry;
-
-template<typename OwnerType, typename... BaseTypes>
-class SVGAttributeOwnerProxyImpl;
-
 class SVGURIReference {
     WTF_MAKE_NONCOPYABLE(SVGURIReference);
 public:
@@ -62,10 +56,6 @@ public:
         return !equalIgnoringFragmentIdentifier(url, document.url());
     }
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGURIReference>;
-    using AttributeRegistry = SVGAttributeRegistry<SVGURIReference>;
-    static AttributeRegistry& attributeRegistry();
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGURIReference>;
 
     String href() const { return m_href->currentValue(); }
@@ -77,7 +67,6 @@ protected:
     static bool isKnownAttribute(const QualifiedName& attributeName);
 
 private:
-    std::unique_ptr<AttributeOwnerProxy> m_attributeOwnerProxy;
     Ref<SVGAnimatedString> m_href;
 };
 
index 621ce59..039081d 100644 (file)
@@ -63,9 +63,6 @@ private:
     void removedFromAncestor(RemovalType, ContainerNode&) override;
     void buildPendingResource() override;
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGUseElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGUseElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
@@ -98,7 +95,6 @@ private:
     void clearShadowTree();
     void invalidateDependentShadowTrees();
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGAnimatedLength> m_x { SVGAnimatedLength::create(this, LengthModeWidth) };
     Ref<SVGAnimatedLength> m_y { SVGAnimatedLength::create(this, LengthModeHeight) };
index f3f795d..b0eef19 100644 (file)
@@ -42,18 +42,14 @@ public:
 private:
     SVGViewElement(const QualifiedName&, Document&);
 
-    // FIXME: svgAttributeChanged missing.
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGViewElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
-    const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
-
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
+    // FIXME(webkit.org/b/196554): svgAttributeChanged missing.
     void parseAttribute(const QualifiedName&, const AtomicString&) final;
 
     bool rendererIsNeeded(const RenderStyle&) final { return false; }
 
-    AttributeOwnerProxy m_attributeOwnerProxy { *this };
     PropertyRegistry m_propertyRegistry { *this };
     Ref<SVGStringList> m_viewTarget { SVGStringList::create(this) };
 };
index 8f2970d..8f42351 100644 (file)
@@ -34,7 +34,6 @@ namespace WebCore {
 SVGViewSpec::SVGViewSpec(SVGElement& contextElement)
     : SVGFitToViewBox(&contextElement, SVGPropertyAccess::ReadOnly)
     , m_contextElement(makeWeakPtr(contextElement))
-    , m_attributeOwnerProxy(*this, contextElement)
     , m_transform(SVGTransformList::create(&contextElement, SVGPropertyAccess::ReadOnly))
 {
     static std::once_flag onceFlag;
index ca4af5f..4ac7ad4 100644 (file)
@@ -50,12 +50,10 @@ public:
 private:
     explicit SVGViewSpec(SVGElement&);
 
-    using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGViewSpec, SVGFitToViewBox>;
     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewSpec, SVGFitToViewBox>;
 
     WeakPtr<SVGElement> m_contextElement;
     String m_viewTargetString;
-    AttributeOwnerProxy m_attributeOwnerProxy;
     Ref<SVGTransformList> m_transform;
 };
 
index 481e4f5..120fa93 100644 (file)
@@ -25,7 +25,6 @@
 
 #pragma once
 
-#include "SVGAttributeAccessor.h"
 #include "SVGPropertyTraits.h"
 
 namespace WebCore {
@@ -36,11 +35,6 @@ enum SVGZoomAndPanType {
     SVGZoomAndPanMagnify
 };
 
-using SVGZoomAndPanTypeAttribute = SVGPropertyAttribute<SVGZoomAndPanType>;
-
-template<typename OwnerType>
-using SVGZoomAndPanTypeAttributeAccessor = SVGPropertyAttributeAccessor<OwnerType, SVGZoomAndPanTypeAttribute>;
-
 template<>
 struct SVGPropertyTraits<SVGZoomAndPanType> {
     static SVGZoomAndPanType initialValue() { return SVGZoomAndPanMagnify; }
diff --git a/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h b/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
deleted file mode 100644 (file)
index 0973d2b..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * 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
index a197941..c65e6f5 100644 (file)
@@ -94,7 +94,7 @@ public:
             removeAnimatedStyleProperty(targetElement);
     }
 
-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
     {
         return m_function.calculateDistance(targetElement, from, to);
     }
index dbd4434..0f3d92a 100644 (file)
@@ -53,9 +53,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
     }
 };
 
@@ -71,10 +71,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         bool& animated = m_animated->animVal();
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
     }
 };
 
@@ -92,10 +92,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         EnumType animated;
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
         m_animated->template setAnimVal<EnumType>(animated);
     }
 };
@@ -114,9 +114,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
@@ -135,9 +135,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
     }
 };
 
@@ -156,9 +156,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
@@ -175,9 +175,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
@@ -192,9 +192,9 @@ public:
     }
     
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
@@ -209,10 +209,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         m_animated->animVal()->pathByteStreamWillChange();
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->pathByteStream());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->pathByteStream());
     }
 };
 
@@ -227,9 +227,9 @@ public:
     }
     
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
@@ -246,10 +246,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         SVGMarkerOrientType animated;
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
         m_animated->setAnimVal(animated);
     }
 };
@@ -265,10 +265,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         SVGPreserveAspectRatioValue& animated = m_animated->animVal()->value();
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
     }
 };
 
@@ -284,9 +284,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->value());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal()->value());
     }
 };
 
@@ -301,10 +301,10 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         String& animated = m_animated->animVal();
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
     }
 };
 
@@ -319,9 +319,9 @@ public:
     }
 
 private:
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
+        m_function.animate(targetElement, progress, repeatCount, m_animated->animVal());
     }
 };
 
index dce65ac..c723acf 100644 (file)
@@ -57,10 +57,10 @@ protected:
         m_animatedPropertyAnimator2->start(targetElement);
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
     {
-        m_animatedPropertyAnimator1->progress(targetElement, percentage, repeatCount);
-        m_animatedPropertyAnimator2->progress(targetElement, percentage, repeatCount);
+        m_animatedPropertyAnimator1->animate(targetElement, progress, repeatCount);
+        m_animatedPropertyAnimator2->animate(targetElement, progress, repeatCount);
     }
 
     void apply(SVGElement* targetElement) override
index 14aa21a..4eda34c 100644 (file)
@@ -64,16 +64,16 @@ private:
         m_animatedPropertyAnimator1->m_function.addFromAndToValues(targetElement);
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) final
     {
         if (m_animatedPropertyAnimator2->m_function.m_from != m_animatedPropertyAnimator2->m_function.m_to) {
             // Discrete animation - no linear interpolation possible between values (e.g. auto to angle).
-            m_animatedPropertyAnimator2->progress(targetElement, percentage, repeatCount);
+            m_animatedPropertyAnimator2->animate(targetElement, progress, repeatCount);
 
             SVGAngleValue animatedAngle;
-            if (percentage < 0.5f && m_animatedPropertyAnimator2->m_function.m_from == SVGMarkerOrientAngle)
+            if (progress < 0.5f && m_animatedPropertyAnimator2->m_function.m_from == SVGMarkerOrientAngle)
                 animatedAngle = m_animatedPropertyAnimator1->m_function.m_from;
-            else if (percentage >= 0.5f && m_animatedPropertyAnimator2->m_function.m_to == SVGMarkerOrientAngle)
+            else if (progress >= 0.5f && m_animatedPropertyAnimator2->m_function.m_to == SVGMarkerOrientAngle)
                 animatedAngle = m_animatedPropertyAnimator1->m_function.m_to;
 
             m_animatedPropertyAnimator1->m_animated->setAnimVal(animatedAngle);
@@ -84,7 +84,7 @@ private:
             // Regular from- toangle animation, with support for smooth interpolation, and additive and accumulated animation.
             m_animatedPropertyAnimator2->m_animated->setAnimVal(SVGMarkerOrientAngle);
 
-            m_animatedPropertyAnimator1->progress(targetElement, percentage, repeatCount);
+            m_animatedPropertyAnimator1->animate(targetElement, progress, repeatCount);
             return;
         }
 
diff --git a/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h b/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h
deleted file mode 100644 (file)
index 57a5b53..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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;
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h b/Source/WebCore/svg/properties/SVGAnimatedPropertyType.h
deleted file mode 100644 (file)
index f8bad43..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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
-};
-
-}
index 1de642e..137bf37 100644 (file)
@@ -51,13 +51,13 @@ public:
     }
 
 protected:
-    float progress(float percentage, unsigned repeatCount, float from, float to, float toAtEndOfDuration, float animated)
+    float animate(float progress, unsigned repeatCount, float from, float to, float toAtEndOfDuration, float animated)
     {
         float number;
         if (m_calcMode == CalcMode::Discrete)
-            number = percentage < 0.5 ? from : to;
+            number = progress < 0.5 ? from : to;
         else
-            number = (to - from) * percentage + from;
+            number = (to - from) * progress + from;
 
         if (m_isAccumulated && repeatCount)
             number += toAtEndOfDuration * repeatCount;
index ac1f587..9233ae9 100644 (file)
@@ -56,9 +56,9 @@ public:
         m_toAtEndOfDuration->parse(toAtEndOfDuration);
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount, RefPtr<SVGLengthList>& animated)
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount, RefPtr<SVGLengthList>& animated)
     {
-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
+        if (!adjustAnimatedList(m_animationMode, progress, animated))
             return;
 
         const Vector<Ref<SVGLength>>& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
@@ -69,14 +69,14 @@ public:
 
         SVGLengthContext lengthContext(targetElement);
         for (unsigned i = 0; i < toItems.size(); ++i) {
-            SVGLengthType unitType = (i < fromItems.size() && percentage < 0.5 ? fromItems : toItems)[i]->value().unitType();
+            SVGLengthType unitType = (i < fromItems.size() && progress < 0.5 ? fromItems : toItems)[i]->value().unitType();
 
             float from = i < fromItems.size() ? fromItems[i]->value().value(lengthContext) : 0;
             float to = toItems[i]->value().value(lengthContext);
             float toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value().value(lengthContext) : 0;
             float value = animatedItems[i]->value().value(lengthContext);
 
-            value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
+            value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
             animatedItems[i]->value().setValue(lengthContext, value, lengthMode, unitType);
         }
     }
@@ -115,9 +115,9 @@ public:
         m_toAtEndOfDuration->parse(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGNumberList>& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGNumberList>& animated)
     {
-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
+        if (!adjustAnimatedList(m_animationMode, progress, animated))
             return;
 
         auto& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
@@ -131,7 +131,7 @@ public:
             float toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value() : 0;
 
             float& value = animatedItems[i]->value();
-            value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
+            value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
         }
     }
 
@@ -165,9 +165,9 @@ public:
         m_toAtEndOfDuration->parse(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGPointList>& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGPointList>& animated)
     {
-        if (!adjustAnimatedList(m_animationMode, percentage, animated))
+        if (!adjustAnimatedList(m_animationMode, progress, animated))
             return;
 
         auto& fromItems = m_animationMode == AnimationMode::To ? animated->items() : m_from->items();
@@ -181,8 +181,8 @@ public:
             FloatPoint toAtEndOfDuration = i < toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[i]->value() : FloatPoint();
             FloatPoint& animated = animatedItems[i]->value();
 
-            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());
+            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());
 
             animated = { animatedX, animatedY };
         }
@@ -218,10 +218,10 @@ public:
         m_toAtEndOfDuration->parse(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, RefPtr<SVGTransformList>& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, RefPtr<SVGTransformList>& animated)
     {
         // Pass false to 'resizeAnimatedIfNeeded', as the special post-multiplication behavior of <animateTransform> needs to be respected below.
-        if (!adjustAnimatedList(m_animationMode, percentage, animated, false))
+        if (!adjustAnimatedList(m_animationMode, progress, animated, false))
             return;
 
         // Spec: To animations provide specific functionality to get a smooth change from the underlying
@@ -245,7 +245,7 @@ public:
         const SVGTransformValue zerosTransform = SVGTransformValue(to.type(), zerosAffineTransform);
 
         const SVGTransformValue& from = fromItemsSize ? fromItems[0]->value() : zerosTransform;
-        SVGTransformValue current = SVGTransformDistance(from, to).scaledDistance(percentage).addToSVGTransform(from);
+        SVGTransformValue current = SVGTransformDistance(from, to).scaledDistance(progress).addToSVGTransform(from);
 
         if (m_isAccumulated && repeatCount) {
             const SVGTransformValue& toAtEndOfDuration = toAtEndOfDurationItems.size() ? toAtEndOfDurationItems[0]->value() : zerosTransform;
index 77c0206..28c512a 100644 (file)
@@ -46,10 +46,10 @@ public:
         ASSERT_NOT_REACHED();
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, SVGAngleValue& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, SVGAngleValue& animated)
     {
         float number = animated.value();
-        number = Base::progress(percentage, repeatCount, m_from.value(), m_to.value(), toAtEndOfDuration().value(), number);
+        number = Base::animate(progress, repeatCount, m_from.value(), m_to.value(), toAtEndOfDuration().value(), number);
         animated.setValue(number);
     }
 
@@ -78,26 +78,26 @@ public:
         m_toAtEndOfDuration = SVGPropertyTraits<Color>::fromString(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, Color& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, Color& animated)
     {
         Color from = m_animationMode == AnimationMode::To ? animated : m_from;
         
-        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());
+        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());
         
         animated = { roundAndClampColorChannel(red), roundAndClampColorChannel(green), roundAndClampColorChannel(blue), roundAndClampColorChannel(alpha) };
     }
 
-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
     {
         Color fromColor = CSSParser::parseColor(from.stripWhiteSpace());
         if (!fromColor.isValid())
-            return -1;
+            return { };
         Color toColor = CSSParser::parseColor(to.stripWhiteSpace());
         if (!toColor.isValid())
-            return -1;
+            return { };
         float red = fromColor.red() - toColor.red();
         float green = fromColor.green() - toColor.green();
         float blue = fromColor.blue() - toColor.blue();
@@ -136,12 +136,12 @@ public:
         m_toAtEndOfDuration = SVGPropertyTraits<int>::fromString(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, int& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, int& animated)
     {
-        animated = static_cast<int>(roundf(Base::progress(percentage, repeatCount, m_from, m_to, toAtEndOfDuration(), animated)));
+        animated = static_cast<int>(roundf(Base::animate(progress, repeatCount, m_from, m_to, toAtEndOfDuration(), animated)));
     }
 
-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
     {
         return std::abs(to.toIntStrict() - from.toIntStrict());
     }
@@ -174,21 +174,21 @@ public:
         m_toAtEndOfDuration = SVGLengthValue(m_lengthMode, toAtEndOfDuration);
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount, SVGLengthValue& animated)
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount, SVGLengthValue& animated)
     {
         SVGLengthContext lengthContext(targetElement);
-        SVGLengthType unitType = percentage < 0.5 ? m_from.unitType() : m_to.unitType();
+        SVGLengthType unitType = progress < 0.5 ? m_from.unitType() : m_to.unitType();
 
         float from = (m_animationMode == AnimationMode::To ? animated : m_from).value(lengthContext);
         float to = m_to.value(lengthContext);
         float toAtEndOfDuration = this->toAtEndOfDuration().value(lengthContext);
         float value = animated.value(lengthContext);
 
-        value = Base::progress(percentage, repeatCount, from, to, toAtEndOfDuration, value);
+        value = Base::animate(progress, repeatCount, from, to, toAtEndOfDuration, value);
         animated = { lengthContext, value, m_lengthMode, unitType };
     }
 
-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
     {
         SVGLengthContext lengthContext(targetElement);
         auto fromLength = SVGLengthValue(m_lengthMode, from);
@@ -224,13 +224,13 @@ public:
         m_toAtEndOfDuration = SVGPropertyTraits<float>::fromString(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, float& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, float& animated)
     {
         float from = m_animationMode == AnimationMode::To ? animated : m_from;
-        animated = Base::progress(percentage, repeatCount, from, m_to, toAtEndOfDuration(), animated);
+        animated = Base::animate(progress, repeatCount, from, m_to, toAtEndOfDuration(), animated);
     }
 
-    float calculateDistance(SVGElement*, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement*, const String& from, const String& to) const override
     {
         float fromNumber = 0;
         float toNumber = 0;
@@ -262,7 +262,7 @@ public:
         m_toAtEndOfDuration = SVGPathByteStream(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, SVGPathByteStream& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, SVGPathByteStream& animated)
     {
         SVGPathByteStream underlyingPath;
         if (m_animationMode == AnimationMode::To)
@@ -275,7 +275,7 @@ public:
         if (!from.size() || (m_isAdditive && m_animationMode != AnimationMode::To))
             lastAnimated = animated;
 
-        buildAnimatedSVGPathByteStream(from, m_to, animated, percentage);
+        buildAnimatedSVGPathByteStream(from, m_to, animated, progress);
 
         // Handle additive='sum'.
         if (!lastAnimated.isEmpty())
@@ -311,14 +311,14 @@ public:
         m_toAtEndOfDuration = SVGPropertyTraits<FloatRect>::fromString(toAtEndOfDuration);
     }
 
-    void progress(SVGElement*, float percentage, unsigned repeatCount, FloatRect& animated)
+    void animate(SVGElement*, float progress, unsigned repeatCount, FloatRect& animated)
     {
         FloatRect from = m_animationMode == AnimationMode::To ? animated : m_from;
         
-        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());
+        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());
         
         animated = { x, y, width, height };
     }
index 96707bd..8cf1b98 100644 (file)
@@ -47,9 +47,9 @@ public:
         ASSERT_NOT_REACHED();
     }
 
-    void progress(SVGElement*, float percentage, unsigned, ValueType& animated)
+    void animate(SVGElement*, float progress, unsigned, ValueType& animated)
     {
-        if ((m_animationMode == AnimationMode::FromTo && percentage > 0.5) || m_animationMode == AnimationMode::To || percentage == 1)
+        if ((m_animationMode == AnimationMode::FromTo && progress > 0.5) || m_animationMode == AnimationMode::To || progress == 1)
             animated = m_to;
         else
             animated = m_from;
index 858c948..90058a5 100644 (file)
@@ -41,7 +41,7 @@ public:
     virtual void setFromAndByValues(SVGElement* targetElement, const String&, const String&) = 0;
     virtual void setToAtEndOfDurationValue(const String&) = 0;
 
-    virtual float calculateDistance(SVGElement*, const String&, const String&) const { return -1; }
+    virtual Optional<float> calculateDistance(SVGElement*, const String&, const String&) const { return { }; }
 protected:
     SVGAnimationFunction(AnimationMode animationMode)
         : m_animationMode(animationMode)
diff --git a/Source/WebCore/svg/properties/SVGAttribute.h b/Source/WebCore/svg/properties/SVGAttribute.h
deleted file mode 100644 (file)
index 8711ac8..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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);
-    }
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGAttributeAccessor.h b/Source/WebCore/svg/properties/SVGAttributeAccessor.h
deleted file mode 100644 (file)
index 071ac82..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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
index 827826e..04716d0 100644 (file)
@@ -67,11 +67,11 @@ public:
     virtual void setToAtEndOfDurationValue(const String&) { }
 
     virtual void start(SVGElement*) = 0;
-    virtual void progress(SVGElement*, float, unsigned) = 0;
+    virtual void animate(SVGElement*, float progress, unsigned repeatCount) = 0;
     virtual void apply(SVGElement*) = 0;
     virtual void stop(SVGElement* targetElement) = 0;
 
-    virtual float calculateDistance(SVGElement*, const String&, const String&) const { return -1; }
+    virtual Optional<float> calculateDistance(SVGElement*, const String&, const String&) const { return { }; }
 
 protected:
     bool isAnimatedStylePropertyAniamtor(const SVGElement*) const;
diff --git a/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp b/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.cpp
deleted file mode 100644 (file)
index 56c6e9e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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;
-}
-
-}
diff --git a/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h b/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h
deleted file mode 100644 (file)
index f1c5263..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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;
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h b/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h
deleted file mode 100644 (file)
index 7d62ecf..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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 };
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGAttributeRegistry.h b/Source/WebCore/svg/properties/SVGAttributeRegistry.h
deleted file mode 100644 (file)
index 05143fe..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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;
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp b/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.cpp
deleted file mode 100644 (file)
index b06f9ad..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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
diff --git a/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h b/Source/WebCore/svg/properties/SVGLegacyAnimatedProperty.h
deleted file mode 100644 (file)
index ccd23c1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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
diff --git a/Source/WebCore/svg/properties/SVGLegacyProperty.h b/Source/WebCore/svg/properties/SVGLegacyProperty.h
deleted file mode 100644 (file)
index 143c7e9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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
diff --git a/Source/WebCore/svg/properties/SVGListProperty.h b/Source/WebCore/svg/properties/SVGListProperty.h
deleted file mode 100644 (file)
index 83361fe..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * 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;
-};
-
-}
diff --git a/Source/WebCore/svg/properties/SVGListPropertyTearOff.h b/Source/WebCore/svg/properties/SVGListPropertyTearOff.h
deleted file mode 100644 (file)
index 1e049de..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * 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;
-};
-
-}
index bbf33a9..4121722 100644 (file)
@@ -60,10 +60,10 @@ public:
         m_property->setValue(SVGPropertyTraits<PropertyType>::fromString(baseValue));
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
     {
         PropertyType& animated = m_property->value();
-        m_function.progress(targetElement, percentage, repeatCount, animated);
+        m_function.animate(targetElement, progress, repeatCount, animated);
     }
 
     void apply(SVGElement* targetElement) override
index cff4f4e..d491205 100644 (file)
@@ -21,7 +21,9 @@
 #pragma once
 
 #include "SVGPropertyOwner.h"
+#include <wtf/Optional.h>
 #include <wtf/RefCounted.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
index 9906b1d..f5e8b1b 100644 (file)
@@ -65,7 +65,7 @@ protected:
         removeAnimatedStyleProperty(targetElement);
     }
 
-    float calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
+    Optional<float> calculateDistance(SVGElement* targetElement, const String& from, const String& to) const override
     {
         return m_function.calculateDistance(targetElement, from, to);
     }
diff --git a/Source/WebCore/svg/properties/SVGPropertyTearOff.h b/Source/WebCore/svg/properties/SVGPropertyTearOff.h
deleted file mode 100644 (file)
index c2672b1..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * 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;
-};
-
-}
index 53798d1..e16c890 100644 (file)
@@ -44,9 +44,9 @@ public:
     {
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_property->value());
+        m_function.animate(targetElement, progress, repeatCount, m_property->value());
     }
 
     void apply(SVGElement* targetElement) override
index f274f18..abafc51 100644 (file)
@@ -44,9 +44,9 @@ public:
     {
     }
 
-    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) override
+    void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
     {
-        m_function.progress(targetElement, percentage, repeatCount, m_list);
+        m_function.animate(targetElement, progress, repeatCount, m_list);
     }
 
     void apply(SVGElement* targetElement) override