Move InstanceInvalidationGuard/UpdateBlocker to SVGElement from SVGElementInstance
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Feb 2015 16:58:08 +0000 (16:58 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Feb 2015 16:58:08 +0000 (16:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=141148

Reviewed by Brent Fulgham.

Inspired by this change Rob Buis made in Blink:

    http://src.chromium.org/viewvc/blink?view=revision&revision=173343

I actually wrote the whole thing and then discovered we did it almost identically.

* svg/SVGAnimatedTypeAnimator.cpp:
(WebCore::SVGElementAnimatedPropertyList::setInstanceUpdatesBlocked): Added this
helper function to get around a circular header dependency.
* svg/SVGAnimatedTypeAnimator.h:
(WebCore::SVGAnimatedTypeAnimator::executeAction): Use setInstanceUpdatesBlocked.

* svg/SVGElement.cpp:
(WebCore::SVGElement::removedFrom): Use invalidateInstances.
(WebCore::SVGElement::finishParsingChildren): Ditto.
(WebCore::SVGElement::svgAttributeChanged): Ditto.
(WebCore::SVGElement::childrenChanged): Ditto.
(WebCore::SVGElement::setInstanceUpdatesBlocked): Added an assertion that will
catch anyone who nests InstanceUpdateBlocker by accident.
(WebCore::SVGElement::invalidateInstances): Moved this here from
SVGElementInstance::invalidateAllInstancesOfElement. I had already modified this
so it had nothing to do with SVGElementInstance, so it was a simple matter of
converting this into a member function. Added a FIXME about the mysterious
updateStyleIfNeeded that makes multiple tests fail if it's removed.

* svg/SVGElement.h: Added public InstanceUpdateBlocker class, protected
InstanceInvalidationGuard class, and private invalidateInstances function.
Unlike the ones in SVGElementInstance these use references so they are then
not copyable without using the WTF_MAKE_NONCOPYABLE macro.

* svg/SVGElementInstance.cpp:
(WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Deleted.
(WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker): Deleted.
(WebCore::SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker): Deleted.
* svg/SVGElementInstance.h: Removed InvalidationGuard, InstanceUpdateBlocker, and
invalidateAllInstancesOfElement. Didn't do any further cleanup since we soon will
delete this entire file.

* svg/SVGAElement.cpp:
(WebCore::SVGAElement::svgAttributeChanged): Updated to use new name and reference
instead of pointer.
* svg/SVGAnimateElementBase.cpp:
(WebCore::applyCSSPropertyToTargetAndInstances): Ditto.
(WebCore::removeCSSPropertyFromTargetAndInstances): Ditto.
(WebCore::notifyTargetAndInstancesAboutAnimValChange): Ditto.
* svg/SVGAnimatedPath.cpp:
(WebCore::SVGAnimatedPathAnimator::startAnimValAnimation): Ditto.
* svg/SVGCircleElement.cpp:
(WebCore::SVGCircleElement::svgAttributeChanged): Ditto.
* svg/SVGClipPathElement.cpp:
(WebCore::SVGClipPathElement::svgAttributeChanged): Ditto.
* svg/SVGComponentTransferFunctionElement.cpp:
(WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged): Ditto.
* svg/SVGCursorElement.cpp:
(WebCore::SVGCursorElement::svgAttributeChanged): Ditto.
* svg/SVGEllipseElement.cpp:
(WebCore::SVGEllipseElement::svgAttributeChanged): Ditto.
* svg/SVGFEBlendElement.cpp:
(WebCore::SVGFEBlendElement::svgAttributeChanged): Ditto.
* svg/SVGFEColorMatrixElement.cpp:
(WebCore::SVGFEColorMatrixElement::svgAttributeChanged): Ditto.
* svg/SVGFECompositeElement.cpp:
(WebCore::SVGFECompositeElement::svgAttributeChanged): Ditto.
* svg/SVGFEConvolveMatrixElement.cpp:
(WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged): Ditto.
* svg/SVGFEDiffuseLightingElement.cpp:
(WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged): Ditto.
* svg/SVGFEDisplacementMapElement.cpp:
(WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Ditto.
* svg/SVGFEDropShadowElement.cpp:
(WebCore::SVGFEDropShadowElement::svgAttributeChanged): Ditto.
* svg/SVGFEGaussianBlurElement.cpp:
(WebCore::SVGFEGaussianBlurElement::svgAttributeChanged): Ditto.
* svg/SVGFEImageElement.cpp:
(WebCore::SVGFEImageElement::svgAttributeChanged): Ditto.
* svg/SVGFELightElement.cpp:
(WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
* svg/SVGFEMergeNodeElement.cpp:
(WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
* svg/SVGFEMorphologyElement.cpp:
(WebCore::SVGFEMorphologyElement::svgAttributeChanged): Ditto.
* svg/SVGFEOffsetElement.cpp:
(WebCore::SVGFEOffsetElement::svgAttributeChanged): Ditto.
* svg/SVGFESpecularLightingElement.cpp:
(WebCore::SVGFESpecularLightingElement::svgAttributeChanged): Ditto.
* svg/SVGFETileElement.cpp:
(WebCore::SVGFETileElement::svgAttributeChanged): Ditto.
* svg/SVGFETurbulenceElement.cpp:
(WebCore::SVGFETurbulenceElement::svgAttributeChanged): Ditto.
* svg/SVGFilterElement.cpp:
(WebCore::SVGFilterElement::svgAttributeChanged): Ditto.
* svg/SVGFilterPrimitiveStandardAttributes.cpp:
(WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged): Ditto.
* svg/SVGForeignObjectElement.cpp:
(WebCore::SVGForeignObjectElement::svgAttributeChanged): Ditto.
* svg/SVGGElement.cpp:
(WebCore::SVGGElement::svgAttributeChanged): Ditto.
* svg/SVGGradientElement.cpp:
(WebCore::SVGGradientElement::svgAttributeChanged): Ditto.
* svg/SVGGraphicsElement.cpp:
(WebCore::SVGGraphicsElement::svgAttributeChanged): Ditto.
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::svgAttributeChanged): Ditto.
* svg/SVGLineElement.cpp:
(WebCore::SVGLineElement::svgAttributeChanged): Ditto.
* svg/SVGLinearGradientElement.cpp:
(WebCore::SVGLinearGradientElement::svgAttributeChanged): Ditto.
* svg/SVGMPathElement.cpp:
(WebCore::SVGMPathElement::svgAttributeChanged): Ditto.
* svg/SVGMarkerElement.cpp:
(WebCore::SVGMarkerElement::svgAttributeChanged): Ditto.
* svg/SVGMaskElement.cpp:
(WebCore::SVGMaskElement::svgAttributeChanged): Ditto.
* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::svgAttributeChanged): Ditto.
* svg/SVGPatternElement.cpp:
(WebCore::SVGPatternElement::svgAttributeChanged): Ditto.
* svg/SVGPolyElement.cpp:
(WebCore::SVGPolyElement::svgAttributeChanged): Ditto.
* svg/SVGRadialGradientElement.cpp:
(WebCore::SVGRadialGradientElement::svgAttributeChanged): Ditto.
* svg/SVGRectElement.cpp:
(WebCore::SVGRectElement::svgAttributeChanged): Ditto.
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
* svg/SVGScriptElement.cpp:
(WebCore::SVGScriptElement::svgAttributeChanged): Ditto.
* svg/SVGStopElement.cpp:
(WebCore::SVGStopElement::svgAttributeChanged): Ditto.
* svg/SVGSymbolElement.cpp:
(WebCore::SVGSymbolElement::svgAttributeChanged): Ditto.
* svg/SVGTRefElement.cpp:
(WebCore::SVGTRefElement::svgAttributeChanged): Ditto.
* svg/SVGTextContentElement.cpp:
(WebCore::SVGTextContentElement::svgAttributeChanged): Ditto.
* svg/SVGTextPathElement.cpp:
(WebCore::SVGTextPathElement::svgAttributeChanged): Ditto.
* svg/SVGTextPositioningElement.cpp:
(WebCore::SVGTextPositioningElement::svgAttributeChanged): Ditto.
* svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::svgAttributeChanged): Ditto.
* svg/animation/SVGSMILElement.cpp:
(WebCore::SVGSMILElement::svgAttributeChanged): Ditto.

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

58 files changed:
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGAElement.cpp
Source/WebCore/svg/SVGAnimateElementBase.cpp
Source/WebCore/svg/SVGAnimatedPath.cpp
Source/WebCore/svg/SVGAnimatedTypeAnimator.cpp
Source/WebCore/svg/SVGAnimatedTypeAnimator.h
Source/WebCore/svg/SVGCircleElement.cpp
Source/WebCore/svg/SVGClipPathElement.cpp
Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp
Source/WebCore/svg/SVGCursorElement.cpp
Source/WebCore/svg/SVGElement.cpp
Source/WebCore/svg/SVGElement.h
Source/WebCore/svg/SVGElementInstance.cpp
Source/WebCore/svg/SVGElementInstance.h
Source/WebCore/svg/SVGEllipseElement.cpp
Source/WebCore/svg/SVGFEBlendElement.cpp
Source/WebCore/svg/SVGFEColorMatrixElement.cpp
Source/WebCore/svg/SVGFECompositeElement.cpp
Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp
Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp
Source/WebCore/svg/SVGFEDisplacementMapElement.cpp
Source/WebCore/svg/SVGFEDropShadowElement.cpp
Source/WebCore/svg/SVGFEGaussianBlurElement.cpp
Source/WebCore/svg/SVGFEImageElement.cpp
Source/WebCore/svg/SVGFELightElement.cpp
Source/WebCore/svg/SVGFEMergeNodeElement.cpp
Source/WebCore/svg/SVGFEMorphologyElement.cpp
Source/WebCore/svg/SVGFEOffsetElement.cpp
Source/WebCore/svg/SVGFESpecularLightingElement.cpp
Source/WebCore/svg/SVGFETileElement.cpp
Source/WebCore/svg/SVGFETurbulenceElement.cpp
Source/WebCore/svg/SVGFilterElement.cpp
Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp
Source/WebCore/svg/SVGForeignObjectElement.cpp
Source/WebCore/svg/SVGGElement.cpp
Source/WebCore/svg/SVGGradientElement.cpp
Source/WebCore/svg/SVGGraphicsElement.cpp
Source/WebCore/svg/SVGImageElement.cpp
Source/WebCore/svg/SVGLineElement.cpp
Source/WebCore/svg/SVGLinearGradientElement.cpp
Source/WebCore/svg/SVGMPathElement.cpp
Source/WebCore/svg/SVGMarkerElement.cpp
Source/WebCore/svg/SVGMaskElement.cpp
Source/WebCore/svg/SVGPathElement.cpp
Source/WebCore/svg/SVGPatternElement.cpp
Source/WebCore/svg/SVGPolyElement.cpp
Source/WebCore/svg/SVGRadialGradientElement.cpp
Source/WebCore/svg/SVGRectElement.cpp
Source/WebCore/svg/SVGSVGElement.cpp
Source/WebCore/svg/SVGScriptElement.cpp
Source/WebCore/svg/SVGStopElement.cpp
Source/WebCore/svg/SVGSymbolElement.cpp
Source/WebCore/svg/SVGTRefElement.cpp
Source/WebCore/svg/SVGTextContentElement.cpp
Source/WebCore/svg/SVGTextPathElement.cpp
Source/WebCore/svg/SVGTextPositioningElement.cpp
Source/WebCore/svg/SVGUseElement.cpp
Source/WebCore/svg/animation/SVGSMILElement.cpp

index 7649bb05fc403421406f8d3f8f4a77b8785025dd..5cf6333176380115e2c01d4d29f68bbf7db7e418 100644 (file)
@@ -1,3 +1,154 @@
+2015-02-03  Darin Adler  <darin@apple.com>
+
+        Move InstanceInvalidationGuard/UpdateBlocker to SVGElement from SVGElementInstance
+        https://bugs.webkit.org/show_bug.cgi?id=141148
+
+        Reviewed by Brent Fulgham.
+
+        Inspired by this change Rob Buis made in Blink:
+
+            http://src.chromium.org/viewvc/blink?view=revision&revision=173343
+
+        I actually wrote the whole thing and then discovered we did it almost identically.
+
+        * svg/SVGAnimatedTypeAnimator.cpp:
+        (WebCore::SVGElementAnimatedPropertyList::setInstanceUpdatesBlocked): Added this
+        helper function to get around a circular header dependency.
+        * svg/SVGAnimatedTypeAnimator.h:
+        (WebCore::SVGAnimatedTypeAnimator::executeAction): Use setInstanceUpdatesBlocked.
+
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::removedFrom): Use invalidateInstances.
+        (WebCore::SVGElement::finishParsingChildren): Ditto.
+        (WebCore::SVGElement::svgAttributeChanged): Ditto.
+        (WebCore::SVGElement::childrenChanged): Ditto.
+        (WebCore::SVGElement::setInstanceUpdatesBlocked): Added an assertion that will
+        catch anyone who nests InstanceUpdateBlocker by accident.
+        (WebCore::SVGElement::invalidateInstances): Moved this here from
+        SVGElementInstance::invalidateAllInstancesOfElement. I had already modified this
+        so it had nothing to do with SVGElementInstance, so it was a simple matter of
+        converting this into a member function. Added a FIXME about the mysterious
+        updateStyleIfNeeded that makes multiple tests fail if it's removed.
+
+        * svg/SVGElement.h: Added public InstanceUpdateBlocker class, protected
+        InstanceInvalidationGuard class, and private invalidateInstances function.
+        Unlike the ones in SVGElementInstance these use references so they are then
+        not copyable without using the WTF_MAKE_NONCOPYABLE macro.
+
+        * svg/SVGElementInstance.cpp:
+        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Deleted.
+        (WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker): Deleted.
+        (WebCore::SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker): Deleted.
+        * svg/SVGElementInstance.h: Removed InvalidationGuard, InstanceUpdateBlocker, and
+        invalidateAllInstancesOfElement. Didn't do any further cleanup since we soon will
+        delete this entire file.
+
+        * svg/SVGAElement.cpp:
+        (WebCore::SVGAElement::svgAttributeChanged): Updated to use new name and reference
+        instead of pointer.
+        * svg/SVGAnimateElementBase.cpp:
+        (WebCore::applyCSSPropertyToTargetAndInstances): Ditto.
+        (WebCore::removeCSSPropertyFromTargetAndInstances): Ditto.
+        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Ditto.
+        * svg/SVGAnimatedPath.cpp:
+        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation): Ditto.
+        * svg/SVGCircleElement.cpp:
+        (WebCore::SVGCircleElement::svgAttributeChanged): Ditto.
+        * svg/SVGClipPathElement.cpp:
+        (WebCore::SVGClipPathElement::svgAttributeChanged): Ditto.
+        * svg/SVGComponentTransferFunctionElement.cpp:
+        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged): Ditto.
+        * svg/SVGCursorElement.cpp:
+        (WebCore::SVGCursorElement::svgAttributeChanged): Ditto.
+        * svg/SVGEllipseElement.cpp:
+        (WebCore::SVGEllipseElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEBlendElement.cpp:
+        (WebCore::SVGFEBlendElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEColorMatrixElement.cpp:
+        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged): Ditto.
+        * svg/SVGFECompositeElement.cpp:
+        (WebCore::SVGFECompositeElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEConvolveMatrixElement.cpp:
+        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEDiffuseLightingElement.cpp:
+        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEDisplacementMapElement.cpp:
+        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEDropShadowElement.cpp:
+        (WebCore::SVGFEDropShadowElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEGaussianBlurElement.cpp:
+        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEImageElement.cpp:
+        (WebCore::SVGFEImageElement::svgAttributeChanged): Ditto.
+        * svg/SVGFELightElement.cpp:
+        (WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEMergeNodeElement.cpp:
+        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEMorphologyElement.cpp:
+        (WebCore::SVGFEMorphologyElement::svgAttributeChanged): Ditto.
+        * svg/SVGFEOffsetElement.cpp:
+        (WebCore::SVGFEOffsetElement::svgAttributeChanged): Ditto.
+        * svg/SVGFESpecularLightingElement.cpp:
+        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged): Ditto.
+        * svg/SVGFETileElement.cpp:
+        (WebCore::SVGFETileElement::svgAttributeChanged): Ditto.
+        * svg/SVGFETurbulenceElement.cpp:
+        (WebCore::SVGFETurbulenceElement::svgAttributeChanged): Ditto.
+        * svg/SVGFilterElement.cpp:
+        (WebCore::SVGFilterElement::svgAttributeChanged): Ditto.
+        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged): Ditto.
+        * svg/SVGForeignObjectElement.cpp:
+        (WebCore::SVGForeignObjectElement::svgAttributeChanged): Ditto.
+        * svg/SVGGElement.cpp:
+        (WebCore::SVGGElement::svgAttributeChanged): Ditto.
+        * svg/SVGGradientElement.cpp:
+        (WebCore::SVGGradientElement::svgAttributeChanged): Ditto.
+        * svg/SVGGraphicsElement.cpp:
+        (WebCore::SVGGraphicsElement::svgAttributeChanged): Ditto.
+        * svg/SVGImageElement.cpp:
+        (WebCore::SVGImageElement::svgAttributeChanged): Ditto.
+        * svg/SVGLineElement.cpp:
+        (WebCore::SVGLineElement::svgAttributeChanged): Ditto.
+        * svg/SVGLinearGradientElement.cpp:
+        (WebCore::SVGLinearGradientElement::svgAttributeChanged): Ditto.
+        * svg/SVGMPathElement.cpp:
+        (WebCore::SVGMPathElement::svgAttributeChanged): Ditto.
+        * svg/SVGMarkerElement.cpp:
+        (WebCore::SVGMarkerElement::svgAttributeChanged): Ditto.
+        * svg/SVGMaskElement.cpp:
+        (WebCore::SVGMaskElement::svgAttributeChanged): Ditto.
+        * svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::svgAttributeChanged): Ditto.
+        * svg/SVGPatternElement.cpp:
+        (WebCore::SVGPatternElement::svgAttributeChanged): Ditto.
+        * svg/SVGPolyElement.cpp:
+        (WebCore::SVGPolyElement::svgAttributeChanged): Ditto.
+        * svg/SVGRadialGradientElement.cpp:
+        (WebCore::SVGRadialGradientElement::svgAttributeChanged): Ditto.
+        * svg/SVGRectElement.cpp:
+        (WebCore::SVGRectElement::svgAttributeChanged): Ditto.
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
+        * svg/SVGScriptElement.cpp:
+        (WebCore::SVGScriptElement::svgAttributeChanged): Ditto.
+        * svg/SVGStopElement.cpp:
+        (WebCore::SVGStopElement::svgAttributeChanged): Ditto.
+        * svg/SVGSymbolElement.cpp:
+        (WebCore::SVGSymbolElement::svgAttributeChanged): Ditto.
+        * svg/SVGTRefElement.cpp:
+        (WebCore::SVGTRefElement::svgAttributeChanged): Ditto.
+        * svg/SVGTextContentElement.cpp:
+        (WebCore::SVGTextContentElement::svgAttributeChanged): Ditto.
+        * svg/SVGTextPathElement.cpp:
+        (WebCore::SVGTextPathElement::svgAttributeChanged): Ditto.
+        * svg/SVGTextPositioningElement.cpp:
+        (WebCore::SVGTextPositioningElement::svgAttributeChanged): Ditto.
+        * svg/SVGUseElement.cpp:
+        (WebCore::SVGUseElement::svgAttributeChanged): Ditto.
+        * svg/animation/SVGSMILElement.cpp:
+        (WebCore::SVGSMILElement::svgAttributeChanged): Ditto.
+
 2015-02-02  Darin Adler  <darin@apple.com>
 
         REGRESSION (r170576): Storage leaks in parsing of CSS image sizes
index 708bc62750fe7c1c141de2f10f5a4ac1a56f6c96..ab177ebafb4a3a5fd3e63961650193e57f5a58e5 100644 (file)
@@ -126,7 +126,7 @@ void SVGAElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     // Unlike other SVG*Element classes, SVGAElement only listens to SVGURIReference changes
     // as none of the other properties changes the linking behaviour for our <a> element.
index bde2b719e5b3b0aa2903e566e7f47b528afdfb3a..c1ccdc23caf4c52fc206e253af4a859aaa38183a 100644 (file)
@@ -258,7 +258,7 @@ static inline void applyCSSPropertyToTargetAndInstances(SVGElement& targetElemen
 
     CSSPropertyID id = cssPropertyID(attributeName.localName());
 
-    SVGElementInstance::InstanceUpdateBlocker blocker(&targetElement);
+    SVGElement::InstanceUpdateBlocker blocker(targetElement);
     applyCSSPropertyToTarget(targetElement, id, valueAsString);
 
     // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
@@ -274,7 +274,7 @@ static inline void removeCSSPropertyFromTargetAndInstances(SVGElement& targetEle
 
     CSSPropertyID id = cssPropertyID(attributeName.localName());
 
-    SVGElementInstance::InstanceUpdateBlocker blocker(&targetElement);
+    SVGElement::InstanceUpdateBlocker blocker(targetElement);
     removeCSSPropertyFromTarget(targetElement, id);
 
     // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
@@ -293,7 +293,7 @@ static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement& target
     if (attributeName == anyQName() || !targetElement.inDocument() || !targetElement.parentNode())
         return;
 
-    SVGElementInstance::InstanceUpdateBlocker blocker(&targetElement);
+    SVGElement::InstanceUpdateBlocker blocker(targetElement);
     notifyTargetAboutAnimValChange(targetElement, attributeName);
 
     // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
index e0a73103e997029be647f3ce1038fa2765d62f68..fba8a61d2f8854656003417c3ec514002e60a013 100644 (file)
@@ -54,7 +54,7 @@ std::unique_ptr<SVGAnimatedType> SVGAnimatedPathAnimator::startAnimValAnimation(
     for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it)
         result.append(castAnimatedPropertyToActualType<SVGAnimatedPathSegListPropertyTearOff>(it->properties[0].get()));
 
-    SVGElementInstance::InstanceUpdateBlocker blocker(property->contextElement());
+    SVGElement::InstanceUpdateBlocker blocker(*property->contextElement());
 
     size_t resultSize = result.size();
     for (size_t i = 0; i < resultSize; ++i)
index 6c4ebb48019741e3dbb50880492c383a93abd9af..85a2c1fb6d28c968c7507ea044747fc812e656eb 100644 (file)
@@ -83,4 +83,9 @@ SVGElementAnimatedPropertyList SVGAnimatedTypeAnimator::findAnimatedPropertiesFo
     return result;
 }
 
+void SVGAnimatedTypeAnimator::setInstanceUpdatesBlocked(SVGElement& element, bool blocked)
+{
+    element.setInstanceUpdatesBlocked(blocked);
+}
+
 } // namespace WebCore
index c9336f8455f72ad2ec8bae762ac1aa2042519ef0..c68f7561143bf47a3eda403d287da98af28bbac9 100644 (file)
@@ -189,7 +189,8 @@ private:
     template<typename AnimValType>
     void executeAction(AnimationAction action, const SVGElementAnimatedPropertyList& animatedTypes, unsigned whichProperty, typename AnimValType::ContentType* type = 0)
     {
-        SVGElementInstance::InstanceUpdateBlocker blocker(animatedTypes[0].element);
+        // FIXME: Can't use SVGElement::InstanceUpdateBlocker because of circular header dependency. Would be nice to untangle this.
+        setInstanceUpdatesBlocked(*animatedTypes[0].element, true);
 
         SVGElementAnimatedPropertyList::const_iterator end = animatedTypes.end();
         for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it) {
@@ -216,7 +217,11 @@ private:
                 break;
             }
         }
