WebKit Bugzilla
Attachment 346601 Details for
Bug 186751
: Remove the SVG elements' attributes macros
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Memory shrinking patch
186751-90.patch (text/plain), 165.77 KB, created by
Said Abou-Hallawa
on 2018-08-05 10:28:50 PDT
(
hide
)
Description:
Memory shrinking patch
Filename:
MIME Type:
Creator:
Said Abou-Hallawa
Created:
2018-08-05 10:28:50 PDT
Size:
165.77 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index eb120865746..976fc7bf520 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,135 @@ >+2018-08-05 Said Abou-Hallawa <sabouhallawa@apple.com> >+ >+ [90] Remove the SVG elements' attributes macros >+ https://bugs.webkit.org/show_bug.cgi?id=186751 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Memory shrinking patch. >+ >+ -- With the SVG macros, the size of SVGRectElement is 400 bytes. >+ -- Without the SVG macros, the size of SVGRectElement is 784 bytes. >+ -- With this patch, the size of SVGRectElement is 568 bytes. >+ >+ The macros was repeating code which made the class size smaller. Removing >+ the SVG macros, added SVGAttributeOwnerProxy which removes repeated code >+ but made the class size bigger. >+ >+ -- Remove the reference to SVGAttributeOwnerProxy from SVGPropertyAttribute. >+ Instead pass a reference to SVGAttributeOwnerProxy to the functions >+ that use it from the SVGElemnet and its super classes. >+ -- Remove the SVGAttributeOwnerProxy from the non SVGElement based classes. >+ It can be created as a temporary object and does not have to be a member >+ of the class. >+ >+ * WebCore.xcodeproj/project.pbxproj: >+ * svg/SVGAElement.h: >+ * svg/SVGCircleElement.h: >+ * svg/SVGClipPathElement.h: >+ * svg/SVGComponentTransferFunctionElement.cpp: >+ (WebCore::SVGComponentTransferFunctionElement::parseAttribute): >+ * svg/SVGComponentTransferFunctionElement.h: >+ * svg/SVGCursorElement.h: >+ * svg/SVGElement.h: >+ * svg/SVGEllipseElement.h: >+ * svg/SVGExternalResourcesRequired.cpp: >+ (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired): >+ * svg/SVGExternalResourcesRequired.h: >+ * svg/SVGFEBlendElement.h: >+ * svg/SVGFEColorMatrixElement.cpp: >+ (WebCore::SVGFEColorMatrixElement::parseAttribute): >+ * svg/SVGFEColorMatrixElement.h: >+ * svg/SVGFEComponentTransferElement.h: >+ * svg/SVGFECompositeElement.h: >+ * svg/SVGFEConvolveMatrixElement.cpp: >+ (WebCore::SVGFEConvolveMatrixElement::parseAttribute): >+ * 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: >+ * svg/SVGFitToViewBox.cpp: >+ (WebCore::SVGFitToViewBox::SVGFitToViewBox): >+ (WebCore::SVGFitToViewBox::parseViewBox): >+ * svg/SVGFitToViewBox.h: >+ * svg/SVGForeignObjectElement.h: >+ * svg/SVGGeometryElement.h: >+ * svg/SVGGradientElement.cpp: >+ (WebCore::SVGGradientElement::parseAttribute): >+ * svg/SVGGradientElement.h: >+ * svg/SVGGraphicsElement.cpp: >+ (WebCore::SVGGraphicsElement::registerAttributes): >+ * svg/SVGGraphicsElement.h: >+ * svg/SVGImageElement.h: >+ * svg/SVGLangSpace.cpp: >+ (WebCore::SVGLangSpace::SVGLangSpace): >+ * svg/SVGLangSpace.h: >+ * svg/SVGLineElement.h: >+ * svg/SVGLinearGradientElement.h: >+ * svg/SVGMarkerElement.h: >+ * svg/SVGMaskElement.h: >+ * svg/SVGPathElement.cpp: >+ (WebCore::SVGPathElement::lookupOrCreateDWrapper): >+ * svg/SVGPathElement.h: >+ * svg/SVGPatternElement.cpp: >+ (WebCore::SVGPatternElement::parseAttribute): >+ * svg/SVGPatternElement.h: >+ * svg/SVGPolyElement.h: >+ * svg/SVGRadialGradientElement.h: >+ * svg/SVGRectElement.h: >+ * svg/SVGSVGElement.cpp: >+ (WebCore::SVGSVGElement::SVGSVGElement): >+ * svg/SVGSVGElement.h: >+ * svg/SVGStopElement.h: >+ * svg/SVGTests.cpp: >+ (WebCore::SVGTests::SVGTests): >+ * svg/SVGTests.h: >+ * svg/SVGTextContentElement.h: >+ * svg/SVGTextPathElement.h: >+ * svg/SVGTextPositioningElement.cpp: >+ (WebCore::SVGTextPositioningElement::parseAttribute): >+ * svg/SVGTextPositioningElement.h: >+ * svg/SVGURIReference.cpp: >+ (WebCore::SVGURIReference::SVGURIReference): >+ (WebCore::SVGURIReference::parseAttribute): >+ (WebCore::SVGURIReference::href const): >+ (WebCore::SVGURIReference::hrefAnimated): >+ * svg/SVGURIReference.h: >+ * svg/SVGUseElement.h: >+ * svg/SVGViewElement.cpp: >+ (WebCore::SVGViewElement::SVGViewElement): >+ * svg/SVGViewSpec.cpp: >+ (WebCore::SVGViewSpec::SVGViewSpec): >+ (WebCore::SVGViewSpec::transform): >+ * svg/SVGViewSpec.h: >+ * svg/SVGZoomAndPan.cpp: >+ (WebCore::SVGZoomAndPan::SVGZoomAndPan): >+ * svg/SVGZoomAndPan.h: >+ * svg/properties/SVGAttribute.h: >+ (WebCore::SVGPropertyAttribute::SVGPropertyAttribute): >+ (WebCore::SVGAnimatedAttribute::SVGAnimatedAttribute): >+ (WebCore::SVGAnimatedAttribute::currentValue const): >+ (WebCore::SVGAnimatedAttribute::animatedProperty): >+ (WebCore::SVGAnimatedAttributeList::SVGAnimatedAttributeList): >+ (WebCore::SVGAnimatedAttributeList::detachAnimatedListWrappers): >+ * svg/properties/SVGAttributeAccessor.h: Added. >+ * svg/properties/SVGAttributeOwnerProxy.h: >+ * svg/properties/SVGAttributeOwnerProxyImpl.h: Added. >+ (WebCore::SVGAttributeOwnerProxyImpl::SVGAttributeOwnerProxyImpl): >+ (WebCore::SVGAttributeOwnerProxyImpl::attributeRegistry): >+ (WebCore::SVGAttributeOwnerProxyImpl::isKnownAttribute): >+ (WebCore::SVGAttributeOwnerProxyImpl::isAnimatedLengthAttribute): >+ > 2018-08-03 Said Abou-Hallawa <sabouhallawa@apple.com> > > Remove the SVG elements' attributes macros >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index f9c50dd6566..52466e38d55 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -1708,6 +1708,7 @@ > 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, ); }; }; >@@ -8376,6 +8377,7 @@ > 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>"; }; > 55137B34203CEB710001004B /* SVGValue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGValue.h; sourceTree = "<group>"; }; >+ 55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeOwnerProxy.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>"; }; >@@ -8394,7 +8396,7 @@ > 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>"; }; >- 55FA7FF9210FDB34005AEFE7 /* SVGAttributeOwnerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeOwnerProxy.h; sourceTree = "<group>"; }; >+ 55FA7FF9210FDB34005AEFE7 /* SVGAttributeOwnerProxyImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeOwnerProxyImpl.h; sourceTree = "<group>"; }; > 55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGZoomAndPanType.h; sourceTree = "<group>"; }; > 55FA7FFC2110F813005AEFE7 /* SVGAnimatedPathSegListPropertyTearOff.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedPathSegListPropertyTearOff.cpp; sourceTree = "<group>"; }; > 55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyType.h; sourceTree = "<group>"; }; >@@ -15462,7 +15464,8 @@ > 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */, > 55FA7FEF210FA386005AEFE7 /* SVGAttribute.h */, > 55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */, >- 55FA7FF9210FDB34005AEFE7 /* SVGAttributeOwnerProxy.h */, >+ 55346AF021150FAF0059BCDD /* SVGAttributeOwnerProxy.h */, >+ 55FA7FF9210FDB34005AEFE7 /* SVGAttributeOwnerProxyImpl.h */, > 55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */, > 0810764312828556007C63BA /* SVGListProperty.h */, > 088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */, >@@ -28536,6 +28539,7 @@ > 142011B70A003133008303F9 /* JSCSSStyleDeclaration.h in Headers */, > AD726FED16DA1171003A4E6D /* JSCSSStyleDeclarationCustom.h in Headers */, > BC46C2070C0DDCA10020CFC3 /* JSCSSStyleRule.h in Headers */, >+ 55346AF121150FAF0059BCDD /* SVGAttributeOwnerProxy.h in Headers */, > BCC5BE010C0E93110011C2DB /* JSCSSStyleSheet.h in Headers */, > FC54D05816A7676E00575E4D /* JSCSSSupportsRule.h in Headers */, > 9BD4E9171C462872005065BC /* JSCustomElementInterface.h in Headers */, >@@ -29890,8 +29894,6 @@ > 3C244FEAA375AC633F88BE6F /* RenderLayerModelObject.h in Headers */, > 0BE030A20F3112FB003C1A46 /* RenderLineBoxList.h in Headers */, > BCEA4864097D93020094C9E4 /* RenderLineBreak.h in Headers */, >- 94CFD60A1FE9867E002488AD /* RenderLinesClampFlow.h in Headers */, >- 94CFD60D1FEACEFE002488AD /* RenderLinesClampSet.h in Headers */, > ABB5419F0ACDDFE4002820EB /* RenderListBox.h in Headers */, > A8EA7A520A191A5200A8EF5F /* RenderListItem.h in Headers */, > A8EA7A500A191A5200A8EF5F /* RenderListMarker.h in Headers */, >diff --git a/Source/WebCore/svg/SVGAElement.h b/Source/WebCore/svg/SVGAElement.h >index 348f5cb825a..d41ad0b3522 100644 >--- a/Source/WebCore/svg/SVGAElement.h >+++ b/Source/WebCore/svg/SVGAElement.h >@@ -33,8 +33,8 @@ class SVGAElement final : public SVGGraphicsElement, public SVGExternalResources > public: > static Ref<SVGAElement> create(const QualifiedName&, Document&); > >- String target() const final { return m_target.currentValue(); } >- RefPtr<SVGAnimatedString> targetAnimated() { return m_target.animatedProperty(); } >+ String target() const final { return m_target.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> targetAnimated() { return m_target.animatedProperty(attributeOwnerProxy()); } > > private: > SVGAElement(const QualifiedName&, Document&); >@@ -64,7 +64,7 @@ private: > bool willRespondToMouseClickEvents() final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_target { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_target; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGCircleElement.h b/Source/WebCore/svg/SVGCircleElement.h >index 2b71c894731..65c7b465b51 100644 >--- a/Source/WebCore/svg/SVGCircleElement.h >+++ b/Source/WebCore/svg/SVGCircleElement.h >@@ -33,13 +33,13 @@ class SVGCircleElement final : public SVGGeometryElement, public SVGExternalReso > public: > static Ref<SVGCircleElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& cx() const { return m_cx.currentValue(); } >- const SVGLengthValue& cy() const { return m_cy.currentValue(); } >- const SVGLengthValue& r() const { return m_r.currentValue(); } >+ const SVGLengthValue& cx() const { return m_cx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& cy() const { return m_cy.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& r() const { return m_r.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(); } >- RefPtr<SVGAnimatedLength> rAnimated() { return m_r.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> rAnimated() { return m_r.animatedProperty(attributeOwnerProxy()); } > > private: > SVGCircleElement(const QualifiedName&, Document&); >@@ -59,9 +59,9 @@ private: > RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_cx { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_cy { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_r { m_attributeOwnerProxy, LengthModeOther }; >+ SVGAnimatedLengthAttribute m_cx { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_cy { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_r { LengthModeOther }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGClipPathElement.h b/Source/WebCore/svg/SVGClipPathElement.h >index c8766234def..63b6bde0e24 100644 >--- a/Source/WebCore/svg/SVGClipPathElement.h >+++ b/Source/WebCore/svg/SVGClipPathElement.h >@@ -36,8 +36,8 @@ class SVGClipPathElement final : public SVGGraphicsElement, public SVGExternalRe > public: > static Ref<SVGClipPathElement> create(const QualifiedName&, Document&); > >- SVGUnitTypes::SVGUnitType clipPathUnits() const { return m_clipPathUnits.currentValue(); } >- RefPtr<SVGAnimatedEnumeration> clipPathUnitsAnimated() { return m_clipPathUnits.animatedProperty(); } >+ SVGUnitTypes::SVGUnitType clipPathUnits() const { return m_clipPathUnits.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> clipPathUnitsAnimated() { return m_clipPathUnits.animatedProperty(attributeOwnerProxy()); } > > private: > SVGClipPathElement(const QualifiedName&, Document&); >@@ -59,7 +59,7 @@ private: > RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_clipPathUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_clipPathUnits { SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp b/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp >index ccc2f9ed23e..4e2032bb217 100644 >--- a/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp >+++ b/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp >@@ -64,7 +64,7 @@ void SVGComponentTransferFunctionElement::parseAttribute(const QualifiedName& na > if (name == SVGNames::tableValuesAttr) { > SVGNumberListValues newList; > newList.parse(value); >- m_tableValues.detachAnimatedListWrappers(newList.size()); >+ m_tableValues.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_tableValues.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGComponentTransferFunctionElement.h b/Source/WebCore/svg/SVGComponentTransferFunctionElement.h >index 2354f00caa3..9f46becdfb4 100644 >--- a/Source/WebCore/svg/SVGComponentTransferFunctionElement.h >+++ b/Source/WebCore/svg/SVGComponentTransferFunctionElement.h >@@ -75,21 +75,21 @@ class SVGComponentTransferFunctionElement : public SVGElement { > public: > ComponentTransferFunction transferFunction() const; > >- ComponentTransferType type() const { return m_type.currentValue(); } >- const SVGNumberListValues& tableValues() const { return m_tableValues.currentValue(); } >- float slope() const { return m_slope.currentValue(); } >- float intercept() const { return m_intercept.currentValue(); } >- float amplitude() const { return m_amplitude.currentValue(); } >- float exponent() const { return m_exponent.currentValue(); } >- float offset() const { return m_offset.currentValue(); } >+ ComponentTransferType type() const { return m_type.currentValue(attributeOwnerProxy()); } >+ const SVGNumberListValues& tableValues() const { return m_tableValues.currentValue(attributeOwnerProxy()); } >+ float slope() const { return m_slope.currentValue(attributeOwnerProxy()); } >+ float intercept() const { return m_intercept.currentValue(attributeOwnerProxy()); } >+ float amplitude() const { return m_amplitude.currentValue(attributeOwnerProxy()); } >+ float exponent() const { return m_exponent.currentValue(attributeOwnerProxy()); } >+ float offset() const { return m_offset.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(); } >- RefPtr<SVGAnimatedNumberList> tableValuesAnimated() { return m_tableValues.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> slopeAnimated() { return m_slope.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> interceptAnimated() { return m_intercept.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> amplitudeAnimated() { return m_amplitude.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> exponentAnimated() { return m_exponent.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> offsetAnimated() { return m_offset.animatedProperty(); } >+ RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumberList> tableValuesAnimated() { return m_tableValues.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> slopeAnimated() { return m_slope.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> interceptAnimated() { return m_intercept.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> amplitudeAnimated() { return m_amplitude.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> exponentAnimated() { return m_exponent.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> offsetAnimated() { return m_offset.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGComponentTransferFunctionElement(const QualifiedName&, Document&); >@@ -107,13 +107,13 @@ protected: > > private: > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedEnumerationAttribute<ComponentTransferType> m_type { m_attributeOwnerProxy, FECOMPONENTTRANSFER_TYPE_IDENTITY }; >- SVGAnimatedNumberListAttribute m_tableValues { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_slope { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_intercept { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_amplitude { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_exponent { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_offset { m_attributeOwnerProxy }; >+ SVGAnimatedEnumerationAttribute<ComponentTransferType> m_type { FECOMPONENTTRANSFER_TYPE_IDENTITY }; >+ SVGAnimatedNumberListAttribute m_tableValues; >+ SVGAnimatedNumberAttribute m_slope { 1 }; >+ SVGAnimatedNumberAttribute m_intercept; >+ SVGAnimatedNumberAttribute m_amplitude { 1 }; >+ SVGAnimatedNumberAttribute m_exponent { 1 }; >+ SVGAnimatedNumberAttribute m_offset; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGCursorElement.h b/Source/WebCore/svg/SVGCursorElement.h >index 4586a20a0a4..2a71c62c0b6 100644 >--- a/Source/WebCore/svg/SVGCursorElement.h >+++ b/Source/WebCore/svg/SVGCursorElement.h >@@ -43,11 +43,11 @@ public: > void addClient(CSSCursorImageValue&); > void removeClient(CSSCursorImageValue&); > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } > > private: > SVGCursorElement(const QualifiedName&, Document&); >@@ -67,8 +67,8 @@ private: > void addSubresourceAttributeURLs(ListHashSet<URL>&) const final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; > HashSet<CSSCursorImageValue*> m_clients; > }; > >diff --git a/Source/WebCore/svg/SVGElement.h b/Source/WebCore/svg/SVGElement.h >index 08b544fc4e9..cf60b8dcdb7 100644 >--- a/Source/WebCore/svg/SVGElement.h >+++ b/Source/WebCore/svg/SVGElement.h >@@ -149,8 +149,8 @@ public: > Vector<RefPtr<SVGAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName& name) { return attributeOwnerProxy().lookupOrCreateAnimatedProperties(name); } > > // These are needed for the RenderTree, animation and DOM. >- const auto& className() const { return m_className.currentValue(); } >- auto classNameAnimated() { return m_className.animatedProperty(); } >+ const auto& className() const { return m_className.currentValue(attributeOwnerProxy()); } >+ auto classNameAnimated() { return m_className.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGElement(const QualifiedName&, Document&); >@@ -201,7 +201,7 @@ private: > HashSet<SVGElement*> m_elementsWithRelativeLengths; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_className { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_className; > }; > > class SVGElement::InstanceInvalidationGuard { >diff --git a/Source/WebCore/svg/SVGEllipseElement.h b/Source/WebCore/svg/SVGEllipseElement.h >index 98951fd63e2..9daaea8cf8b 100644 >--- a/Source/WebCore/svg/SVGEllipseElement.h >+++ b/Source/WebCore/svg/SVGEllipseElement.h >@@ -33,15 +33,15 @@ class SVGEllipseElement final : public SVGGeometryElement, public SVGExternalRes > public: > static Ref<SVGEllipseElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& cx() const { return m_cx.currentValue(); } >- const SVGLengthValue& cy() const { return m_cy.currentValue(); } >- const SVGLengthValue& rx() const { return m_rx.currentValue(); } >- const SVGLengthValue& ry() const { return m_ry.currentValue(); } >+ const SVGLengthValue& cx() const { return m_cx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& cy() const { return m_cy.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& rx() const { return m_rx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& ry() const { return m_ry.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(); } >- RefPtr<SVGAnimatedLength> rxAnimated() { return m_rx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> ryAnimated() { return m_ry.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> rxAnimated() { return m_rx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> ryAnimated() { return m_ry.animatedProperty(attributeOwnerProxy()); } > > private: > SVGEllipseElement(const QualifiedName&, Document&); >@@ -52,7 +52,6 @@ private: > static void registerAttributes(); > > const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; } >- > void parseAttribute(const QualifiedName&, const AtomicString&) final; > void svgAttributeChanged(const QualifiedName&) final; > >@@ -62,10 +61,10 @@ private: > RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_cx { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_cy { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_rx { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_ry { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_cx { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_cy { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_rx { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_ry { LengthModeHeight }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGExternalResourcesRequired.cpp b/Source/WebCore/svg/SVGExternalResourcesRequired.cpp >index bcea635715b..3a1e56dd623 100644 >--- a/Source/WebCore/svg/SVGExternalResourcesRequired.cpp >+++ b/Source/WebCore/svg/SVGExternalResourcesRequired.cpp >@@ -29,7 +29,6 @@ namespace WebCore { > > SVGExternalResourcesRequired::SVGExternalResourcesRequired(SVGElement* contextElement) > : m_contextElement(*contextElement) >- , m_attributeOwnerProxy(*this, *contextElement) > { > registerAttributes(); > } >diff --git a/Source/WebCore/svg/SVGExternalResourcesRequired.h b/Source/WebCore/svg/SVGExternalResourcesRequired.h >index d24d79a4b28..d25507ad07e 100644 >--- a/Source/WebCore/svg/SVGExternalResourcesRequired.h >+++ b/Source/WebCore/svg/SVGExternalResourcesRequired.h >@@ -22,7 +22,7 @@ > #pragma once > > #include "QualifiedName.h" >-#include "SVGAttributeOwnerProxy.h" >+#include "SVGAttributeOwnerProxyImpl.h" > #include <wtf/HashSet.h> > > namespace WebCore { >@@ -47,7 +47,7 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGExternalResourcesRequired>; > static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- auto externalResourcesRequiredAnimated() { return m_externalResourcesRequired.animatedProperty(); } >+ auto externalResourcesRequiredAnimated() { return m_externalResourcesRequired.animatedProperty(attributeOwnerProxy()); } > > bool externalResourcesRequired() const { return m_externalResourcesRequired.value(); } > void setExternalResourcesRequired(bool externalResourcesRequired) { m_externalResourcesRequired.setValue(externalResourcesRequired); } >@@ -68,10 +68,10 @@ protected: > > private: > static void registerAttributes(); >- >+ AttributeOwnerProxy attributeOwnerProxy() { return { *this, m_contextElement }; } >+ > SVGElement& m_contextElement; >- AttributeOwnerProxy m_attributeOwnerProxy; >- SVGAnimatedBooleanAttribute m_externalResourcesRequired { m_attributeOwnerProxy }; >+ SVGAnimatedBooleanAttribute m_externalResourcesRequired; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEBlendElement.h b/Source/WebCore/svg/SVGFEBlendElement.h >index 117961b3dda..32a48c6ff84 100644 >--- a/Source/WebCore/svg/SVGFEBlendElement.h >+++ b/Source/WebCore/svg/SVGFEBlendElement.h >@@ -46,13 +46,13 @@ class SVGFEBlendElement final : public SVGFilterPrimitiveStandardAttributes { > public: > static Ref<SVGFEBlendElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- String in2() const { return m_in2.currentValue(); } >- BlendMode mode() const { return m_mode.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ String in2() const { return m_in2.currentValue(attributeOwnerProxy()); } >+ BlendMode mode() const { return m_mode.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> modeAnimated() { return m_mode.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> modeAnimated() { return m_mode.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEBlendElement(const QualifiedName&, Document&); >@@ -70,9 +70,9 @@ private: > bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedStringAttribute m_in2 { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<BlendMode> m_mode { m_attributeOwnerProxy, BlendModeNormal }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedStringAttribute m_in2; >+ SVGAnimatedEnumerationAttribute<BlendMode> m_mode { BlendModeNormal }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp >index 0cd04c0058e..515d32ffbcd 100644 >--- a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp >+++ b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp >@@ -70,7 +70,7 @@ void SVGFEColorMatrixElement::parseAttribute(const QualifiedName& name, const At > if (name == SVGNames::valuesAttr) { > SVGNumberListValues newList; > newList.parse(value); >- m_values.detachAnimatedListWrappers(newList.size()); >+ m_values.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_values.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGFEColorMatrixElement.h b/Source/WebCore/svg/SVGFEColorMatrixElement.h >index 60eddb462c7..47688ec869d 100644 >--- a/Source/WebCore/svg/SVGFEColorMatrixElement.h >+++ b/Source/WebCore/svg/SVGFEColorMatrixElement.h >@@ -70,13 +70,13 @@ class SVGFEColorMatrixElement final : public SVGFilterPrimitiveStandardAttribute > public: > static Ref<SVGFEColorMatrixElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- ColorMatrixType type() const { return m_type.currentValue(); } >- const SVGNumberListValues& values() const { return m_values.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ ColorMatrixType type() const { return m_type.currentValue(attributeOwnerProxy()); } >+ const SVGNumberListValues& values() const { return m_values.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(); } >- RefPtr<SVGAnimatedNumberList> valuesAnimated() { return m_values.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumberList> valuesAnimated() { return m_values.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEColorMatrixElement(const QualifiedName&, Document&); >@@ -94,9 +94,9 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<ColorMatrixType> m_type { m_attributeOwnerProxy, FECOLORMATRIX_TYPE_MATRIX }; >- SVGAnimatedNumberListAttribute m_values { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedEnumerationAttribute<ColorMatrixType> m_type { FECOLORMATRIX_TYPE_MATRIX }; >+ SVGAnimatedNumberListAttribute m_values; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEComponentTransferElement.h b/Source/WebCore/svg/SVGFEComponentTransferElement.h >index 19c8ca0999f..bd62b3481c5 100644 >--- a/Source/WebCore/svg/SVGFEComponentTransferElement.h >+++ b/Source/WebCore/svg/SVGFEComponentTransferElement.h >@@ -30,8 +30,8 @@ class SVGFEComponentTransferElement final : public SVGFilterPrimitiveStandardAtt > public: > static Ref<SVGFEComponentTransferElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEComponentTransferElement(const QualifiedName&, Document&); >@@ -47,7 +47,7 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFECompositeElement.h b/Source/WebCore/svg/SVGFECompositeElement.h >index 8f131f01f69..a123cc6a714 100644 >--- a/Source/WebCore/svg/SVGFECompositeElement.h >+++ b/Source/WebCore/svg/SVGFECompositeElement.h >@@ -85,21 +85,21 @@ class SVGFECompositeElement final : public SVGFilterPrimitiveStandardAttributes > public: > static Ref<SVGFECompositeElement> create(const QualifiedName&, Document&); > >- String in1() { return m_in1.currentValue(); } >- String in2() { return m_in2.currentValue(); } >- CompositeOperationType svgOperator() const { return m_svgOperator.currentValue(); } >- float k1() const { return m_k1.currentValue(); } >- float k2() const { return m_k2.currentValue(); } >- float k3() const { return m_k3.currentValue(); } >- float k4() const { return m_k4.currentValue(); } >- >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> svgOperatorAnimated() { return m_svgOperator.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> k1Animated() { return m_k1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> k2Animated() { return m_k2.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> k3Animated() { return m_k3.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> k4Animated() { return m_k4.animatedProperty(); } >+ String in1() { return m_in1.currentValue(attributeOwnerProxy()); } >+ String in2() { return m_in2.currentValue(attributeOwnerProxy()); } >+ CompositeOperationType svgOperator() const { return m_svgOperator.currentValue(attributeOwnerProxy()); } >+ float k1() const { return m_k1.currentValue(attributeOwnerProxy()); } >+ float k2() const { return m_k2.currentValue(attributeOwnerProxy()); } >+ float k3() const { return m_k3.currentValue(attributeOwnerProxy()); } >+ float k4() const { return m_k4.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> svgOperatorAnimated() { return m_svgOperator.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> k1Animated() { return m_k1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> k2Animated() { return m_k2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> k3Animated() { return m_k3.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> k4Animated() { return m_k4.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFECompositeElement(const QualifiedName&, Document&); >@@ -117,13 +117,13 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedStringAttribute m_in2 { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<CompositeOperationType> m_svgOperator { m_attributeOwnerProxy, FECOMPOSITE_OPERATOR_OVER }; >- SVGAnimatedNumberAttribute m_k1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_k2 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_k3 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_k4 { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedStringAttribute m_in2; >+ SVGAnimatedEnumerationAttribute<CompositeOperationType> m_svgOperator { FECOMPOSITE_OPERATOR_OVER }; >+ SVGAnimatedNumberAttribute m_k1; >+ SVGAnimatedNumberAttribute m_k2; >+ SVGAnimatedNumberAttribute m_k3; >+ SVGAnimatedNumberAttribute m_k4; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp >index 676e1b254fe..e63b3237a55 100644 >--- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp >+++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp >@@ -121,7 +121,7 @@ void SVGFEConvolveMatrixElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::kernelMatrixAttr) { > SVGNumberListValues newList; > newList.parse(value); >- m_kernelMatrix.detachAnimatedListWrappers(newList.size()); >+ m_kernelMatrix.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_kernelMatrix.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h >index 9d65c9c8f1e..6f731749a32 100644 >--- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h >+++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h >@@ -72,31 +72,31 @@ public: > void setOrder(float orderX, float orderY); > void setKernelUnitLength(float kernelUnitLengthX, float kernelUnitLengthY); > >- String in1() const { return m_in1.currentValue(); } >- int orderX() const { return m_orderX.currentValue(); } >- int orderY() const { return m_orderY.currentValue(); } >- const SVGNumberListValues& kernelMatrix() const { return m_kernelMatrix.currentValue(); } >- float divisor() const { return m_divisor.currentValue(); } >- float bias() const { return m_bias.currentValue(); } >- int targetX() const { return m_targetX.currentValue(); } >- int targetY() const { return m_targetY.currentValue(); } >- EdgeModeType edgeMode() const { return m_edgeMode.currentValue(); } >- float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(); } >- float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(); } >- bool preserveAlpha() const { return m_preserveAlpha.currentValue(); } >- >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> orderXAnimated() { return m_orderX.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> orderYAnimated() { return m_orderY.animatedProperty(); } >- RefPtr<SVGAnimatedNumberList> kernelMatrixAnimated() { return m_kernelMatrix.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> divisorAnimated() { return m_divisor.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> biasAnimated() { return m_bias.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> targetXAnimated() { return m_targetX.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> targetYAnimated() { return m_targetY.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> edgeModeAnimated() { return m_edgeMode.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(); } >- RefPtr<SVGAnimatedBoolean> preserveAlphaAnimated() { return m_preserveAlpha.animatedProperty(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ int orderX() const { return m_orderX.currentValue(attributeOwnerProxy()); } >+ int orderY() const { return m_orderY.currentValue(attributeOwnerProxy()); } >+ const SVGNumberListValues& kernelMatrix() const { return m_kernelMatrix.currentValue(attributeOwnerProxy()); } >+ float divisor() const { return m_divisor.currentValue(attributeOwnerProxy()); } >+ float bias() const { return m_bias.currentValue(attributeOwnerProxy()); } >+ int targetX() const { return m_targetX.currentValue(attributeOwnerProxy()); } >+ int targetY() const { return m_targetY.currentValue(attributeOwnerProxy()); } >+ EdgeModeType edgeMode() const { return m_edgeMode.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(attributeOwnerProxy()); } >+ bool preserveAlpha() const { return m_preserveAlpha.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> orderXAnimated() { return m_orderX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> orderYAnimated() { return m_orderY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumberList> kernelMatrixAnimated() { return m_kernelMatrix.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> divisorAnimated() { return m_divisor.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> biasAnimated() { return m_bias.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> targetXAnimated() { return m_targetX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> targetYAnimated() { return m_targetY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> edgeModeAnimated() { return m_edgeMode.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedBoolean> preserveAlphaAnimated() { return m_preserveAlpha.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEConvolveMatrixElement(const QualifiedName&, Document&); >@@ -119,18 +119,18 @@ private: > static const AtomicString& kernelUnitLengthYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_orderX { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_orderY { m_attributeOwnerProxy }; >- SVGAnimatedNumberListAttribute m_kernelMatrix { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_divisor { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_bias { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_targetX { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_targetY { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<EdgeModeType> m_edgeMode { m_attributeOwnerProxy, EDGEMODE_DUPLICATE }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthY { m_attributeOwnerProxy }; >- SVGAnimatedBooleanAttribute m_preserveAlpha { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedIntegerAttribute m_orderX; >+ SVGAnimatedIntegerAttribute m_orderY; >+ SVGAnimatedNumberListAttribute m_kernelMatrix; >+ SVGAnimatedNumberAttribute m_divisor; >+ SVGAnimatedNumberAttribute m_bias; >+ SVGAnimatedIntegerAttribute m_targetX; >+ SVGAnimatedIntegerAttribute m_targetY; >+ SVGAnimatedEnumerationAttribute<EdgeModeType> m_edgeMode { EDGEMODE_DUPLICATE }; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthX; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthY; >+ SVGAnimatedBooleanAttribute m_preserveAlpha; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEDiffuseLightingElement.h b/Source/WebCore/svg/SVGFEDiffuseLightingElement.h >index 151aedc6fce..0b8ae8b01ef 100644 >--- a/Source/WebCore/svg/SVGFEDiffuseLightingElement.h >+++ b/Source/WebCore/svg/SVGFEDiffuseLightingElement.h >@@ -36,17 +36,17 @@ public: > static Ref<SVGFEDiffuseLightingElement> create(const QualifiedName&, Document&); > void lightElementAttributeChanged(const SVGFELightElement*, const QualifiedName&); > >- String in1() const { return m_in1.currentValue(); } >- float diffuseConstant() const { return m_diffuseConstant.currentValue(); } >- float surfaceScale() const { return m_surfaceScale.currentValue(); } >- float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(); } >- float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ float diffuseConstant() const { return m_diffuseConstant.currentValue(attributeOwnerProxy()); } >+ float surfaceScale() const { return m_surfaceScale.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> diffuseConstantAnimated() { return m_diffuseConstant.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> diffuseConstantAnimated() { return m_diffuseConstant.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEDiffuseLightingElement(const QualifiedName&, Document&); >@@ -67,11 +67,11 @@ private: > static const AtomicString& kernelUnitLengthYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_diffuseConstant { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_surfaceScale { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthY { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedNumberAttribute m_diffuseConstant { 1 }; >+ SVGAnimatedNumberAttribute m_surfaceScale { 1 }; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthX; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthY; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEDisplacementMapElement.h b/Source/WebCore/svg/SVGFEDisplacementMapElement.h >index 2781319f5c3..51bed53df66 100644 >--- a/Source/WebCore/svg/SVGFEDisplacementMapElement.h >+++ b/Source/WebCore/svg/SVGFEDisplacementMapElement.h >@@ -71,17 +71,17 @@ public: > > static ChannelSelectorType stringToChannel(const String&); > >- String in1() const { return m_in1.currentValue(); } >- String in2() const { return m_in2.currentValue(); } >- ChannelSelectorType xChannelSelector() const { return m_xChannelSelector.currentValue(); } >- ChannelSelectorType yChannelSelector() const { return m_yChannelSelector.currentValue(); } >- float scale() const { return m_scale.currentValue(); } >- >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> xChannelSelectorAnimated() { return m_xChannelSelector.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> yChannelSelectorAnimated() { return m_yChannelSelector.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> scaleAnimated() { return m_scale.animatedProperty(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ String in2() const { return m_in2.currentValue(attributeOwnerProxy()); } >+ ChannelSelectorType xChannelSelector() const { return m_xChannelSelector.currentValue(attributeOwnerProxy()); } >+ ChannelSelectorType yChannelSelector() const { return m_yChannelSelector.currentValue(attributeOwnerProxy()); } >+ float scale() const { return m_scale.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in2Animated() { return m_in2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> xChannelSelectorAnimated() { return m_xChannelSelector.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> yChannelSelectorAnimated() { return m_yChannelSelector.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> scaleAnimated() { return m_scale.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEDisplacementMapElement(const QualifiedName& tagName, Document&); >@@ -99,11 +99,11 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedStringAttribute m_in2 { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_xChannelSelector { m_attributeOwnerProxy, CHANNEL_A }; >- SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_yChannelSelector { m_attributeOwnerProxy, CHANNEL_A }; >- SVGAnimatedNumberAttribute m_scale { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedStringAttribute m_in2; >+ SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_xChannelSelector { CHANNEL_A }; >+ SVGAnimatedEnumerationAttribute<ChannelSelectorType> m_yChannelSelector { CHANNEL_A }; >+ SVGAnimatedNumberAttribute m_scale; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEDropShadowElement.h b/Source/WebCore/svg/SVGFEDropShadowElement.h >index 87dd6ab34e3..366219e02c6 100644 >--- a/Source/WebCore/svg/SVGFEDropShadowElement.h >+++ b/Source/WebCore/svg/SVGFEDropShadowElement.h >@@ -33,17 +33,17 @@ public: > > void setStdDeviation(float stdDeviationX, float stdDeviationY); > >- String in1() const { return m_in1.currentValue(); } >- float dx() const { return m_dx.currentValue(); } >- float dy() const { return m_dy.currentValue(); } >- float stdDeviationX() const { return m_stdDeviationX.currentValue(); } >- float stdDeviationY() const { return m_stdDeviationY.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ float dx() const { return m_dx.currentValue(attributeOwnerProxy()); } >+ float dy() const { return m_dy.currentValue(attributeOwnerProxy()); } >+ float stdDeviationX() const { return m_stdDeviationX.currentValue(attributeOwnerProxy()); } >+ float stdDeviationY() const { return m_stdDeviationY.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> dxAnimated() { return m_dx.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> dyAnimated() { return m_dy.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> stdDeviationXAnimated() { return m_stdDeviationX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> stdDeviationYAnimated() { return m_stdDeviationY.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> dxAnimated() { return m_dx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> dyAnimated() { return m_dy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> stdDeviationXAnimated() { return m_stdDeviationX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> stdDeviationYAnimated() { return m_stdDeviationY.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEDropShadowElement(const QualifiedName&, Document&); >@@ -63,11 +63,11 @@ private: > static const AtomicString& stdDeviationYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_dx { m_attributeOwnerProxy, 2 }; >- SVGAnimatedNumberAttribute m_dy { m_attributeOwnerProxy, 2 }; >- SVGAnimatedNumberAttribute m_stdDeviationX { m_attributeOwnerProxy, 2 }; >- SVGAnimatedNumberAttribute m_stdDeviationY { m_attributeOwnerProxy, 2 }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedNumberAttribute m_dx { 2 }; >+ SVGAnimatedNumberAttribute m_dy { 2 }; >+ SVGAnimatedNumberAttribute m_stdDeviationX { 2 }; >+ SVGAnimatedNumberAttribute m_stdDeviationY { 2 }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEGaussianBlurElement.h b/Source/WebCore/svg/SVGFEGaussianBlurElement.h >index ce762891977..93b61aca46a 100644 >--- a/Source/WebCore/svg/SVGFEGaussianBlurElement.h >+++ b/Source/WebCore/svg/SVGFEGaussianBlurElement.h >@@ -36,15 +36,15 @@ public: > > void setStdDeviation(float stdDeviationX, float stdDeviationY); > >- String in1() const { return m_in1.currentValue(); } >- float stdDeviationX() const { return m_stdDeviationX.currentValue(); } >- float stdDeviationY() const { return m_stdDeviationY.currentValue(); } >- EdgeModeType edgeMode() const { return m_edgeMode.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ float stdDeviationX() const { return m_stdDeviationX.currentValue(attributeOwnerProxy()); } >+ float stdDeviationY() const { return m_stdDeviationY.currentValue(attributeOwnerProxy()); } >+ EdgeModeType edgeMode() const { return m_edgeMode.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> stdDeviationXAnimated() { return m_stdDeviationX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> stdDeviationYAnimated() { return m_stdDeviationY.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> edgeModeAnimated() { return m_edgeMode.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> stdDeviationXAnimated() { return m_stdDeviationX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> stdDeviationYAnimated() { return m_stdDeviationY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> edgeModeAnimated() { return m_edgeMode.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEGaussianBlurElement(const QualifiedName&, Document&); >@@ -64,10 +64,10 @@ private: > static const AtomicString& stdDeviationYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_stdDeviationX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_stdDeviationY { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<EdgeModeType> m_edgeMode { m_attributeOwnerProxy, EDGEMODE_NONE }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedNumberAttribute m_stdDeviationX; >+ SVGAnimatedNumberAttribute m_stdDeviationY; >+ SVGAnimatedEnumerationAttribute<EdgeModeType> m_edgeMode { EDGEMODE_NONE }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEImageElement.h b/Source/WebCore/svg/SVGFEImageElement.h >index d1512d8220b..6c4fd6350b9 100644 >--- a/Source/WebCore/svg/SVGFEImageElement.h >+++ b/Source/WebCore/svg/SVGFEImageElement.h >@@ -41,8 +41,8 @@ public: > > bool hasSingleSecurityOrigin() const; > >- const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(); } >- RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(); } >+ const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEImageElement(const QualifiedName&, Document&); >@@ -71,7 +71,7 @@ private: > void removedFromAncestor(RemovalType, ContainerNode&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio { m_attributeOwnerProxy }; >+ SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio; > CachedResourceHandle<CachedImage> m_cachedImage; > }; > >diff --git a/Source/WebCore/svg/SVGFELightElement.h b/Source/WebCore/svg/SVGFELightElement.h >index aa52ffd53ce..84a678ffb0e 100644 >--- a/Source/WebCore/svg/SVGFELightElement.h >+++ b/Source/WebCore/svg/SVGFELightElement.h >@@ -36,27 +36,27 @@ public: > virtual Ref<LightSource> lightSource(SVGFilterBuilder&) const = 0; > static SVGFELightElement* findLightElement(const SVGElement*); > >- float azimuth() const { return m_azimuth.currentValue(); } >- float elevation() const { return m_elevation.currentValue(); } >- float x() const { return m_x.currentValue(); } >- float y() const { return m_y.currentValue(); } >- float z() const { return m_z.currentValue(); } >- float pointsAtX() const { return m_pointsAtX.currentValue(); } >- float pointsAtY() const { return m_pointsAtY.currentValue(); } >- float pointsAtZ() const { return m_pointsAtZ.currentValue(); } >- float specularExponent() const { return m_specularExponent.currentValue(); } >- float limitingConeAngle() const { return m_limitingConeAngle.currentValue(); } >+ float azimuth() const { return m_azimuth.currentValue(attributeOwnerProxy()); } >+ float elevation() const { return m_elevation.currentValue(attributeOwnerProxy()); } >+ float x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ float y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ float z() const { return m_z.currentValue(attributeOwnerProxy()); } >+ float pointsAtX() const { return m_pointsAtX.currentValue(attributeOwnerProxy()); } >+ float pointsAtY() const { return m_pointsAtY.currentValue(attributeOwnerProxy()); } >+ float pointsAtZ() const { return m_pointsAtZ.currentValue(attributeOwnerProxy()); } >+ float specularExponent() const { return m_specularExponent.currentValue(attributeOwnerProxy()); } >+ float limitingConeAngle() const { return m_limitingConeAngle.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedNumber> azimuthAnimated() { return m_azimuth.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> elevationAnimated() { return m_elevation.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> zAnimated() { return m_z.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> pointsAtXAnimated() { return m_pointsAtX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> pointsAtYAnimated() { return m_pointsAtY.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> pointsAtZAnimated() { return m_pointsAtZ.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> specularExponentAnimated() { return m_specularExponent.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> limitingConeAngleAnimated() { return m_limitingConeAngle.animatedProperty(); } >+ RefPtr<SVGAnimatedNumber> azimuthAnimated() { return m_azimuth.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> elevationAnimated() { return m_elevation.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> zAnimated() { return m_z.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> pointsAtXAnimated() { return m_pointsAtX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> pointsAtYAnimated() { return m_pointsAtY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> pointsAtZAnimated() { return m_pointsAtZ.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> specularExponentAnimated() { return m_specularExponent.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> limitingConeAngleAnimated() { return m_limitingConeAngle.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGFELightElement(const QualifiedName&, Document&); >@@ -75,16 +75,16 @@ private: > void childrenChanged(const ChildChange&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedNumberAttribute m_azimuth { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_elevation { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_x { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_y { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_z { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_pointsAtX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_pointsAtY { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_pointsAtZ { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_specularExponent { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_limitingConeAngle { m_attributeOwnerProxy }; >+ SVGAnimatedNumberAttribute m_azimuth; >+ SVGAnimatedNumberAttribute m_elevation; >+ SVGAnimatedNumberAttribute m_x; >+ SVGAnimatedNumberAttribute m_y; >+ SVGAnimatedNumberAttribute m_z; >+ SVGAnimatedNumberAttribute m_pointsAtX; >+ SVGAnimatedNumberAttribute m_pointsAtY; >+ SVGAnimatedNumberAttribute m_pointsAtZ; >+ SVGAnimatedNumberAttribute m_specularExponent { 1 }; >+ SVGAnimatedNumberAttribute m_limitingConeAngle; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEMergeNodeElement.h b/Source/WebCore/svg/SVGFEMergeNodeElement.h >index eb388226493..9c554ee1125 100644 >--- a/Source/WebCore/svg/SVGFEMergeNodeElement.h >+++ b/Source/WebCore/svg/SVGFEMergeNodeElement.h >@@ -31,8 +31,8 @@ class SVGFEMergeNodeElement final : public SVGElement { > public: > static Ref<SVGFEMergeNodeElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEMergeNodeElement(const QualifiedName&, Document&); >@@ -49,7 +49,7 @@ private: > bool rendererIsNeeded(const RenderStyle&) final { return false; } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEMorphologyElement.h b/Source/WebCore/svg/SVGFEMorphologyElement.h >index 75232d7dbb1..af6f15e8f73 100644 >--- a/Source/WebCore/svg/SVGFEMorphologyElement.h >+++ b/Source/WebCore/svg/SVGFEMorphologyElement.h >@@ -63,15 +63,15 @@ public: > > void setRadius(float radiusX, float radiusY); > >- String in1() const { return m_in1.currentValue(); } >- MorphologyOperatorType svgOperator() const { return m_svgOperator.currentValue(); } >- float radiusX() const { return m_radiusX.currentValue(); } >- float radiusY() const { return m_radiusY.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ MorphologyOperatorType svgOperator() const { return m_svgOperator.currentValue(attributeOwnerProxy()); } >+ float radiusX() const { return m_radiusX.currentValue(attributeOwnerProxy()); } >+ float radiusY() const { return m_radiusY.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> svgOperatorAnimated() { return m_svgOperator.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> radiusXAnimated() { return m_radiusX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> radiusYAnimated() { return m_radiusY.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> svgOperatorAnimated() { return m_svgOperator.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> radiusXAnimated() { return m_radiusX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> radiusYAnimated() { return m_radiusY.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEMorphologyElement(const QualifiedName&, Document&); >@@ -92,10 +92,10 @@ private: > static const AtomicString& radiusYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<MorphologyOperatorType> m_svgOperator { m_attributeOwnerProxy, FEMORPHOLOGY_OPERATOR_ERODE }; >- SVGAnimatedNumberAttribute m_radiusX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_radiusY { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedEnumerationAttribute<MorphologyOperatorType> m_svgOperator { FEMORPHOLOGY_OPERATOR_ERODE }; >+ SVGAnimatedNumberAttribute m_radiusX; >+ SVGAnimatedNumberAttribute m_radiusY; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFEOffsetElement.h b/Source/WebCore/svg/SVGFEOffsetElement.h >index ca7152fad34..bdb0e4f0b8f 100644 >--- a/Source/WebCore/svg/SVGFEOffsetElement.h >+++ b/Source/WebCore/svg/SVGFEOffsetElement.h >@@ -31,13 +31,13 @@ class SVGFEOffsetElement final : public SVGFilterPrimitiveStandardAttributes { > public: > static Ref<SVGFEOffsetElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- float dx() const { return m_dx.currentValue(); } >- float dy() const { return m_dy.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ float dx() const { return m_dx.currentValue(attributeOwnerProxy()); } >+ float dy() const { return m_dy.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> dxAnimated() { return m_dx.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> dyAnimated() { return m_dy.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> dxAnimated() { return m_dx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> dyAnimated() { return m_dy.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFEOffsetElement(const QualifiedName&, Document&); >@@ -54,9 +54,9 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_dx { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_dy { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedNumberAttribute m_dx; >+ SVGAnimatedNumberAttribute m_dy; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFESpecularLightingElement.h b/Source/WebCore/svg/SVGFESpecularLightingElement.h >index 0e66102eca2..7cedaf8599b 100644 >--- a/Source/WebCore/svg/SVGFESpecularLightingElement.h >+++ b/Source/WebCore/svg/SVGFESpecularLightingElement.h >@@ -35,19 +35,19 @@ public: > static Ref<SVGFESpecularLightingElement> create(const QualifiedName&, Document&); > void lightElementAttributeChanged(const SVGFELightElement*, const QualifiedName&); > >- String in1() const { return m_in1.currentValue(); } >- float specularConstant() const { return m_specularConstant.currentValue(); } >- float specularExponent() const { return m_specularExponent.currentValue(); } >- float surfaceScale() const { return m_surfaceScale.currentValue(); } >- float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(); } >- float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ float specularConstant() const { return m_specularConstant.currentValue(attributeOwnerProxy()); } >+ float specularExponent() const { return m_specularExponent.currentValue(attributeOwnerProxy()); } >+ float surfaceScale() const { return m_surfaceScale.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthX() const { return m_kernelUnitLengthX.currentValue(attributeOwnerProxy()); } >+ float kernelUnitLengthY() const { return m_kernelUnitLengthY.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> specularConstantAnimated() { return m_specularConstant.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> specularExponentAnimated() { return m_specularExponent.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> specularConstantAnimated() { return m_specularConstant.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> specularExponentAnimated() { return m_specularExponent.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> surfaceScaleAnimated() { return m_surfaceScale.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthXAnimated() { return m_kernelUnitLengthX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> kernelUnitLengthYAnimated() { return m_kernelUnitLengthY.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFESpecularLightingElement(const QualifiedName&, Document&); >@@ -68,12 +68,12 @@ private: > static const AtomicString& kernelUnitLengthYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_specularConstant { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_specularExponent { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_surfaceScale { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_kernelUnitLengthY { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; >+ SVGAnimatedNumberAttribute m_specularConstant { 1 }; >+ SVGAnimatedNumberAttribute m_specularExponent { 1 }; >+ SVGAnimatedNumberAttribute m_surfaceScale { 1 }; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthX; >+ SVGAnimatedNumberAttribute m_kernelUnitLengthY; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFETileElement.h b/Source/WebCore/svg/SVGFETileElement.h >index 7f17ec26fc6..754df40991e 100644 >--- a/Source/WebCore/svg/SVGFETileElement.h >+++ b/Source/WebCore/svg/SVGFETileElement.h >@@ -30,8 +30,8 @@ class SVGFETileElement final : public SVGFilterPrimitiveStandardAttributes { > public: > static Ref<SVGFETileElement> create(const QualifiedName&, Document&); > >- String in1() const { return m_in1.currentValue(); } >- RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(); } >+ String in1() const { return m_in1.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> in1Animated() { return m_in1.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFETileElement(const QualifiedName&, Document&); >@@ -48,7 +48,7 @@ private: > RefPtr<FilterEffect> build(SVGFilterBuilder*, Filter&) override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedStringAttribute m_in1 { m_attributeOwnerProxy }; >+ SVGAnimatedStringAttribute m_in1; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFETurbulenceElement.h b/Source/WebCore/svg/SVGFETurbulenceElement.h >index 756355b00aa..a0f5488d600 100644 >--- a/Source/WebCore/svg/SVGFETurbulenceElement.h >+++ b/Source/WebCore/svg/SVGFETurbulenceElement.h >@@ -98,19 +98,19 @@ class SVGFETurbulenceElement final : public SVGFilterPrimitiveStandardAttributes > public: > static Ref<SVGFETurbulenceElement> create(const QualifiedName&, Document&); > >- float baseFrequencyX() const { return m_baseFrequencyX.currentValue(); } >- float baseFrequencyY() const { return m_baseFrequencyY.currentValue(); } >- int numOctaves() const { return m_numOctaves.currentValue(); } >- float seed() const { return m_seed.currentValue(); } >- SVGStitchOptions stitchTiles() const { return m_stitchTiles.currentValue(); } >- TurbulenceType type() const { return m_type.currentValue(); } >- >- RefPtr<SVGAnimatedNumber> baseFrequencyXAnimated() { return m_baseFrequencyX.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> baseFrequencyYAnimated() { return m_baseFrequencyY.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> numOctavesAnimated() { return m_numOctaves.animatedProperty(); } >- RefPtr<SVGAnimatedNumber> seedAnimated() { return m_seed.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> stitchTilesAnimated() { return m_stitchTiles.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(); } >+ float baseFrequencyX() const { return m_baseFrequencyX.currentValue(attributeOwnerProxy()); } >+ float baseFrequencyY() const { return m_baseFrequencyY.currentValue(attributeOwnerProxy()); } >+ int numOctaves() const { return m_numOctaves.currentValue(attributeOwnerProxy()); } >+ float seed() const { return m_seed.currentValue(attributeOwnerProxy()); } >+ SVGStitchOptions stitchTiles() const { return m_stitchTiles.currentValue(attributeOwnerProxy()); } >+ TurbulenceType type() const { return m_type.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedNumber> baseFrequencyXAnimated() { return m_baseFrequencyX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> baseFrequencyYAnimated() { return m_baseFrequencyY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> numOctavesAnimated() { return m_numOctaves.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> seedAnimated() { return m_seed.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> stitchTilesAnimated() { return m_stitchTiles.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> typeAnimated() { return m_type.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFETurbulenceElement(const QualifiedName&, Document&); >@@ -131,12 +131,12 @@ private: > static const AtomicString& baseFrequencyYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedNumberAttribute m_baseFrequencyX { m_attributeOwnerProxy }; >- SVGAnimatedNumberAttribute m_baseFrequencyY { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_numOctaves { m_attributeOwnerProxy, 1 }; >- SVGAnimatedNumberAttribute m_seed { m_attributeOwnerProxy }; >- SVGAnimatedEnumerationAttribute<SVGStitchOptions> m_stitchTiles { m_attributeOwnerProxy, SVG_STITCHTYPE_NOSTITCH }; >- SVGAnimatedEnumerationAttribute<TurbulenceType> m_type { m_attributeOwnerProxy, TurbulenceType::Turbulence }; >+ SVGAnimatedNumberAttribute m_baseFrequencyX; >+ SVGAnimatedNumberAttribute m_baseFrequencyY; >+ SVGAnimatedIntegerAttribute m_numOctaves { 1 }; >+ SVGAnimatedNumberAttribute m_seed; >+ SVGAnimatedEnumerationAttribute<SVGStitchOptions> m_stitchTiles { SVG_STITCHTYPE_NOSTITCH }; >+ SVGAnimatedEnumerationAttribute<TurbulenceType> m_type { TurbulenceType::Turbulence }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFilterElement.h b/Source/WebCore/svg/SVGFilterElement.h >index 19cb6f00950..77ec8ea016d 100644 >--- a/Source/WebCore/svg/SVGFilterElement.h >+++ b/Source/WebCore/svg/SVGFilterElement.h >@@ -40,23 +40,23 @@ public: > > void setFilterRes(unsigned filterResX, unsigned filterResY); > >- SVGUnitTypes::SVGUnitType filterUnits() const { return m_filterUnits.currentValue(); } >- SVGUnitTypes::SVGUnitType primitiveUnits() const { return m_primitiveUnits.currentValue(); } >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- int filterResX() const { return m_filterResX.currentValue(); } >- int filterResY() const { return m_filterResY.currentValue(); } >- >- RefPtr<SVGAnimatedEnumeration> filterUnitsAnimated() { return m_filterUnits.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> primitiveUnitsAnimated() { return m_primitiveUnits.animatedProperty(); } >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> filterResXAnimated() { return m_filterResX.animatedProperty(); } >- RefPtr<SVGAnimatedInteger> filterResYAnimated() { return m_filterResY.animatedProperty(); } >+ SVGUnitTypes::SVGUnitType filterUnits() const { return m_filterUnits.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType primitiveUnits() const { return m_primitiveUnits.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ int filterResX() const { return m_filterResX.currentValue(attributeOwnerProxy()); } >+ int filterResY() const { return m_filterResY.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedEnumeration> filterUnitsAnimated() { return m_filterUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> primitiveUnitsAnimated() { return m_primitiveUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> filterResXAnimated() { return m_filterResX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedInteger> filterResYAnimated() { return m_filterResY.animatedProperty(attributeOwnerProxy()); } > > private: > SVGFilterElement(const QualifiedName&, Document&); >@@ -83,14 +83,14 @@ private: > static const AtomicString& filterResYIdentifier(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_filterUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_primitiveUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth, "-10%" }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight, "-10%" }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth, "120%" }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight, "120%" }; >- SVGAnimatedIntegerAttribute m_filterResX { m_attributeOwnerProxy }; >- SVGAnimatedIntegerAttribute m_filterResY { m_attributeOwnerProxy }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_filterUnits { SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_primitiveUnits { SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth, "-10%" }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight, "-10%" }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth, "120%" }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight, "120%" }; >+ SVGAnimatedIntegerAttribute m_filterResX; >+ SVGAnimatedIntegerAttribute m_filterResY; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h >index 208dcd665eb..e0946f552ea 100644 >--- a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h >+++ b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h >@@ -47,17 +47,17 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFilterPrimitiveStandardAttributes, SVGElement>; > static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- const String& result() const { return m_result.currentValue(); } >- >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedString> resultAnimated() { return m_result.animatedProperty(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ const String& result() const { return m_result.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedString> resultAnimated() { return m_result.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGFilterPrimitiveStandardAttributes(const QualifiedName&, Document&); >@@ -85,11 +85,11 @@ private: > > // 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. >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth, "0%" }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight, "0%" }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth, "100%" }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight, "100%" }; >- SVGAnimatedStringAttribute m_result { m_attributeOwnerProxy }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth, "0%" }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight, "0%" }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth, "100%" }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight, "100%" }; >+ SVGAnimatedStringAttribute m_result; > }; > > void invalidateFilterPrimitiveParent(SVGElement*); >diff --git a/Source/WebCore/svg/SVGFitToViewBox.cpp b/Source/WebCore/svg/SVGFitToViewBox.cpp >index 80f73a211ee..b769e5b0ccf 100644 >--- a/Source/WebCore/svg/SVGFitToViewBox.cpp >+++ b/Source/WebCore/svg/SVGFitToViewBox.cpp >@@ -35,8 +35,7 @@ > namespace WebCore { > > SVGFitToViewBox::SVGFitToViewBox(SVGElement* contextElement, AnimatedPropertyState animatedState) >- : m_document(contextElement->document()) >- , m_attributeOwnerProxy(*this, *contextElement, animatedState) >+ : m_attributeOwnerProxy(*this, *contextElement, animatedState) > { > registerAttributes(); > } >@@ -109,27 +108,29 @@ bool SVGFitToViewBox::parseViewBox(const UChar*& c, const UChar* end, FloatRect& > bool valid = parseNumber(c, end, x) && parseNumber(c, end, y) && parseNumber(c, end, width) && parseNumber(c, end, height, false); > > if (validate) { >+ Document& document = m_attributeOwnerProxy.element().document(); >+ > if (!valid) { >- m_document.accessSVGExtensions().reportWarning("Problem parsing viewBox=\"" + str + "\""); >+ document.accessSVGExtensions().reportWarning("Problem parsing viewBox=\"" + str + "\""); > return false; > } > > // Check that width is positive. > if (width < 0.0) { >- m_document.accessSVGExtensions().reportError("A negative value for ViewBox width is not allowed"); >+ document.accessSVGExtensions().reportError("A negative value for ViewBox width is not allowed"); > return false; > } > > // Check that height is positive. > if (height < 0.0) { >- m_document.accessSVGExtensions().reportError("A negative value for ViewBox height is not allowed"); >+ document.accessSVGExtensions().reportError("A negative value for ViewBox height is not allowed"); > return false; > } > > // Nothing should come after the last, fourth number. > skipOptionalSVGSpaces(c, end); > if (c < end) { >- m_document.accessSVGExtensions().reportWarning("Problem parsing viewBox=\"" + str + "\""); >+ document.accessSVGExtensions().reportWarning("Problem parsing viewBox=\"" + str + "\""); > return false; > } > } >diff --git a/Source/WebCore/svg/SVGFitToViewBox.h b/Source/WebCore/svg/SVGFitToViewBox.h >index e4517762bc7..f51a7e9cada 100644 >--- a/Source/WebCore/svg/SVGFitToViewBox.h >+++ b/Source/WebCore/svg/SVGFitToViewBox.h >@@ -31,7 +31,6 @@ > namespace WebCore { > > class AffineTransform; >-class Document; > > class SVGFitToViewBox { > WTF_MAKE_NONCOPYABLE(SVGFitToViewBox); >@@ -41,11 +40,11 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGFitToViewBox>; > static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- const FloatRect& viewBox() const { return m_viewBox.currentValue(); } >- const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(); } >+ const FloatRect& viewBox() const { return m_viewBox.currentValue(m_attributeOwnerProxy); } >+ const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(m_attributeOwnerProxy); } > >- RefPtr<SVGAnimatedRect> viewBoxAnimated() { return m_viewBox.animatedProperty(); } >- RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(); } >+ RefPtr<SVGAnimatedRect> viewBoxAnimated() { return m_viewBox.animatedProperty(m_attributeOwnerProxy); } >+ RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(m_attributeOwnerProxy); } > > void setViewBox(const FloatRect&); > void resetViewBox(); >@@ -72,10 +71,9 @@ protected: > private: > static void registerAttributes(); > >- Document& m_document; > AttributeOwnerProxy m_attributeOwnerProxy; >- SVGAnimatedRectAttribute m_viewBox { m_attributeOwnerProxy }; >- SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio { m_attributeOwnerProxy }; >+ SVGAnimatedRectAttribute m_viewBox; >+ SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio; > bool m_isViewBoxValid { false }; > }; > >diff --git a/Source/WebCore/svg/SVGForeignObjectElement.h b/Source/WebCore/svg/SVGForeignObjectElement.h >index d510ed89751..306e1170ef9 100644 >--- a/Source/WebCore/svg/SVGForeignObjectElement.h >+++ b/Source/WebCore/svg/SVGForeignObjectElement.h >@@ -33,15 +33,15 @@ class SVGForeignObjectElement final : public SVGGraphicsElement, public SVGExter > public: > static Ref<SVGForeignObjectElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } > > private: > SVGForeignObjectElement(const QualifiedName&, Document&); >@@ -63,10 +63,10 @@ private: > bool selfHasRelativeLengths() const final { return true; } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGGeometryElement.h b/Source/WebCore/svg/SVGGeometryElement.h >index 50af24e20d2..8ad251e06fa 100644 >--- a/Source/WebCore/svg/SVGGeometryElement.h >+++ b/Source/WebCore/svg/SVGGeometryElement.h >@@ -45,7 +45,7 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGeometryElement, SVGGraphicsElement>; > static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- auto pathLengthAnimated() { return m_pathLength.animatedProperty(); } >+ auto pathLengthAnimated() { return m_pathLength.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGGeometryElement(const QualifiedName&, Document&); >@@ -60,7 +60,7 @@ private: > static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedNumberAttribute m_pathLength { m_attributeOwnerProxy }; >+ SVGAnimatedNumberAttribute m_pathLength; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGGradientElement.cpp b/Source/WebCore/svg/SVGGradientElement.cpp >index 122fcc24ae9..d65e0f87d43 100644 >--- a/Source/WebCore/svg/SVGGradientElement.cpp >+++ b/Source/WebCore/svg/SVGGradientElement.cpp >@@ -70,7 +70,7 @@ void SVGGradientElement::parseAttribute(const QualifiedName& name, const AtomicS > if (name == SVGNames::gradientTransformAttr) { > SVGTransformListValues newList; > newList.parse(value); >- m_gradientTransform.detachAnimatedListWrappers(newList.size()); >+ m_gradientTransform.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_gradientTransform.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGGradientElement.h b/Source/WebCore/svg/SVGGradientElement.h >index a5b73d54b00..b4c392b3549 100644 >--- a/Source/WebCore/svg/SVGGradientElement.h >+++ b/Source/WebCore/svg/SVGGradientElement.h >@@ -88,13 +88,13 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>; > static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- SVGSpreadMethodType spreadMethod() const { return m_spreadMethod.currentValue(); } >- SVGUnitTypes::SVGUnitType gradientUnits() const { return m_gradientUnits.currentValue(); } >- const SVGTransformListValues& gradientTransform() const { return m_gradientTransform.currentValue(); } >+ SVGSpreadMethodType spreadMethod() const { return m_spreadMethod.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType gradientUnits() const { return m_gradientUnits.currentValue(attributeOwnerProxy()); } >+ const SVGTransformListValues& gradientTransform() const { return m_gradientTransform.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedEnumeration> spreadMethodAnimated() { return m_spreadMethod.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> gradientUnitsAnimated() { return m_gradientUnits.animatedProperty(); } >- RefPtr<SVGAnimatedTransformList> gradientTransformAnimated() { return m_gradientTransform.animatedProperty(); } >+ RefPtr<SVGAnimatedEnumeration> spreadMethodAnimated() { return m_spreadMethod.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> gradientUnitsAnimated() { return m_gradientUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedTransformList> gradientTransformAnimated() { return m_gradientTransform.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGGradientElement(const QualifiedName&, Document&); >@@ -111,9 +111,9 @@ private: > static void registerAttributes(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedEnumerationAttribute<SVGSpreadMethodType> m_spreadMethod { m_attributeOwnerProxy, SVGSpreadMethodPad }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_gradientUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >- SVGAnimatedTransformListAttribute m_gradientTransform { m_attributeOwnerProxy }; >+ SVGAnimatedEnumerationAttribute<SVGSpreadMethodType> m_spreadMethod { SVGSpreadMethodPad }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_gradientUnits { SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >+ SVGAnimatedTransformListAttribute m_gradientTransform; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGGraphicsElement.cpp b/Source/WebCore/svg/SVGGraphicsElement.cpp >index 9d79674a206..c59636cf792 100644 >--- a/Source/WebCore/svg/SVGGraphicsElement.cpp >+++ b/Source/WebCore/svg/SVGGraphicsElement.cpp >@@ -133,7 +133,7 @@ void SVGGraphicsElement::parseAttribute(const QualifiedName& name, const AtomicS > if (name == SVGNames::transformAttr) { > SVGTransformListValues newList; > newList.parse(value); >- m_transform.detachAnimatedListWrappers(newList.size()); >+ m_transform.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_transform.setValue(newList); > return; > } >diff --git a/Source/WebCore/svg/SVGGraphicsElement.h b/Source/WebCore/svg/SVGGraphicsElement.h >index a6b27744ba5..06ee4b30792 100644 >--- a/Source/WebCore/svg/SVGGraphicsElement.h >+++ b/Source/WebCore/svg/SVGGraphicsElement.h >@@ -66,8 +66,8 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGraphicsElement, SVGElement, SVGTests>; > static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- const auto& transform() const { return m_transform.currentValue(); } >- auto transformAnimated() { return m_transform.animatedProperty(); } >+ const auto& transform() const { return m_transform.currentValue(attributeOwnerProxy()); } >+ auto transformAnimated() { return m_transform.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGGraphicsElement(const QualifiedName&, Document&); >@@ -92,7 +92,7 @@ private: > bool m_shouldIsolateBlending; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedTransformListAttribute m_transform { m_attributeOwnerProxy }; >+ SVGAnimatedTransformListAttribute m_transform; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGImageElement.h b/Source/WebCore/svg/SVGImageElement.h >index 5a8d5a1e8a4..523be601217 100644 >--- a/Source/WebCore/svg/SVGImageElement.h >+++ b/Source/WebCore/svg/SVGImageElement.h >@@ -38,17 +38,17 @@ public: > bool hasSingleSecurityOrigin() const; > const AtomicString& imageSourceURL() const final; > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ const SVGPreserveAspectRatioValue& preserveAspectRatio() const { return m_preserveAspectRatio.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated() { return m_preserveAspectRatio.animatedProperty(attributeOwnerProxy()); } > > private: > SVGImageElement(const QualifiedName&, Document&); >@@ -74,11 +74,11 @@ private: > void didMoveToNewDocument(Document& oldDocument, Document& newDocument) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio { m_attributeOwnerProxy }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight }; >+ SVGAnimatedPreserveAspectRatioAttribute m_preserveAspectRatio; > SVGImageLoader m_imageLoader; > }; > >diff --git a/Source/WebCore/svg/SVGLangSpace.cpp b/Source/WebCore/svg/SVGLangSpace.cpp >index c3fbd06af09..258a1af6e88 100644 >--- a/Source/WebCore/svg/SVGLangSpace.cpp >+++ b/Source/WebCore/svg/SVGLangSpace.cpp >@@ -32,7 +32,6 @@ namespace WebCore { > > SVGLangSpace::SVGLangSpace(SVGElement* contextElement) > : m_contextElement(*contextElement) >- , m_attributeOwnerProxy(*this, *contextElement) > { > registerAttributes(); > } >diff --git a/Source/WebCore/svg/SVGLangSpace.h b/Source/WebCore/svg/SVGLangSpace.h >index 0d253ec4603..8775822221e 100644 >--- a/Source/WebCore/svg/SVGLangSpace.h >+++ b/Source/WebCore/svg/SVGLangSpace.h >@@ -22,7 +22,7 @@ > #pragma once > > #include "QualifiedName.h" >-#include "SVGAttributeOwnerProxy.h" >+#include "SVGAttributeOwnerProxyImpl.h" > #include <wtf/HashSet.h> > > namespace WebCore { >@@ -42,6 +42,7 @@ public: > void svgAttributeChanged(const QualifiedName&); > > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGLangSpace>; >+ using AttributeRegistry = SVGAttributeRegistry<SVGLangSpace>; > static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > static bool isKnownAttribute(const QualifiedName& attributeName) { return attributeRegistry().isKnownAttribute(attributeName); } > >@@ -51,14 +52,11 @@ protected: > private: > using SVGStringAttribute = SVGPropertyAttribute<String>; > using SVGStringAttributeAccessor = SVGPropertyAttributeAccessor<SVGLangSpace, SVGStringAttribute>; >- > static void registerAttributes(); > > SVGElement& m_contextElement; >- >- AttributeOwnerProxy m_attributeOwnerProxy; >- SVGStringAttribute m_lang { m_attributeOwnerProxy }; >- SVGStringAttribute m_space { m_attributeOwnerProxy }; >+ SVGStringAttribute m_lang; >+ SVGStringAttribute m_space; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGLineElement.h b/Source/WebCore/svg/SVGLineElement.h >index 6d671180f34..f1ebc4ecbf7 100644 >--- a/Source/WebCore/svg/SVGLineElement.h >+++ b/Source/WebCore/svg/SVGLineElement.h >@@ -33,15 +33,15 @@ class SVGLineElement final : public SVGGeometryElement, public SVGExternalResour > public: > static Ref<SVGLineElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& x1() const { return m_x1.currentValue(); } >- const SVGLengthValue& y1() const { return m_y1.currentValue(); } >- const SVGLengthValue& x2() const { return m_x2.currentValue(); } >- const SVGLengthValue& y2() const { return m_y2.currentValue(); } >+ const SVGLengthValue& x1() const { return m_x1.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y1() const { return m_y1.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& x2() const { return m_x2.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y2() const { return m_y2.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> x1Animated() { return m_x1.animatedProperty(); } >- RefPtr<SVGAnimatedLength> y1Animated() { return m_y1.animatedProperty(); } >- RefPtr<SVGAnimatedLength> x2Animated() { return m_x2.animatedProperty(); } >- RefPtr<SVGAnimatedLength> y2Animated() { return m_y2.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> x1Animated() { return m_x1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> y1Animated() { return m_y1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> x2Animated() { return m_x2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> y2Animated() { return m_y2.animatedProperty(attributeOwnerProxy()); } > > private: > SVGLineElement(const QualifiedName&, Document&); >@@ -60,10 +60,10 @@ private: > bool selfHasRelativeLengths() const final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x1 { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y1 { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_x2 { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y2 { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x1 { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y1 { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x2 { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y2 { LengthModeHeight }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGLinearGradientElement.h b/Source/WebCore/svg/SVGLinearGradientElement.h >index a134c138bda..9f670c9daa4 100644 >--- a/Source/WebCore/svg/SVGLinearGradientElement.h >+++ b/Source/WebCore/svg/SVGLinearGradientElement.h >@@ -36,15 +36,15 @@ public: > > bool collectGradientAttributes(LinearGradientAttributes&); > >- const SVGLengthValue& x1() const { return m_x1.currentValue(); } >- const SVGLengthValue& y1() const { return m_y1.currentValue(); } >- const SVGLengthValue& x2() const { return m_x2.currentValue(); } >- const SVGLengthValue& y2() const { return m_y2.currentValue(); } >+ const SVGLengthValue& x1() const { return m_x1.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y1() const { return m_y1.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& x2() const { return m_x2.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y2() const { return m_y2.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> x1Animated() { return m_x1.animatedProperty(); } >- RefPtr<SVGAnimatedLength> y1Animated() { return m_y1.animatedProperty(); } >- RefPtr<SVGAnimatedLength> x2Animated() { return m_x2.animatedProperty(); } >- RefPtr<SVGAnimatedLength> y2Animated() { return m_y2.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> x1Animated() { return m_x1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> y1Animated() { return m_y1.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> x2Animated() { return m_x2.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> y2Animated() { return m_y2.animatedProperty(attributeOwnerProxy()); } > > private: > SVGLinearGradientElement(const QualifiedName&, Document&); >@@ -63,10 +63,10 @@ private: > bool selfHasRelativeLengths() const override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x1 { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y1 { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_x2 { m_attributeOwnerProxy, LengthModeWidth, "100%" }; >- SVGAnimatedLengthAttribute m_y2 { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x1 { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y1 { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x2 { LengthModeWidth, "100%" }; >+ SVGAnimatedLengthAttribute m_y2 { LengthModeHeight }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGMarkerElement.h b/Source/WebCore/svg/SVGMarkerElement.h >index 5cc36816ed4..37c180a01fa 100644 >--- a/Source/WebCore/svg/SVGMarkerElement.h >+++ b/Source/WebCore/svg/SVGMarkerElement.h >@@ -58,21 +58,21 @@ public: > void setOrientToAuto(); > void setOrientToAngle(SVGAngle&); > >- const SVGLengthValue& refX() const { return m_refX.currentValue(); } >- const SVGLengthValue& refY() const { return m_refY.currentValue(); } >- const SVGLengthValue& markerWidth() const { return m_markerWidth.currentValue(); } >- const SVGLengthValue& markerHeight() const { return m_markerHeight.currentValue(); } >- SVGMarkerUnitsType markerUnits() const { return m_markerUnits.currentValue(); } >- const SVGAngleValue& orientAngle() const { return m_orientAngle.currentValue(); } >- SVGMarkerOrientType orientType() const { return m_orientType.currentValue(); } >- >- RefPtr<SVGAnimatedLength> refXAnimated() { return m_refX.animatedProperty(); } >- RefPtr<SVGAnimatedLength> refYAnimated() { return m_refY.animatedProperty(); } >- RefPtr<SVGAnimatedLength> markerWidthAnimated() { return m_markerWidth.animatedProperty(); } >- RefPtr<SVGAnimatedLength> markerHeightAnimated() { return m_markerHeight.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> markerUnitsAnimated() { return m_markerUnits.animatedProperty(); } >- RefPtr<SVGAnimatedAngle> orientAngleAnimated() { return m_orientAngle.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> orientTypeAnimated() { return m_orientType.animatedProperty(); } >+ const SVGLengthValue& refX() const { return m_refX.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& refY() const { return m_refY.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& markerWidth() const { return m_markerWidth.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& markerHeight() const { return m_markerHeight.currentValue(attributeOwnerProxy()); } >+ SVGMarkerUnitsType markerUnits() const { return m_markerUnits.currentValue(attributeOwnerProxy()); } >+ const SVGAngleValue& orientAngle() const { return m_orientAngle.currentValue(attributeOwnerProxy()); } >+ SVGMarkerOrientType orientType() const { return m_orientType.currentValue(attributeOwnerProxy()); } >+ >+ RefPtr<SVGAnimatedLength> refXAnimated() { return m_refX.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> refYAnimated() { return m_refY.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> markerWidthAnimated() { return m_markerWidth.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> markerHeightAnimated() { return m_markerHeight.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> markerUnitsAnimated() { return m_markerUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedAngle> orientAngleAnimated() { return m_orientAngle.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> orientTypeAnimated() { return m_orientType.animatedProperty(attributeOwnerProxy()); } > > private: > SVGMarkerElement(const QualifiedName&, Document&); >@@ -106,8 +106,8 @@ private: > public: > using Base = SVGAnimatedEnumerationAttribute<SVGMarkerOrientType>; > >- SVGAnimatedCustomOrientTypeAttribute(const SVGAttributeOwnerProxy& attributeOwnerProxy, SVGMarkerOrientType baseValue) >- : Base(attributeOwnerProxy, baseValue) >+ SVGAnimatedCustomOrientTypeAttribute(SVGMarkerOrientType baseValue) >+ : Base(baseValue) > { > } > void synchronize(Element& element, const QualifiedName& attributeName) >@@ -126,13 +126,13 @@ private: > > using SVGAnimatedCustomAngleAttributeAccessor = SVGAnimatedPairAttributeAccessor<SVGMarkerElement, SVGAnimatedAngleAttribute, AnimatedAngle, SVGAnimatedCustomOrientTypeAttribute, AnimatedEnumeration>; > >- SVGAnimatedLengthAttribute m_refX { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_refY { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_markerWidth { m_attributeOwnerProxy, LengthModeWidth, "3" }; >- SVGAnimatedLengthAttribute m_markerHeight { m_attributeOwnerProxy, LengthModeHeight, "3" }; >- SVGAnimatedEnumerationAttribute<SVGMarkerUnitsType> m_markerUnits { m_attributeOwnerProxy, SVGMarkerUnitsStrokeWidth }; >- SVGAnimatedAngleAttribute m_orientAngle { m_attributeOwnerProxy }; >- SVGAnimatedCustomOrientTypeAttribute m_orientType { m_attributeOwnerProxy, SVGMarkerOrientAngle }; >+ SVGAnimatedLengthAttribute m_refX { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_refY { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_markerWidth { LengthModeWidth, "3" }; >+ SVGAnimatedLengthAttribute m_markerHeight { LengthModeHeight, "3" }; >+ SVGAnimatedEnumerationAttribute<SVGMarkerUnitsType> m_markerUnits { SVGMarkerUnitsStrokeWidth }; >+ SVGAnimatedAngleAttribute m_orientAngle; >+ SVGAnimatedCustomOrientTypeAttribute m_orientType { SVGMarkerOrientAngle }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGMaskElement.h b/Source/WebCore/svg/SVGMaskElement.h >index e04d49ee278..30be77e80ae 100644 >--- a/Source/WebCore/svg/SVGMaskElement.h >+++ b/Source/WebCore/svg/SVGMaskElement.h >@@ -36,19 +36,19 @@ class SVGMaskElement final : public SVGElement, public SVGExternalResourcesRequi > public: > static Ref<SVGMaskElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- SVGUnitTypes::SVGUnitType maskUnits() const { return m_maskUnits.currentValue(); } >- SVGUnitTypes::SVGUnitType maskContentUnits() const { return m_maskContentUnits.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType maskUnits() const { return m_maskUnits.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType maskContentUnits() const { return m_maskContentUnits.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> maskUnitsAnimated() { return m_maskUnits.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> maskContentUnitsAnimated() { return m_maskContentUnits.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> maskUnitsAnimated() { return m_maskUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> maskContentUnitsAnimated() { return m_maskContentUnits.animatedProperty(attributeOwnerProxy()); } > > private: > SVGMaskElement(const QualifiedName&, Document&); >@@ -71,12 +71,12 @@ private: > bool selfHasRelativeLengths() const final { return true; } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth, "-10%" }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight, "-10%" }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth, "120%" }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight, "120%" }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_maskUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_maskContentUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth, "-10%" }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight, "-10%" }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth, "120%" }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight, "120%" }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_maskUnits { SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_maskContentUnits { SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGPathElement.cpp b/Source/WebCore/svg/SVGPathElement.cpp >index 5ded2300b4d..f9391b7d388 100644 >--- a/Source/WebCore/svg/SVGPathElement.cpp >+++ b/Source/WebCore/svg/SVGPathElement.cpp >@@ -285,7 +285,7 @@ Path SVGPathElement::pathForByteStream() const > > RefPtr<SVGAnimatedProperty> SVGPathElement::lookupOrCreateDWrapper() > { >- return m_pathSegList.animatedProperty(); >+ return m_pathSegList.animatedProperty(attributeOwnerProxy()); > } > > void SVGPathElement::animatedPropertyWillBeDeleted() >diff --git a/Source/WebCore/svg/SVGPathElement.h b/Source/WebCore/svg/SVGPathElement.h >index 48c95a4e7e8..6c45a1bd0e4 100644 >--- a/Source/WebCore/svg/SVGPathElement.h >+++ b/Source/WebCore/svg/SVGPathElement.h >@@ -103,8 +103,8 @@ public: > > size_t approximateMemoryCost() const final; > >- const SVGPathSegListValues& pathSegList() const { return m_pathSegList.currentValue(); } >- RefPtr<SVGAnimatedPathSegList> pathSegListAnimated() { return m_pathSegList.animatedProperty(); } >+ const SVGPathSegListValues& pathSegList() const { return m_pathSegList.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedPathSegList> pathSegListAnimated() { return m_pathSegList.animatedProperty(attributeOwnerProxy()); } > > private: > SVGPathElement(const QualifiedName&, Document&); >@@ -136,8 +136,8 @@ private: > > class SVGAnimatedCustomPathSegListAttribute : public SVGAnimatedPathSegListAttribute { > public: >- SVGAnimatedCustomPathSegListAttribute(SVGPathElement& element, const SVGAttributeOwnerProxy& attributeOwnerProxy) >- : SVGAnimatedPathSegListAttribute(attributeOwnerProxy, PathSegUnalteredRole) >+ SVGAnimatedCustomPathSegListAttribute(SVGPathElement& element) >+ : SVGAnimatedPathSegListAttribute(PathSegUnalteredRole) > , m_element(element) > { > } >@@ -156,7 +156,7 @@ private: > using SVGAnimatedCustomPathSegListAttributeAccessor = SVGAnimatedAttributeAccessor<SVGPathElement, SVGAnimatedCustomPathSegListAttribute, AnimatedPath>; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedCustomPathSegListAttribute m_pathSegList { *this, m_attributeOwnerProxy }; >+ SVGAnimatedCustomPathSegListAttribute m_pathSegList { *this }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGPatternElement.cpp b/Source/WebCore/svg/SVGPatternElement.cpp >index 5d7ac9af010..172d6c6ebdd 100644 >--- a/Source/WebCore/svg/SVGPatternElement.cpp >+++ b/Source/WebCore/svg/SVGPatternElement.cpp >@@ -93,7 +93,7 @@ void SVGPatternElement::parseAttribute(const QualifiedName& name, const AtomicSt > if (name == SVGNames::patternTransformAttr) { > SVGTransformListValues newList; > newList.parse(value); >- m_patternTransform.detachAnimatedListWrappers(newList.size()); >+ m_patternTransform.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_patternTransform.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGPatternElement.h b/Source/WebCore/svg/SVGPatternElement.h >index 8655301e674..03a606f0a05 100644 >--- a/Source/WebCore/svg/SVGPatternElement.h >+++ b/Source/WebCore/svg/SVGPatternElement.h >@@ -48,21 +48,21 @@ public: > > AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const final; > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- SVGUnitTypes::SVGUnitType patternUnits() const { return m_patternUnits.currentValue(); } >- SVGUnitTypes::SVGUnitType patternContentUnits() const { return m_patternContentUnits.currentValue(); } >- const SVGTransformListValues& patternTransform() const { return m_patternTransform.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType patternUnits() const { return m_patternUnits.currentValue(attributeOwnerProxy()); } >+ SVGUnitTypes::SVGUnitType patternContentUnits() const { return m_patternContentUnits.currentValue(attributeOwnerProxy()); } >+ const SVGTransformListValues& patternTransform() const { return m_patternTransform.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> patternUnitsAnimated() { return m_patternUnits.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> patternContentUnitsAnimated() { return m_patternContentUnits.animatedProperty(); } >- RefPtr<SVGAnimatedTransformList> patternTransformAnimated() { return m_patternTransform.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> patternUnitsAnimated() { return m_patternUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> patternContentUnitsAnimated() { return m_patternContentUnits.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedTransformList> patternTransformAnimated() { return m_patternTransform.animatedProperty(attributeOwnerProxy()); } > > private: > SVGPatternElement(const QualifiedName&, Document&); >@@ -85,13 +85,13 @@ private: > bool selfHasRelativeLengths() const final { return true; } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_patternUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >- SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_patternContentUnits { m_attributeOwnerProxy, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >- SVGAnimatedTransformListAttribute m_patternTransform { m_attributeOwnerProxy }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_patternUnits { SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX }; >+ SVGAnimatedEnumerationAttribute<SVGUnitTypes::SVGUnitType> m_patternContentUnits { SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE }; >+ SVGAnimatedTransformListAttribute m_patternTransform; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGPolyElement.h b/Source/WebCore/svg/SVGPolyElement.h >index fa0984c7559..0320c047808 100644 >--- a/Source/WebCore/svg/SVGPolyElement.h >+++ b/Source/WebCore/svg/SVGPolyElement.h >@@ -55,7 +55,7 @@ private: > bool supportsMarkers() const override { return true; } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedPointListAttribute m_points { m_attributeOwnerProxy }; >+ SVGAnimatedPointListAttribute m_points; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGRadialGradientElement.h b/Source/WebCore/svg/SVGRadialGradientElement.h >index fd19b959685..f991f3d02d9 100644 >--- a/Source/WebCore/svg/SVGRadialGradientElement.h >+++ b/Source/WebCore/svg/SVGRadialGradientElement.h >@@ -36,19 +36,19 @@ public: > > bool collectGradientAttributes(RadialGradientAttributes&); > >- const SVGLengthValue& cx() const { return m_cx.currentValue(); } >- const SVGLengthValue& cy() const { return m_cy.currentValue(); } >- const SVGLengthValue& r() const { return m_r.currentValue(); } >- const SVGLengthValue& fx() const { return m_fx.currentValue(); } >- const SVGLengthValue& fy() const { return m_fy.currentValue(); } >- const SVGLengthValue& fr() const { return m_fr.currentValue(); } >+ const SVGLengthValue& cx() const { return m_cx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& cy() const { return m_cy.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& r() const { return m_r.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& fx() const { return m_fx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& fy() const { return m_fy.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& fr() const { return m_fr.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(); } >- RefPtr<SVGAnimatedLength> rAnimated() { return m_r.animatedProperty(); } >- RefPtr<SVGAnimatedLength> fxAnimated() { return m_fx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> fyAnimated() { return m_fy.animatedProperty(); } >- RefPtr<SVGAnimatedLength> frAnimated() { return m_fr.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> cxAnimated() { return m_cx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> cyAnimated() { return m_cy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> rAnimated() { return m_r.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> fxAnimated() { return m_fx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> fyAnimated() { return m_fy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> frAnimated() { return m_fr.animatedProperty(attributeOwnerProxy()); } > > private: > SVGRadialGradientElement(const QualifiedName&, Document&); >@@ -66,12 +66,12 @@ private: > bool selfHasRelativeLengths() const override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_cx { m_attributeOwnerProxy, LengthModeWidth, "50%" }; >- SVGAnimatedLengthAttribute m_cy { m_attributeOwnerProxy, LengthModeHeight, "50%" }; >- SVGAnimatedLengthAttribute m_r { m_attributeOwnerProxy, LengthModeOther, "50%" }; >- SVGAnimatedLengthAttribute m_fx { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_fy { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_fr { m_attributeOwnerProxy, LengthModeOther, "0%" }; >+ SVGAnimatedLengthAttribute m_cx { LengthModeWidth, "50%" }; >+ SVGAnimatedLengthAttribute m_cy { LengthModeHeight, "50%" }; >+ SVGAnimatedLengthAttribute m_r { LengthModeOther, "50%" }; >+ SVGAnimatedLengthAttribute m_fx { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_fy { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_fr { LengthModeOther, "0%" }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGRectElement.h b/Source/WebCore/svg/SVGRectElement.h >index ecf76166023..e4cdab1affa 100644 >--- a/Source/WebCore/svg/SVGRectElement.h >+++ b/Source/WebCore/svg/SVGRectElement.h >@@ -34,19 +34,19 @@ class SVGRectElement final : public SVGGeometryElement, public SVGExternalResour > public: > static Ref<SVGRectElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >- const SVGLengthValue& rx() const { return m_rx.currentValue(); } >- const SVGLengthValue& ry() const { return m_ry.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& rx() const { return m_rx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& ry() const { return m_ry.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >- RefPtr<SVGAnimatedLength> rxAnimated() { return m_rx.animatedProperty(); } >- RefPtr<SVGAnimatedLength> ryAnimated() { return m_ry.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> rxAnimated() { return m_rx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> ryAnimated() { return m_ry.animatedProperty(attributeOwnerProxy()); } > > private: > SVGRectElement(const QualifiedName&, Document&); >@@ -66,12 +66,12 @@ private: > RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_rx { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_ry { m_attributeOwnerProxy, LengthModeHeight}; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_rx { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_ry { LengthModeHeight}; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGSVGElement.cpp b/Source/WebCore/svg/SVGSVGElement.cpp >index 6c636a3839c..16171a305ed 100644 >--- a/Source/WebCore/svg/SVGSVGElement.cpp >+++ b/Source/WebCore/svg/SVGSVGElement.cpp >@@ -56,7 +56,6 @@ inline SVGSVGElement::SVGSVGElement(const QualifiedName& tagName, Document& docu > : SVGGraphicsElement(tagName, document) > , SVGExternalResourcesRequired(this) > , SVGFitToViewBox(this) >- , SVGZoomAndPan(this) > , m_timeContainer(SMILTimeContainer::create(*this)) > { > ASSERT(hasTagName(SVGNames::svgTag)); >diff --git a/Source/WebCore/svg/SVGSVGElement.h b/Source/WebCore/svg/SVGSVGElement.h >index b39088a94cc..9bcf2868564 100644 >--- a/Source/WebCore/svg/SVGSVGElement.h >+++ b/Source/WebCore/svg/SVGSVGElement.h >@@ -121,15 +121,15 @@ public: > > AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const; > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } > > private: > SVGSVGElement(const QualifiedName&, Document&); >@@ -170,10 +170,10 @@ private: > String m_currentViewFragmentIdentifier; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight}; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth, "100%"_s }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight, "100%"_s }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight}; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth, "100%"_s }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight, "100%"_s }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGStopElement.h b/Source/WebCore/svg/SVGStopElement.h >index ae7279e0459..d843b76afed 100644 >--- a/Source/WebCore/svg/SVGStopElement.h >+++ b/Source/WebCore/svg/SVGStopElement.h >@@ -33,8 +33,8 @@ public: > > Color stopColorIncludingOpacity() const; > >- float offset() { return m_offset.currentValue(); } >- RefPtr<SVGAnimatedNumber> offsetAnimated() { return m_offset.animatedProperty(); } >+ float offset() { return m_offset.currentValue(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumber> offsetAnimated() { return m_offset.animatedProperty(attributeOwnerProxy()); } > > private: > SVGStopElement(const QualifiedName&, Document&); >@@ -54,7 +54,7 @@ private: > bool rendererIsNeeded(const RenderStyle&) final; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedNumberAttribute m_offset { m_attributeOwnerProxy, 0 }; >+ SVGAnimatedNumberAttribute m_offset { 0 }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGTests.cpp b/Source/WebCore/svg/SVGTests.cpp >index cc36dcba064..7134ce7b8e6 100644 >--- a/Source/WebCore/svg/SVGTests.cpp >+++ b/Source/WebCore/svg/SVGTests.cpp >@@ -109,10 +109,6 @@ static const HashSet<String, ASCIICaseInsensitiveHash>& supportedSVGFeatures() > > SVGTests::SVGTests(SVGElement* contextElement) > : m_contextElement(*contextElement) >- , m_attributeOwnerProxy(std::make_unique<AttributeOwnerProxy>(*this, *contextElement)) >- , m_requiredFeatures(*m_attributeOwnerProxy, SVGNames::requiredFeaturesAttr) >- , m_requiredExtensions(*m_attributeOwnerProxy, SVGNames::requiredExtensionsAttr) >- , m_systemLanguage(*m_attributeOwnerProxy, SVGNames::systemLanguageAttr) > { > registerAttributes(); > } >diff --git a/Source/WebCore/svg/SVGTests.h b/Source/WebCore/svg/SVGTests.h >index af25d250105..79dde9b60a4 100644 >--- a/Source/WebCore/svg/SVGTests.h >+++ b/Source/WebCore/svg/SVGTests.h >@@ -61,16 +61,13 @@ protected: > SVGTests(SVGElement* contextElement); > > private: >- SVGElement& m_contextElement; >- > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTests>; > static void registerAttributes(); > >- std::unique_ptr<AttributeOwnerProxy> m_attributeOwnerProxy; >- >- SVGStringListValuesAttribute m_requiredFeatures; >- SVGStringListValuesAttribute m_requiredExtensions; >- SVGStringListValuesAttribute m_systemLanguage; >+ SVGElement& m_contextElement; >+ SVGStringListValuesAttribute m_requiredFeatures { SVGNames::requiredFeaturesAttr }; >+ SVGStringListValuesAttribute m_requiredExtensions { SVGNames::requiredExtensionsAttr }; >+ SVGStringListValuesAttribute m_systemLanguage { SVGNames::systemLanguageAttr }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGTextContentElement.h b/Source/WebCore/svg/SVGTextContentElement.h >index a18221f00e5..157c3d7a786 100644 >--- a/Source/WebCore/svg/SVGTextContentElement.h >+++ b/Source/WebCore/svg/SVGTextContentElement.h >@@ -90,11 +90,11 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>; > static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- const SVGLengthValue& textLength() const { return m_textLength.currentValue(); } >- SVGLengthAdjustType lengthAdjust() const { return m_lengthAdjust.currentValue(); } >+ const SVGLengthValue& textLength() const { return m_textLength.currentValue(attributeOwnerProxy()); } >+ SVGLengthAdjustType lengthAdjust() const { return m_lengthAdjust.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> textLengthAnimated() { return m_textLength.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> lengthAdjustAnimated() { return m_lengthAdjust.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> textLengthAnimated() { return m_textLength.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> lengthAdjustAnimated() { return m_lengthAdjust.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGTextContentElement(const QualifiedName&, Document&); >@@ -119,8 +119,8 @@ private: > public: > using SVGAnimatedLengthAttribute::operator=; > >- SVGAnimatedCustomLengthAttribute(SVGTextContentElement& element, SVGAttributeOwnerProxy& attributeOwnerProxy, SVGLengthMode lengthMode) >- : SVGAnimatedLengthAttribute(attributeOwnerProxy, lengthMode) >+ SVGAnimatedCustomLengthAttribute(SVGTextContentElement& element, SVGLengthMode lengthMode) >+ : SVGAnimatedLengthAttribute(lengthMode) > , m_element(element) > { > } >@@ -133,14 +133,14 @@ private: > static_cast<Element&>(m_element).setSynchronizedLazyAttribute(attributeName, string); > } > >- RefPtr<SVGAnimatedLength> animatedProperty() >+ RefPtr<SVGAnimatedLength> animatedProperty(const SVGAttributeOwnerProxy& attributeOwnerProxy) > { > static NeverDestroyed<SVGLengthValue> defaultTextLength(LengthModeOther); > if (m_element.m_specifiedTextLength == defaultTextLength) > m_element.m_textLength.value().newValueSpecifiedUnits(LengthTypeNumber, m_element.getComputedTextLength()); > > setShouldSynchronize(true); >- return static_reference_cast<SVGAnimatedLength>(m_attributeOwnerProxy.lookupOrCreateAnimatedProperty(*this).releaseNonNull()); >+ return static_reference_cast<SVGAnimatedLength>(attributeOwnerProxy.lookupOrCreateAnimatedProperty(*this).releaseNonNull()); > } > > private: >@@ -150,8 +150,8 @@ private: > using SVGAnimatedCustomLengthAttributeAccessor = SVGAnimatedAttributeAccessor<SVGTextContentElement, SVGAnimatedCustomLengthAttribute, AnimatedLength>; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedCustomLengthAttribute m_textLength { *this, m_attributeOwnerProxy, LengthModeOther }; >- SVGAnimatedEnumerationAttribute<SVGLengthAdjustType> m_lengthAdjust { m_attributeOwnerProxy, SVGLengthAdjustSpacing }; >+ SVGAnimatedCustomLengthAttribute m_textLength { *this, LengthModeOther }; >+ SVGAnimatedEnumerationAttribute<SVGLengthAdjustType> m_lengthAdjust { SVGLengthAdjustSpacing }; > SVGLengthValue m_specifiedTextLength { LengthModeOther }; > }; > >diff --git a/Source/WebCore/svg/SVGTextPathElement.h b/Source/WebCore/svg/SVGTextPathElement.h >index 3b8a565032f..69b3855d633 100644 >--- a/Source/WebCore/svg/SVGTextPathElement.h >+++ b/Source/WebCore/svg/SVGTextPathElement.h >@@ -111,13 +111,13 @@ public: > > static Ref<SVGTextPathElement> create(const QualifiedName&, Document&); > >- const SVGLengthValue& startOffset() const { return m_startOffset.currentValue(); } >- SVGTextPathMethodType method() const { return m_method.currentValue(); } >- SVGTextPathSpacingType spacing() const { return m_spacing.currentValue(); } >+ const SVGLengthValue& startOffset() const { return m_startOffset.currentValue(attributeOwnerProxy()); } >+ SVGTextPathMethodType method() const { return m_method.currentValue(attributeOwnerProxy()); } >+ SVGTextPathSpacingType spacing() const { return m_spacing.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> startOffsetAnimated() { return m_startOffset.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> methodAnimated() { return m_method.animatedProperty(); } >- RefPtr<SVGAnimatedEnumeration> spacingAnimated() { return m_spacing.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> startOffsetAnimated() { return m_startOffset.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> methodAnimated() { return m_method.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedEnumeration> spacingAnimated() { return m_spacing.animatedProperty(attributeOwnerProxy()); } > > protected: > void didFinishInsertingNode() override; >@@ -147,9 +147,9 @@ private: > bool selfHasRelativeLengths() const override; > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_startOffset { m_attributeOwnerProxy, LengthModeOther }; >- SVGAnimatedEnumerationAttribute<SVGTextPathMethodType> m_method { m_attributeOwnerProxy, SVGTextPathMethodAlign }; >- SVGAnimatedEnumerationAttribute<SVGTextPathSpacingType> m_spacing { m_attributeOwnerProxy, SVGTextPathSpacingExact }; >+ SVGAnimatedLengthAttribute m_startOffset { LengthModeOther }; >+ SVGAnimatedEnumerationAttribute<SVGTextPathMethodType> m_method { SVGTextPathMethodAlign }; >+ SVGAnimatedEnumerationAttribute<SVGTextPathSpacingType> m_spacing { SVGTextPathSpacingExact }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGTextPositioningElement.cpp b/Source/WebCore/svg/SVGTextPositioningElement.cpp >index 7a1dc78ff0e..75c4bfe343c 100644 >--- a/Source/WebCore/svg/SVGTextPositioningElement.cpp >+++ b/Source/WebCore/svg/SVGTextPositioningElement.cpp >@@ -62,7 +62,7 @@ void SVGTextPositioningElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::xAttr) { > SVGLengthListValues newList; > newList.parse(value, LengthModeWidth); >- m_x.detachAnimatedListWrappers(newList.size()); >+ m_x.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_x.setValue(WTFMove(newList)); > return; > } >@@ -70,7 +70,7 @@ void SVGTextPositioningElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::yAttr) { > SVGLengthListValues newList; > newList.parse(value, LengthModeHeight); >- m_y.detachAnimatedListWrappers(newList.size()); >+ m_y.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_y.setValue(WTFMove(newList)); > return; > } >@@ -78,7 +78,7 @@ void SVGTextPositioningElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::dxAttr) { > SVGLengthListValues newList; > newList.parse(value, LengthModeWidth); >- m_dx.detachAnimatedListWrappers(newList.size()); >+ m_dx.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_dx.setValue(WTFMove(newList)); > return; > } >@@ -86,7 +86,7 @@ void SVGTextPositioningElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::dyAttr) { > SVGLengthListValues newList; > newList.parse(value, LengthModeHeight); >- m_dy.detachAnimatedListWrappers(newList.size()); >+ m_dy.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_dy.setValue(WTFMove(newList)); > return; > } >@@ -94,7 +94,7 @@ void SVGTextPositioningElement::parseAttribute(const QualifiedName& name, const > if (name == SVGNames::rotateAttr) { > SVGNumberListValues newList; > newList.parse(value); >- m_rotate.detachAnimatedListWrappers(newList.size()); >+ m_rotate.detachAnimatedListWrappers(attributeOwnerProxy(), newList.size()); > m_rotate.setValue(WTFMove(newList)); > return; > } >diff --git a/Source/WebCore/svg/SVGTextPositioningElement.h b/Source/WebCore/svg/SVGTextPositioningElement.h >index 0329106d81a..1b1b81bb289 100644 >--- a/Source/WebCore/svg/SVGTextPositioningElement.h >+++ b/Source/WebCore/svg/SVGTextPositioningElement.h >@@ -35,17 +35,17 @@ public: > using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGTextPositioningElement, SVGTextContentElement>; > static AttributeOwnerProxy::AttributeRegistry& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); } > >- const SVGLengthListValues& x() const { return m_x.currentValue(); } >- const SVGLengthListValues& y() const { return m_y.currentValue(); } >- const SVGLengthListValues& dx() const { return m_dx.currentValue(); } >- const SVGLengthListValues& dy() const { return m_dy.currentValue(); } >- const SVGNumberListValues& rotate() const { return m_rotate.currentValue(); } >+ const SVGLengthListValues& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthListValues& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthListValues& dx() const { return m_dx.currentValue(attributeOwnerProxy()); } >+ const SVGLengthListValues& dy() const { return m_dy.currentValue(attributeOwnerProxy()); } >+ const SVGNumberListValues& rotate() const { return m_rotate.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLengthList> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLengthList> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLengthList> dxAnimated() { return m_dx.animatedProperty(); } >- RefPtr<SVGAnimatedLengthList> dyAnimated() { return m_dy.animatedProperty(); } >- RefPtr<SVGAnimatedNumberList> rotateAnimated() { return m_rotate.animatedProperty(); } >+ RefPtr<SVGAnimatedLengthList> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLengthList> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLengthList> dxAnimated() { return m_dx.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLengthList> dyAnimated() { return m_dy.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedNumberList> rotateAnimated() { return m_rotate.animatedProperty(attributeOwnerProxy()); } > > protected: > SVGTextPositioningElement(const QualifiedName&, Document&); >@@ -63,11 +63,11 @@ private: > static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); } > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthListAttribute m_x { m_attributeOwnerProxy }; >- SVGAnimatedLengthListAttribute m_y { m_attributeOwnerProxy }; >- SVGAnimatedLengthListAttribute m_dx { m_attributeOwnerProxy }; >- SVGAnimatedLengthListAttribute m_dy { m_attributeOwnerProxy }; >- SVGAnimatedNumberListAttribute m_rotate { m_attributeOwnerProxy }; >+ SVGAnimatedLengthListAttribute m_x; >+ SVGAnimatedLengthListAttribute m_y; >+ SVGAnimatedLengthListAttribute m_dx; >+ SVGAnimatedLengthListAttribute m_dy; >+ SVGAnimatedNumberListAttribute m_rotate; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGURIReference.cpp b/Source/WebCore/svg/SVGURIReference.cpp >index c3b3fafa715..9cb4da0ec59 100644 >--- a/Source/WebCore/svg/SVGURIReference.cpp >+++ b/Source/WebCore/svg/SVGURIReference.cpp >@@ -32,7 +32,6 @@ namespace WebCore { > > SVGURIReference::SVGURIReference(SVGElement* contextElement) > : m_attributeOwnerProxy(std::make_unique<AttributeOwnerProxy>(*this, *contextElement)) >- , m_href(*m_attributeOwnerProxy) > { > registerAttributes(); > } >@@ -63,12 +62,12 @@ void SVGURIReference::parseAttribute(const QualifiedName& name, const AtomicStri > > const String& SVGURIReference::href() const > { >- return m_href.currentValue(); >+ return m_href.currentValue(*m_attributeOwnerProxy); > } > > RefPtr<SVGAnimatedString> SVGURIReference::hrefAnimated() > { >- return m_href.animatedProperty(); >+ return m_href.animatedProperty(*m_attributeOwnerProxy); > } > > String SVGURIReference::fragmentIdentifierFromIRIString(const String& url, const Document& document) >diff --git a/Source/WebCore/svg/SVGUseElement.h b/Source/WebCore/svg/SVGUseElement.h >index a9d7902acf3..31e0c09fb8c 100644 >--- a/Source/WebCore/svg/SVGUseElement.h >+++ b/Source/WebCore/svg/SVGUseElement.h >@@ -46,15 +46,15 @@ public: > > RenderElement* rendererClipChild() const; > >- const SVGLengthValue& x() const { return m_x.currentValue(); } >- const SVGLengthValue& y() const { return m_y.currentValue(); } >- const SVGLengthValue& width() const { return m_width.currentValue(); } >- const SVGLengthValue& height() const { return m_height.currentValue(); } >+ const SVGLengthValue& x() const { return m_x.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& y() const { return m_y.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& width() const { return m_width.currentValue(attributeOwnerProxy()); } >+ const SVGLengthValue& height() const { return m_height.currentValue(attributeOwnerProxy()); } > >- RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(); } >- RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(); } >- RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(); } >- RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(); } >+ RefPtr<SVGAnimatedLength> xAnimated() { return m_x.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> yAnimated() { return m_y.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> widthAnimated() { return m_width.animatedProperty(attributeOwnerProxy()); } >+ RefPtr<SVGAnimatedLength> heightAnimated() { return m_height.animatedProperty(attributeOwnerProxy()); } > > private: > SVGUseElement(const QualifiedName&, Document&); >@@ -101,10 +101,10 @@ private: > void invalidateDependentShadowTrees(); > > AttributeOwnerProxy m_attributeOwnerProxy { *this }; >- SVGAnimatedLengthAttribute m_x { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_y { m_attributeOwnerProxy, LengthModeHeight }; >- SVGAnimatedLengthAttribute m_width { m_attributeOwnerProxy, LengthModeWidth }; >- SVGAnimatedLengthAttribute m_height { m_attributeOwnerProxy, LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_x { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_y { LengthModeHeight }; >+ SVGAnimatedLengthAttribute m_width { LengthModeWidth }; >+ SVGAnimatedLengthAttribute m_height { LengthModeHeight }; > > bool m_haveFiredLoadEvent { false }; > bool m_shadowTreeNeedsUpdate { true }; >diff --git a/Source/WebCore/svg/SVGViewElement.cpp b/Source/WebCore/svg/SVGViewElement.cpp >index 801d288234a..53bf4a34ff1 100644 >--- a/Source/WebCore/svg/SVGViewElement.cpp >+++ b/Source/WebCore/svg/SVGViewElement.cpp >@@ -34,7 +34,6 @@ inline SVGViewElement::SVGViewElement(const QualifiedName& tagName, Document& do > : SVGElement(tagName, document) > , SVGExternalResourcesRequired(this) > , SVGFitToViewBox(this) >- , SVGZoomAndPan(this) > , m_viewTarget(SVGNames::viewTargetAttr) > { > ASSERT(hasTagName(SVGNames::viewTag)); >diff --git a/Source/WebCore/svg/SVGViewSpec.cpp b/Source/WebCore/svg/SVGViewSpec.cpp >index 0f2f7d987dc..caea7cace28 100644 >--- a/Source/WebCore/svg/SVGViewSpec.cpp >+++ b/Source/WebCore/svg/SVGViewSpec.cpp >@@ -34,7 +34,6 @@ namespace WebCore { > > SVGViewSpec::SVGViewSpec(SVGElement& contextElement) > : SVGFitToViewBox(&contextElement, PropertyIsReadOnly) >- , SVGZoomAndPan(&contextElement) > , m_contextElement(&contextElement) > , m_attributeOwnerProxy(*this, contextElement) > { >@@ -64,7 +63,7 @@ RefPtr<SVGTransformList> SVGViewSpec::transform() > if (!m_contextElement) > return nullptr; > // Return the animVal here, as its readonly by default - which is exactly what we want here. >- return m_transform.animatedProperty()->animVal(); >+ return m_transform.animatedProperty(m_attributeOwnerProxy)->animVal(); > } > > void SVGViewSpec::reset() >diff --git a/Source/WebCore/svg/SVGViewSpec.h b/Source/WebCore/svg/SVGViewSpec.h >index 124c1e0026b..b8849961893 100644 >--- a/Source/WebCore/svg/SVGViewSpec.h >+++ b/Source/WebCore/svg/SVGViewSpec.h >@@ -61,7 +61,7 @@ private: > SVGElement* m_contextElement; > String m_viewTargetString; > AttributeOwnerProxy m_attributeOwnerProxy; >- SVGAnimatedTransformListAttribute m_transform { m_attributeOwnerProxy }; >+ SVGAnimatedTransformListAttribute m_transform; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/SVGZoomAndPan.cpp b/Source/WebCore/svg/SVGZoomAndPan.cpp >index 2b4413169d7..efadd4b2251 100644 >--- a/Source/WebCore/svg/SVGZoomAndPan.cpp >+++ b/Source/WebCore/svg/SVGZoomAndPan.cpp >@@ -24,8 +24,7 @@ > > namespace WebCore { > >-SVGZoomAndPan::SVGZoomAndPan(SVGElement* contextElement) >- : m_attributeOwnerProxy(*this, *contextElement) >+SVGZoomAndPan::SVGZoomAndPan() > { > registerAttributes(); > } >diff --git a/Source/WebCore/svg/SVGZoomAndPan.h b/Source/WebCore/svg/SVGZoomAndPan.h >index d9bf861cc9b..35d8828ec57 100644 >--- a/Source/WebCore/svg/SVGZoomAndPan.h >+++ b/Source/WebCore/svg/SVGZoomAndPan.h >@@ -48,7 +48,7 @@ public: > void parseAttribute(const QualifiedName&, const AtomicString&); > > protected: >- SVGZoomAndPan(SVGElement* contextElement); >+ SVGZoomAndPan(); > > static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); } > bool parseZoomAndPan(const UChar*&, const UChar*); >@@ -56,8 +56,7 @@ protected: > private: > static void registerAttributes(); > >- AttributeOwnerProxy m_attributeOwnerProxy; >- SVGPropertyAttribute<SVGZoomAndPanType> m_zoomAndPan { m_attributeOwnerProxy }; >+ SVGPropertyAttribute<SVGZoomAndPanType> m_zoomAndPan; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/svg/properties/SVGAttribute.h b/Source/WebCore/svg/properties/SVGAttribute.h >index 60fc0eb953b..8711ac8cc16 100644 >--- a/Source/WebCore/svg/properties/SVGAttribute.h >+++ b/Source/WebCore/svg/properties/SVGAttribute.h >@@ -26,27 +26,24 @@ > #pragma once > > #include "Element.h" >+#include "SVGAttributeOwnerProxy.h" > #include "SVGPropertyTraits.h" > > namespace WebCore { > >-class SVGAttributeOwnerProxy; >- >-struct SVGAttribute { }; >+class SVGAttribute { }; > > template<typename PropertyType> > class SVGPropertyAttribute : public SVGAttribute { > public: >- SVGPropertyAttribute(const SVGAttributeOwnerProxy& attributeOwnerProxy) >+ SVGPropertyAttribute() > : m_property(SVGPropertyTraits<PropertyType>::initialValue()) >- , m_attributeOwnerProxy(attributeOwnerProxy) > { > } > > template<typename... Arguments> >- SVGPropertyAttribute(const SVGAttributeOwnerProxy& attributeOwnerProxy, Arguments&&... arguments) >+ SVGPropertyAttribute(Arguments&&... arguments) > : m_property(std::forward<Arguments>(arguments)...) >- , m_attributeOwnerProxy(attributeOwnerProxy) > { > } > >@@ -71,7 +68,6 @@ public: > protected: > PropertyType m_property; > bool m_shouldSynchronize { false }; >- const SVGAttributeOwnerProxy& m_attributeOwnerProxy; > }; > > template<typename TearOffType> >@@ -82,32 +78,28 @@ public: > using Base = SVGPropertyAttribute<PropertyType>; > using Base::m_property; > using Base::m_shouldSynchronize; >- using Base::m_attributeOwnerProxy; > >- SVGAnimatedAttribute(const SVGAttributeOwnerProxy& attributeOwnerProxy) >- : Base(attributeOwnerProxy) >- { >- } >+ SVGAnimatedAttribute() = default; > > template<typename... Arguments> >- SVGAnimatedAttribute(const SVGAttributeOwnerProxy& attributeOwnerProxy, Arguments&&... arguments) >- : Base(attributeOwnerProxy, std::forward<Arguments>(arguments)...) >+ SVGAnimatedAttribute(Arguments&&... arguments) >+ : Base(std::forward<Arguments>(arguments)...) > { > } > >- const PropertyType& currentValue() const >+ const PropertyType& currentValue(const SVGAttributeOwnerProxy& attributeOwnerProxy) const > { >- if (auto wrapper = m_attributeOwnerProxy.lookupAnimatedProperty(*this)) { >+ if (auto wrapper = attributeOwnerProxy.lookupAnimatedProperty(*this)) { > if (wrapper->isAnimating()) > return static_pointer_cast<PropertyTearOffType>(wrapper)->currentAnimatedValue(); > } > return m_property; > } > >- RefPtr<PropertyTearOffType> animatedProperty() >+ RefPtr<PropertyTearOffType> animatedProperty(const SVGAttributeOwnerProxy& attributeOwnerProxy) > { > m_shouldSynchronize = true; >- if (auto wrapper = m_attributeOwnerProxy.lookupOrCreateAnimatedProperty(*this)) >+ if (auto wrapper = attributeOwnerProxy.lookupOrCreateAnimatedProperty(*this)) > return static_pointer_cast<PropertyTearOffType>(wrapper); > RELEASE_ASSERT_NOT_REACHED(); > return nullptr; >@@ -120,22 +112,18 @@ public: > using PropertyTearOffType = TearOffType; > using PropertyType = typename PropertyTearOffType::ContentType; > using Base = SVGAnimatedAttribute<PropertyTearOffType>; >- using Base::m_attributeOwnerProxy; > >- SVGAnimatedAttributeList(const SVGAttributeOwnerProxy& attributeOwnerProxy) >- : Base(attributeOwnerProxy) >- { >- } >+ SVGAnimatedAttributeList() = default; > > template<typename... Arguments> >- SVGAnimatedAttributeList(const SVGAttributeOwnerProxy& attributeOwnerProxy, Arguments&&... arguments) >- : Base(attributeOwnerProxy, std::forward<Arguments>(arguments)...) >+ SVGAnimatedAttributeList(Arguments&&... arguments) >+ : Base(std::forward<Arguments>(arguments)...) > { > } > >- void detachAnimatedListWrappers(unsigned newListSize) >+ void detachAnimatedListWrappers(const SVGAttributeOwnerProxy& attributeOwnerProxy, unsigned newListSize) > { >- if (auto wrapper = m_attributeOwnerProxy.lookupAnimatedProperty(*this)) >+ 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 >index 354c1dcc647..c5c0f8f6648 100644 >--- a/Source/WebCore/svg/properties/SVGAttributeAccessor.h >+++ b/Source/WebCore/svg/properties/SVGAttributeAccessor.h >@@ -36,10 +36,9 @@ > > namespace WebCore { > >+class SVGAttribute; > class SVGElement; > >-struct SVGAttribute; >- > template<typename OwnerType> > class SVGAttributeAccessor { > WTF_MAKE_FAST_ALLOCATED; >diff --git a/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h b/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h >index 8b137891791..ee9c301b794 100644 >--- a/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h >+++ b/Source/WebCore/svg/properties/SVGAttributeOwnerProxy.h >@@ -1 +1,60 @@ >+/* >+ * 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 "SVGAnimatedPropertyType.h" >+ >+namespace WebCore { >+ >+class SVGAnimatedProperty; >+class SVGAttribute; >+class SVGElement; >+ >+class SVGAttributeOwnerProxy { >+public: >+ SVGAttributeOwnerProxy(SVGElement& element) >+ : m_element(element) >+ { >+ } >+ >+ virtual ~SVGAttributeOwnerProxy() = default; >+ >+ SVGElement& element() const { return m_element; } >+ >+ virtual void synchronizeAttributes() const = 0; >+ virtual void synchronizeAttribute(const QualifiedName&) const = 0; >+ >+ virtual Vector<AnimatedPropertyType> animatedTypes(const QualifiedName&) const = 0; >+ >+ virtual RefPtr<SVGAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute&) const = 0; >+ virtual RefPtr<SVGAnimatedProperty> lookupAnimatedProperty(const SVGAttribute&) const = 0; >+ virtual Vector<RefPtr<SVGAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName&) const = 0; >+ >+protected: >+ SVGElement& m_element; >+}; >+ >+} >diff --git a/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h b/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h >index 177bfebaeb4..51d21ec07d7 100644 >--- a/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h >+++ b/Source/WebCore/svg/properties/SVGAttributeOwnerProxyImpl.h >@@ -25,32 +25,11 @@ > > #pragma once > >+#include "SVGAttributeOwnerProxy.h" > #include "SVGAttributeRegistry.h" > > namespace WebCore { > >-class SVGAttributeOwnerProxy { >-public: >- SVGAttributeOwnerProxy(SVGElement& element) >- : m_element(element) >- { >- } >- >- virtual ~SVGAttributeOwnerProxy() = default; >- >- virtual void synchronizeAttributes() const = 0; >- virtual void synchronizeAttribute(const QualifiedName&) const = 0; >- >- virtual Vector<AnimatedPropertyType> animatedTypes(const QualifiedName&) const = 0; >- >- virtual RefPtr<SVGAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute&) const = 0; >- virtual RefPtr<SVGAnimatedProperty> lookupAnimatedProperty(const SVGAttribute&) const = 0; >- virtual Vector<RefPtr<SVGAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName&) const = 0; >- >-protected: >- SVGElement& m_element; >-}; >- > template<typename OwnerType, typename... BaseTypes> > class SVGAttributeOwnerProxyImpl : public SVGAttributeOwnerProxy { > public:
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186751
:
342916
|
342917
|
342985
|
343001
|
343114
|
343123
|
343124
|
343127
|
343129
|
343162
|
343167
|
343169
|
343171
|
343174
|
343213
|
343217
|
343327
|
343335
|
343338
|
343339
|
343343
|
343415
|
343979
|
343989
|
344002
|
344513
|
344516
|
344523
|
344534
|
344536
|
344988
|
344990
|
346097
|
346103
|
346124
|
346129
|
346177
|
346179
|
346180
|
346182
|
346185
|
346188
|
346190
|
346192
|
346193
|
346197
|
346199
|
346201
|
346202
|
346203
|
346204
|
346205
|
346206
|
346207
|
346211
|
346212
|
346217
|
346224
|
346230
|
346233
|
346241
|
346244
|
346245
|
346315
|
346316
|
346317
|
346318
|
346319
|
346320
|
346322
|
346323
|
346324
|
346325
|
346326
|
346327
|
346328
|
346329
|
346330
|
346331
|
346332
|
346333
|
346334
|
346335
|
346336
|
346337
|
346338
|
346339
|
346340
|
346341
|
346342
|
346343
|
346344
|
346345
|
346346
|
346347
|
346348
|
346349
|
346350
|
346518
|
346519
|
346520
|
346521
|
346522
|
346524
|
346525
|
346526
|
346527
|
346528
|
346529
|
346530
|
346531
|
346532
|
346533
|
346534
|
346535
|
346536
|
346537
|
346538
|
346539
|
346540
|
346541
|
346545
|
346546
|
346549
|
346551
|
346552
|
346601
|
346602
|
346611
|
346636
|
346642