+
+        setInstanceUpdatesBlocked(*animatedTypes[0].element, false);
     }
+
+    static void setInstanceUpdatesBlocked(SVGElement&, bool);
 };
 
 } // namespace WebCore
index a19babac6f8c4acb994d9a3f6172030a6f286177..196cc2703cc9daffafa310187fd5bcef46e3146e 100644 (file)
@@ -104,7 +104,7 @@ void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::cxAttr
         || attrName == SVGNames::cyAttr
index 8ceb63d306d37f30e84b51db7eaf47a595f77d1c..679d34c14476e5af6133878bcbef5495eb28693b 100644 (file)
@@ -96,7 +96,7 @@ void SVGClipPathElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (RenderObject* object = renderer())
         object->setNeedsLayout();
index e43803990d7f0a52cecde1da109bbdcbb38e1fec..1af8141ca590a7f19a762a9ec46497090757b007 100644 (file)
@@ -131,7 +131,7 @@ void SVGComponentTransferFunctionElement::svgAttributeChanged(const QualifiedNam
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     invalidateFilterPrimitiveParent(this);
 }
index 0a25122cb0215604d2ba712a6fca1b93f9442413..166901d149579efd538473f7fe0a118f89db5fe7 100644 (file)
@@ -121,7 +121,7 @@ void SVGCursorElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     // Any change of a cursor specific attribute triggers this recalc.
     HashSet<SVGElement*>::const_iterator it = m_clients.begin();
index a3256cf5bdaea8f0b530f4af75c01f4bd801d7ff..8ce83eb3bbeb80bde2726b7260cdb88cb5ba612f 100644 (file)
@@ -392,7 +392,7 @@ void SVGElement::removedFrom(ContainerNode& rootParent)
         document().accessSVGExtensions().clearTargetDependencies(*this);
         document().accessSVGExtensions().removeAllElementReferencesForTarget(this);
     }
-    SVGElementInstance::invalidateAllInstancesOfElement(this);
+    invalidateInstances();
 }
 
 SVGSVGElement* SVGElement::ownerSVGElement() const
@@ -713,7 +713,7 @@ void SVGElement::finishParsingChildren()
 
     // Notify all the elements which have references to this element to rebuild their shadow and render
     // trees, e.g. a <use> element references a target element before this target element is defined.
-    SVGElementInstance::invalidateAllInstancesOfElement(this);
+    invalidateInstances();
 }
 
 bool SVGElement::childShouldCreateRenderer(const Node& child) const
@@ -1044,13 +1044,13 @@ void SVGElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     CSSPropertyID propId = cssPropertyIdForSVGAttributeName(attrName);
     if (propId > 0) {
-        SVGElementInstance::invalidateAllInstancesOfElement(this);
+        invalidateInstances();
         return;
     }
 
     if (attrName == HTMLNames::classAttr) {
         classAttributeChanged(className());
-        SVGElementInstance::invalidateAllInstancesOfElement(this);
+        invalidateInstances();
         return;
     }
 
@@ -1061,7 +1061,7 @@ void SVGElement::svgAttributeChanged(const QualifiedName& attrName)
             downcast<RenderSVGResourceContainer>(*renderer).idChanged();
         if (inDocument())
             buildPendingResourcesIfNeeded();
-        SVGElementInstance::invalidateAllInstancesOfElement(this);
+        invalidateInstances();
         return;
     }
 }
@@ -1103,7 +1103,7 @@ void SVGElement::childrenChanged(const ChildChange& change)
 
     if (change.source == ChildChangeSourceParser)
         return;
-    SVGElementInstance::invalidateAllInstancesOfElement(this);
+    invalidateInstances();
 }
 
 RefPtr<CSSValue> SVGElement::getPresentationAttribute(const String& name)
@@ -1130,6 +1130,10 @@ bool SVGElement::instanceUpdatesBlocked() const
 
 void SVGElement::setInstanceUpdatesBlocked(bool value)
 {
+    // Catch any callers that calls setInstanceUpdatesBlocked(true) twice in a row.
+    // That probably indicates nested use of InstanceUpdateBlocker and a bug.
+    ASSERT(!value || !instanceUpdatesBlocked());
+
     if (m_svgRareData)
         m_svgRareData->setInstanceUpdatesBlocked(value);
 }
@@ -1201,4 +1205,30 @@ void SVGElement::accessKeyAction(bool sendMouseEvents)
     dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEvents);
 }
 
+void SVGElement::invalidateInstances()
+{
+    if (!inDocument())
+        return;
+
+    if (instanceUpdatesBlocked())
+        return;
+
+    auto& instances = this->instances();
+    if (instances.isEmpty())
+        return;
+
+    // Mark all use elements referencing 'element' for rebuilding
+    do {
+        SVGElement* instance = *instances.begin();
+        if (SVGUseElement* element = instance->correspondingUseElement()) {
+            ASSERT(element->inDocument());
+            element->invalidateShadowTree();
+        }
+        instance->setCorrespondingElement(nullptr);
+    } while (!instances.isEmpty());
+
+    // FIXME: Why is this needed?
+    document().updateStyleIfNeeded();
+}
+
 }
index 5c85ca7bd0e58e9a6175bcb3f311bf6a20cd9919..a8c8edf2318757927ec0ec86babd63a08a5533ec 100644 (file)
@@ -155,6 +155,8 @@ public:
 
     void callClearTarget() { clearTarget(); }
 
+    class InstanceUpdateBlocker;
+
 protected:
     SVGElement(const QualifiedName&, Document&);
     virtual ~SVGElement();
@@ -183,6 +185,8 @@ protected:
     void updateRelativeLengthsInformation() { updateRelativeLengthsInformation(selfHasRelativeLengths(), this); }
     void updateRelativeLengthsInformation(bool hasRelativeLengths, SVGElement*);
 
+    class InstanceInvalidationGuard;
+
 private:
     friend class SVGElementInstance;
 
@@ -200,6 +204,8 @@ private:
     virtual bool filterOutAnimatableAttribute(const QualifiedName&) const;
 #endif
 
+    void invalidateInstances();
+
     std::unique_ptr<SVGElementRareData> m_svgRareData;
 
     HashSet<SVGElement*> m_elementsWithRelativeLengths;
@@ -210,6 +216,22 @@ private:
 
 };
 
+class SVGElement::InstanceInvalidationGuard {
+public:
+    InstanceInvalidationGuard(SVGElement&);
+    ~InstanceInvalidationGuard();
+private:
+    SVGElement& m_element;
+};
+
+class SVGElement::InstanceUpdateBlocker {
+public:
+    InstanceUpdateBlocker(SVGElement&);
+    ~InstanceUpdateBlocker();
+private:
+    SVGElement& m_element;
+};
+
 struct SVGAttributeHashTranslator {
     static unsigned hash(const QualifiedName& key)
     {
@@ -222,6 +244,28 @@ struct SVGAttributeHashTranslator {
     static bool equal(const QualifiedName& a, const QualifiedName& b) { return a.matches(b); }
 };
 
+inline SVGElement::InstanceInvalidationGuard::InstanceInvalidationGuard(SVGElement& element)
+    : m_element(element)
+{
+}
+
+inline SVGElement::InstanceInvalidationGuard::~InstanceInvalidationGuard()
+{
+    m_element.invalidateInstances();
+}
+
+inline SVGElement::InstanceUpdateBlocker::InstanceUpdateBlocker(SVGElement& element)
+    : m_element(element)
+{
+    m_element.setInstanceUpdatesBlocked(true);
+}
+
+inline SVGElement::InstanceUpdateBlocker::~InstanceUpdateBlocker()
+{
+    ASSERT(m_element.instanceUpdatesBlocked());
+    m_element.setInstanceUpdatesBlocked(false);
+}
+
 inline bool Node::hasTagName(const SVGQualifiedName& name) const
 {
     return isSVGElement() && downcast<SVGElement>(*this).hasTagName(name);
index abdf58faf8b4aee04bb571edcb3ec435489c49fc..0efcf2b085e36c44d965b00166c995709196887f 100644 (file)
@@ -167,31 +167,6 @@ void SVGElementInstance::appendChild(PassRefPtr<SVGElementInstance> child)
     appendChildToContainer<SVGElementInstance, SVGElementInstance>(child.get(), *this);
 }
 
-void SVGElementInstance::invalidateAllInstancesOfElement(SVGElement* element)
-{
-    if (!element || !element->inDocument())
-        return;
-
-    if (element->instanceUpdatesBlocked())
-        return;
-
-    auto& instances = element->instances();
-    if (instances.isEmpty())
-        return;
-
-    // Mark all use elements referencing 'element' for rebuilding
-    do {
-        SVGElement* instance = *instances.begin();
-        if (SVGUseElement* element = instance->correspondingUseElement()) {
-            ASSERT(element->inDocument());
-            element->invalidateShadowTree();
-        }
-        instance->setCorrespondingElement(nullptr);
-    } while (!instances.isEmpty());
-
-    element->document().updateStyleIfNeeded();
-}
-
 EventTargetInterface SVGElementInstance::eventTargetInterface() const
 {
     return SVGElementInstanceEventTargetInterfaceType;
@@ -240,17 +215,4 @@ EventTargetData& SVGElementInstance::ensureEventTargetData()
     return *eventTargetData();
 }
 
-SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker(SVGElement* targetElement)
-    : m_targetElement(targetElement)
-{
-    if (m_targetElement)
-        m_targetElement->setInstanceUpdatesBlocked(true);
-}
-
-SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker()
-{
-    if (m_targetElement)
-        m_targetElement->setInstanceUpdatesBlocked(false);
-}
-   
 }
index 54129794faae3aec72d5f6a415b2699464abe81e..8013022fe3e13dc035dee46718f31f54804ffa0b 100644 (file)
@@ -71,27 +71,6 @@ public:
 
     Document* ownerDocument() const;
 
-    class InvalidationGuard {
-        WTF_MAKE_NONCOPYABLE(InvalidationGuard);
-    public:    
-        InvalidationGuard(SVGElement* element) : m_element(element) { }
-        ~InvalidationGuard() { SVGElementInstance::invalidateAllInstancesOfElement(m_element); }
-    private:
-        SVGElement* m_element;
-    };
-
-    class InstanceUpdateBlocker {
-        WTF_MAKE_NONCOPYABLE(InstanceUpdateBlocker);
-    public:
-        InstanceUpdateBlocker(SVGElement* targetElement);
-        ~InstanceUpdateBlocker();
-
-    private:
-        SVGElement* m_targetElement;
-    };
-    
-    static void invalidateAllInstancesOfElement(SVGElement*);
-
     using TreeShared<SVGElementInstance>::ref;
     using TreeShared<SVGElementInstance>::deref;
 
index 437ee060314411cb4919c69f1a5f3665e89f300e..2e85947fe69bbd7ce27721614f8686bce93e0e8b 100644 (file)
@@ -108,7 +108,7 @@ void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::cxAttr
         || attrName == SVGNames::cyAttr
index 5b20570d7e1037dd8311158c8729e562c43012c8..482f2eb1fdcd4f084b4f8411c1da4daf7586c8a0 100644 (file)
@@ -111,7 +111,7 @@ void SVGFEBlendElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::modeAttr) {
         primitiveAttributeChanged(attrName);
index c9dc44861c194072d8a91aa4a68eda2a7e044d03..3ba36cfcf75f4db99445270df2df5bb99bfb8d19 100644 (file)
@@ -115,7 +115,7 @@ void SVGFEColorMatrixElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::typeAttr || attrName == SVGNames::valuesAttr) {
         primitiveAttributeChanged(attrName);
index 196a24d8abae9e3e46cc7fe2c7cfeb1ac5fc5447..ab60d6d2899f70c92438080a565bea97c3865987 100644 (file)
@@ -151,7 +151,7 @@ void SVGFECompositeElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::operatorAttr
         || attrName == SVGNames::k1Attr
index 3ffda2a42574a6676e261d71c42675155fcfcb83..981e9e924667382bcd64a4b7ff0b62084f3a5088 100644 (file)
@@ -257,7 +257,7 @@ void SVGFEConvolveMatrixElement::svgAttributeChanged(const QualifiedName& attrNa
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::edgeModeAttr
         || attrName == SVGNames::divisorAttr
index 0d99084fcb84c7eee32588f5944271d37b1e2555..43bf90fe41bdad4904b5e9718722fe6bb41bbd87 100644 (file)
@@ -174,7 +174,7 @@ void SVGFEDiffuseLightingElement::svgAttributeChanged(const QualifiedName& attrN
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::surfaceScaleAttr
         || attrName == SVGNames::diffuseConstantAttr
index 23cd46278512a795943be8c1463c83d15d4435b5..513c6755434ec374e3d2068abfe749efc1f93f73 100644 (file)
@@ -132,7 +132,7 @@ void SVGFEDisplacementMapElement::svgAttributeChanged(const QualifiedName& attrN
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::xChannelSelectorAttr || attrName == SVGNames::yChannelSelectorAttr || attrName == SVGNames::scaleAttr) {
         primitiveAttributeChanged(attrName);
index 4119a922f113234cd92e854db4b521ba52a0c27d..7c32a5e464f0aa73a5836a52f9fb7008a2391cc2 100644 (file)
@@ -135,7 +135,7 @@ void SVGFEDropShadowElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::inAttr
         || attrName == SVGNames::stdDeviationAttr
index d3d21a58d99a45b7381827f57b8bc028cf973fe5..3ee52112d2bf4b4b2bd3d3014223d6877d1768bf 100644 (file)
@@ -130,7 +130,7 @@ void SVGFEGaussianBlurElement::svgAttributeChanged(const QualifiedName& attrName
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::inAttr
         || attrName == SVGNames::stdDeviationAttr
index 06c5ef77a7117d7c2bccc69467f75049ab22167f..74e3bf10bb626590ca97af779c7455b35ab0bccc 100644 (file)
@@ -155,7 +155,7 @@ void SVGFEImageElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::preserveAspectRatioAttr) {
         invalidate();
index 7ff13a05bd7083c0f22ede0affb6e1511cfa2795..25f65777e06a858c5d4224139244622eb7f0094f 100644 (file)
@@ -170,7 +170,7 @@ void SVGFELightElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::azimuthAttr
         || attrName == SVGNames::elevationAttr
index a912287b1857b9ecd6a955c9cdc5965b37ae12f2..3263b22a01c8617d00ef749d077fea8efc78ce66 100644 (file)
@@ -81,7 +81,7 @@ void SVGFEMergeNodeElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::inAttr) {
         invalidateFilterPrimitiveParent(this);
index 94f24ef39e57972e42f852f84c9271172306eaf2..afda13dd41c38d200048bfedc85f6935ddcf9040 100644 (file)
@@ -141,7 +141,7 @@ void SVGFEMorphologyElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::operatorAttr || attrName == SVGNames::radiusAttr) {
         primitiveAttributeChanged(attrName);
index 4811b2ef2ecd70f57c5f4507fbd050f71cf27638..a4e3a4c99c03fb0f9a036ef847b596d0a949705c 100644 (file)
@@ -97,7 +97,7 @@ void SVGFEOffsetElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::inAttr || attrName == SVGNames::dxAttr || attrName == SVGNames::dyAttr) {
         invalidate();
index b72be20d935537e8163646f5d587d400308778c4..8224c2972fef7f9a8895c6db4181e1cc9c13517f 100644 (file)
@@ -185,7 +185,7 @@ void SVGFESpecularLightingElement::svgAttributeChanged(const QualifiedName& attr
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::surfaceScaleAttr
         || attrName == SVGNames::specularConstantAttr
index cc017428841568da3e7339efcf2f5eb45b4b6eb4..134217dd724961bbf737bb86e27f213084ec52f3 100644 (file)
@@ -81,7 +81,7 @@ void SVGFETileElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::inAttr) {
         invalidate();
index 8a344041598d0acaced5a3c2ceabcb7f657f24c9..b0de26d7528da575af0250491fb5791656796859 100644 (file)
@@ -155,7 +155,7 @@ void SVGFETurbulenceElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::baseFrequencyAttr
         || attrName == SVGNames::numOctavesAttr
index f8077520430fa9369946ffcd4674a1dbfa7dbb2a..ad9ac0274f4374a20c97de99b79fb63e88f3e47b 100644 (file)
@@ -165,7 +165,7 @@ void SVGFilterElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::xAttr
         || attrName == SVGNames::yAttr
index 528162cc6033aff31243e98f8715fe7d33073e98..ac4d7f2b2d12fc9c0ebe18833ecfdd22ee52bee9 100644 (file)
@@ -112,7 +112,7 @@ void SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(const QualifiedNa
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);    
+    InstanceInvalidationGuard guard(*this);
     invalidate();
 }
 
index 51040d0fbd61dcfd946ebdca0713be8ccb523abe..3ab68cddd7aea3656350165ee783d0fec14b6ffd 100644 (file)
@@ -112,7 +112,7 @@ void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::widthAttr
         || attrName == SVGNames::heightAttr) {
index 41714f4cb13f40504c224df2d8fcf7ead60e7133..3c44b2af07e9cc71d2b3b0a6517f960107854518 100644 (file)
@@ -82,7 +82,7 @@ void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (auto renderer = this->renderer())
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
index 543eef363d8dfb03bcbb60c348f8081c7ba2e02d..451c9bf641cce3b7142894bd1faa620339fd8564 100644 (file)
@@ -119,7 +119,7 @@ void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (RenderObject* object = renderer())
         object->setNeedsLayout();
index c0ee663a7771af8fb3561f3e411c2bd0450189ce..fca68fac338c76c432a004b5154a1def4e1205e5 100644 (file)
@@ -137,7 +137,7 @@ void SVGGraphicsElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (SVGTests::handleAttributeChange(this, attrName))
         return;
index 92266a10786b20b980540f9a9f3c4ae547daa1c8..b66848aa18abcb64e13ba17c8bfe7be82c2f3117 100644 (file)
@@ -122,7 +122,7 @@ void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::widthAttr
         || attrName == SVGNames::heightAttr) {
index 2a688e60ce0e87fcad3ae0cadb6e601d21acbbd1..3416e9d6c403d569cdbcf4284aefff63fa3fb1a1 100644 (file)
@@ -107,7 +107,7 @@ void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     bool isLengthAttribute = attrName == SVGNames::x1Attr
                           || attrName == SVGNames::y1Attr
index faafd23f681fb08dee2d3ecd9542288c5a9df2ab..baf71bf1d4f0609e1484a58c373570e46a992702 100644 (file)
@@ -109,7 +109,7 @@ void SVGLinearGradientElement::svgAttributeChanged(const QualifiedName& attrName
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     updateRelativeLengthsInformation();
 
index 2b37c5149975a4ff4990df61b55be8213e42264b..ce683935020576b595ad0a12d7af0a928e41581b 100644 (file)
@@ -140,7 +140,7 @@ void SVGMPathElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (SVGURIReference::isKnownAttribute(attrName)) {
         buildPendingResource();
index 064807a4e14a9ad2f12e9212fe382114d6179c3c..bbffdc1ecb8c036d563e5b81a6ca934208e5806c 100644 (file)
@@ -166,7 +166,7 @@ void SVGMarkerElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     if (attrName == SVGNames::refXAttr
         || attrName == SVGNames::refYAttr
index 56cba9d6d0bc16e98bb34d839529df17746f586e..cb311245f2a301cbb50a50f55233e1f79f465474 100644 (file)
@@ -134,7 +134,7 @@ void SVGMaskElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::xAttr
         || attrName == SVGNames::yAttr
index c1a6009feeae2f886d8ad82c0508ccf0d00ec9d8..1368642774c31a056d917a879dde0bd487e04a6c 100644 (file)
@@ -259,7 +259,7 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     RenderSVGPath* renderer = downcast<RenderSVGPath>(this->renderer());
 
index 3bc42561582b25a3e39bdc8d9e58fae32ae3abc0..14a57577b048e90462162ab3b2607a1f3d9a6a8f 100644 (file)
@@ -159,7 +159,7 @@ void SVGPatternElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::xAttr
         || attrName == SVGNames::yAttr
index 85882e5c23306be6afc08270f377ee230ebbb5c2..8819c6c2ab330743101513338a5f00872b5e0b0a 100644 (file)
@@ -109,7 +109,7 @@ void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     auto* renderer = downcast<RenderSVGShape>(this->renderer());
     if (!renderer)
index 677ecaa8374badbec0b94527a14c00fdc6415730..93de928f6babe5855b3feba54d26bfa468eb90c1 100644 (file)
@@ -121,7 +121,7 @@ void SVGRadialGradientElement::svgAttributeChanged(const QualifiedName& attrName
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
     
     updateRelativeLengthsInformation();
         
index 812ba2647f549c2331ad763b332202a42902a8c7..07f450475fe452b63061d300425508bcd52d399f 100644 (file)
@@ -120,7 +120,7 @@ void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::xAttr
         || attrName == SVGNames::yAttr
index 9ed136e65718b27d6791072b9ff99c667b293c0d..eb8a024073cffe3dd6ac49e92f61fd6a56d59971 100644 (file)
@@ -300,7 +300,7 @@ void SVGSVGElement::svgAttributeChanged(const QualifiedName& attrName)
             object->setNeedsTransformUpdate();
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (updateRelativeLengthsOrViewBox
         || SVGLangSpace::isKnownAttribute(attrName)
index b3fcb5ed596f0bea5587f73516988cba6a60fcac..22b42b08016855c64dacdfd87df7323e837c4d9a 100644 (file)
@@ -98,7 +98,7 @@ void SVGScriptElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::typeAttr || attrName == HTMLNames::onerrorAttr)
         return;
index b0e58e04010f662b6cd96c22f9113e8bb7106039..9e8b0399aa1debe604bce9cc736b776ddd4e5ef5 100644 (file)
@@ -86,7 +86,7 @@ void SVGStopElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::offsetAttr) {
         if (auto renderer = this->renderer())
index 9f96de11394e606e544ff423544987b5add9b945..46147ed8457976a1b6d16991429f7ec8fdfd7d06 100644 (file)
@@ -88,7 +88,7 @@ void SVGSymbolElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     // Every other property change is ignored.
     if (attrName == SVGNames::viewBoxAttr)
index e26af46f5838a6e4d1e992af19f08dd48311bbf0..75faaa9cb7bb048363665bdae832933e17194cda 100644 (file)
@@ -206,7 +206,7 @@ void SVGTRefElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (SVGURIReference::isKnownAttribute(attrName)) {
         buildPendingResource();
index 2c64a0ed9d88542ebabc66e8a164847edef5a495..7923c0e1015c22db64b8cc006c829f6367ee90c1 100644 (file)
@@ -268,7 +268,7 @@ void SVGTextContentElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::textLengthAttr)
         m_specifiedTextLength = m_textLength.value;
index d1d4cd33595ddf1572304a3858e3be3055f4b9e9..e0f8bca5931a28f28aa0984ecc1e321a75c54c7f 100644 (file)
@@ -112,7 +112,7 @@ void SVGTextPathElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (SVGURIReference::isKnownAttribute(attrName)) {
         buildPendingResource();
index bb1274613dc7abc83ab517afa3efa47ce0cf224f..05362d3559c920551a988fec9a8be4a539762009 100644 (file)
@@ -141,7 +141,7 @@ void SVGTextPositioningElement::svgAttributeChanged(const QualifiedName& attrNam
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     bool updateRelativeLengths = attrName == SVGNames::xAttr
                               || attrName == SVGNames::yAttr
index d00ccdedbadf036d476051f0f9912a5cfc1b0b70..c7b2f31dd6dddb759cde24a6f2a1dce979b6f384 100644 (file)
@@ -223,7 +223,7 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    SVGElementInstance::InvalidationGuard invalidationGuard(this);
+    InstanceInvalidationGuard guard(*this);
 
     if (attrName == SVGNames::xAttr || attrName == SVGNames::yAttr || attrName == SVGNames::widthAttr || attrName == SVGNames::heightAttr) {
         updateRelativeLengthsInformation();
index c29922de94488d70a9424c0351b8e7f9988c618e..bd14a7b90cb9cf0504bab8b10db717495fb84bd2 100644 (file)
@@ -499,7 +499,7 @@ void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName)
     else if (attrName == SVGNames::attributeNameAttr)
         setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames::attributeNameAttr)));
     else if (attrName.matches(XLinkNames::hrefAttr)) {
-        SVGElementInstance::InvalidationGuard invalidationGuard(this);
+        InstanceInvalidationGuard guard(*this);
         buildPendingResource();
     } else if (inDocument()) {
         if (attrName == SVGNames::beginAttr)