[SVG2]: Remove the SVGExternalResourcesRequired interface
https://bugs.webkit.org/show_bug.cgi?id=191293

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

LayoutTests/imported/w3c:

* web-platform-tests/svg/import/types-dom-04-b-manual.svg:
Use the preserveAlpha property of <feConvolveMatrix> element to test
SVGAnimatedBoolean.

Source/WebCore:

The spec page is: https://www.w3.org/TR/SVG/changes.html.

r251290 made externalResourcesRequired have no effect on firing the load
event. All the control was moved to SVGURIReference. This patch will remove
this interface entirely to conform with SVG2 specs and other browsers.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* svg/SVGAElement.cpp:
(WebCore::SVGAElement::SVGAElement):
(WebCore::SVGAElement::parseAttribute):
(WebCore::SVGAElement::svgAttributeChanged):
* svg/SVGAElement.h:
* svg/SVGAElement.idl:
* svg/SVGAnimationElement.cpp:
(WebCore::SVGAnimationElement::SVGAnimationElement):
(WebCore::SVGAnimationElement::isSupportedAttribute):
(WebCore::SVGAnimationElement::parseAttribute):
* svg/SVGAnimationElement.h:
* svg/SVGAnimationElement.idl:
* svg/SVGCircleElement.cpp:
(WebCore::SVGCircleElement::SVGCircleElement):
(WebCore::SVGCircleElement::parseAttribute):
(WebCore::SVGCircleElement::svgAttributeChanged):
* svg/SVGCircleElement.h:
* svg/SVGCircleElement.idl:
* svg/SVGClipPathElement.cpp:
(WebCore::SVGClipPathElement::SVGClipPathElement):
(WebCore::SVGClipPathElement::parseAttribute):
(WebCore::SVGClipPathElement::svgAttributeChanged):
* svg/SVGClipPathElement.h:
* svg/SVGClipPathElement.idl:
* svg/SVGCursorElement.cpp:
(WebCore::SVGCursorElement::SVGCursorElement):
(WebCore::SVGCursorElement::parseAttribute):
* svg/SVGCursorElement.h:
* svg/SVGCursorElement.idl:
* svg/SVGDefsElement.cpp:
(WebCore::SVGDefsElement::SVGDefsElement):
* svg/SVGDefsElement.h:
* svg/SVGDefsElement.idl:
* svg/SVGEllipseElement.cpp:
(WebCore::SVGEllipseElement::SVGEllipseElement):
(WebCore::SVGEllipseElement::parseAttribute):
(WebCore::SVGEllipseElement::svgAttributeChanged):
* svg/SVGEllipseElement.h:
* svg/SVGEllipseElement.idl:
* svg/SVGExternalResourcesRequired.cpp: Removed.
* svg/SVGExternalResourcesRequired.h: Removed.
* svg/SVGExternalResourcesRequired.idl: Removed.
* svg/SVGFEImageElement.cpp:
(WebCore::SVGFEImageElement::SVGFEImageElement):
(WebCore::SVGFEImageElement::parseAttribute):
* svg/SVGFEImageElement.h:
* svg/SVGFEImageElement.idl:
* svg/SVGFilterElement.cpp:
(WebCore::SVGFilterElement::SVGFilterElement):
(WebCore::SVGFilterElement::parseAttribute):
(WebCore::SVGFilterElement::svgAttributeChanged):
* svg/SVGFilterElement.h:
* svg/SVGFilterElement.idl:
* svg/SVGFontElement.cpp:
(WebCore::SVGFontElement::SVGFontElement):
* svg/SVGFontElement.h:
* svg/SVGForeignObjectElement.cpp:
(WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
(WebCore::SVGForeignObjectElement::parseAttribute):
(WebCore::SVGForeignObjectElement::svgAttributeChanged):
* svg/SVGForeignObjectElement.h:
* svg/SVGForeignObjectElement.idl:
* svg/SVGGElement.cpp:
(WebCore::SVGGElement::SVGGElement):
(WebCore::SVGGElement::parseAttribute): Deleted.
(WebCore::SVGGElement::svgAttributeChanged): Deleted.
* svg/SVGGElement.h:
* svg/SVGGElement.idl:
* svg/SVGGradientElement.cpp:
(WebCore::SVGGradientElement::SVGGradientElement):
(WebCore::SVGGradientElement::parseAttribute):
* svg/SVGGradientElement.h:
* svg/SVGGradientElement.idl:
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::SVGImageElement):
(WebCore::SVGImageElement::parseAttribute):
(WebCore::SVGImageElement::svgAttributeChanged):
* svg/SVGImageElement.h:
* svg/SVGImageElement.idl:
* svg/SVGLineElement.cpp:
(WebCore::SVGLineElement::SVGLineElement):
(WebCore::SVGLineElement::parseAttribute):
(WebCore::SVGLineElement::svgAttributeChanged):
* svg/SVGLineElement.h:
* svg/SVGLineElement.idl:
* svg/SVGMPathElement.cpp:
(WebCore::SVGMPathElement::SVGMPathElement):
(WebCore::SVGMPathElement::parseAttribute):
(WebCore::SVGMPathElement::svgAttributeChanged):
* svg/SVGMPathElement.h:
* svg/SVGMPathElement.idl:
* svg/SVGMarkerElement.cpp:
(WebCore::SVGMarkerElement::SVGMarkerElement):
(WebCore::SVGMarkerElement::parseAttribute):
(WebCore::SVGMarkerElement::svgAttributeChanged):
* svg/SVGMarkerElement.h:
* svg/SVGMarkerElement.idl:
* svg/SVGMaskElement.cpp:
(WebCore::SVGMaskElement::SVGMaskElement):
(WebCore::SVGMaskElement::parseAttribute):
(WebCore::SVGMaskElement::svgAttributeChanged):
* svg/SVGMaskElement.h:
* svg/SVGMaskElement.idl:
* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::SVGPathElement):
(WebCore::SVGPathElement::parseAttribute):
(WebCore::SVGPathElement::svgAttributeChanged):
* svg/SVGPathElement.h:
* svg/SVGPathElement.idl:
* svg/SVGPatternElement.cpp:
(WebCore::SVGPatternElement::SVGPatternElement):
(WebCore::SVGPatternElement::parseAttribute):
(WebCore::SVGPatternElement::svgAttributeChanged):
* svg/SVGPatternElement.h:
* svg/SVGPatternElement.idl:
* svg/SVGPolyElement.cpp:
(WebCore::SVGPolyElement::SVGPolyElement):
(WebCore::SVGPolyElement::parseAttribute):
(WebCore::SVGPolyElement::svgAttributeChanged):
* svg/SVGPolyElement.h:
* svg/SVGPolygonElement.idl:
* svg/SVGPolylineElement.idl:
* svg/SVGRectElement.cpp:
(WebCore::SVGRectElement::SVGRectElement):
(WebCore::SVGRectElement::parseAttribute):
(WebCore::SVGRectElement::svgAttributeChanged):
* svg/SVGRectElement.h:
* svg/SVGRectElement.idl:
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::SVGSVGElement):
(WebCore::SVGSVGElement::parseAttribute):
(WebCore::SVGSVGElement::svgAttributeChanged):
* svg/SVGSVGElement.h:
* svg/SVGSVGElement.idl:
* svg/SVGScriptElement.cpp:
(WebCore::SVGScriptElement::SVGScriptElement):
(WebCore::SVGScriptElement::parseAttribute):
(WebCore::SVGScriptElement::svgAttributeChanged):
* svg/SVGScriptElement.h:
* svg/SVGScriptElement.idl:
* svg/SVGSwitchElement.cpp:
(WebCore::SVGSwitchElement::SVGSwitchElement):
* svg/SVGSwitchElement.h:
* svg/SVGSwitchElement.idl:
* svg/SVGSymbolElement.cpp:
(WebCore::SVGSymbolElement::SVGSymbolElement):
(WebCore::SVGSymbolElement::parseAttribute):
(WebCore::SVGSymbolElement::svgAttributeChanged): Deleted.
* svg/SVGSymbolElement.h:
* svg/SVGSymbolElement.idl:
* svg/SVGTextContentElement.cpp:
(WebCore::SVGTextContentElement::SVGTextContentElement):
(WebCore::SVGTextContentElement::parseAttribute):
(WebCore::SVGTextContentElement::svgAttributeChanged):
* svg/SVGTextContentElement.h:
* svg/SVGTextContentElement.idl:
* svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::SVGUseElement):
(WebCore::SVGUseElement::parseAttribute):
(WebCore::SVGUseElement::svgAttributeChanged):
* svg/SVGUseElement.h:
* svg/SVGUseElement.idl:
* svg/SVGViewElement.cpp:
(WebCore::SVGViewElement::SVGViewElement):
(WebCore::SVGViewElement::parseAttribute):
(WebCore::SVGViewElement::svgAttributeChanged):
* svg/SVGViewElement.h:
* svg/SVGViewElement.idl:

LayoutTests:

* platform/gtk/TestExpectations:
The script-change-externalResourcesRequired-while-loading.svg has to be
removed and it was flaky on all platforms.

* platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
* platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
* platform/ios/TestExpectations:
* platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
* platform/mac/TestExpectations:
* platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
* platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
* platform/win/TestExpectations:
* platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
* platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
* svg/W3C-SVG-1.1-SE/types-dom-04-b.svg:
Use the preserveAlpha property of <feConvolveMatrix> element to test
SVGAnimatedBoolean.

* svg/animations/animate-externalResourcesRequired-no-load-event-expected.txt: Removed.
* svg/animations/animate-externalResourcesRequired-no-load-event.html: Removed.
* svg/custom/path-domsubtreemodified-crash.html:

* svg/dom/SVGAnimatedBoolean-expected.txt:
* svg/dom/SVGAnimatedBoolean.html:
Use the preserveAlpha property of <feConvolveMatrix> element to test
SVGAnimatedBoolean.

* svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading-expected.txt: Removed.
* svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg: Removed.
* svg/dom/SVGScriptElement/script-load-and-error-events.svg:
* svg/dom/SVGScriptElement/script-onerror-bubbling.svg:
* svg/dom/SVGScriptElement/script-reexecution.svg:
* svg/dynamic-updates/SVGUseElement-dom-href1-attr.html:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251318 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index fa7f7f7..21c8e27 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,46 @@
+2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2]: Remove the SVGExternalResourcesRequired interface
+        https://bugs.webkit.org/show_bug.cgi?id=191293
+
+        Reviewed by Simon Fraser.
+
+        * platform/gtk/TestExpectations:
+        The script-change-externalResourcesRequired-while-loading.svg has to be
+        removed and it was flaky on all platforms.
+
+        * platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
+        * platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
+        * platform/ios/TestExpectations:
+        * platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
+        * platform/mac/TestExpectations:
+        * platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
+        * platform/win/TestExpectations:
+        * platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt:
+        * platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt:
+        * svg/W3C-SVG-1.1-SE/types-dom-04-b.svg:
+        Use the preserveAlpha property of <feConvolveMatrix> element to test
+        SVGAnimatedBoolean.
+
+        * svg/animations/animate-externalResourcesRequired-no-load-event-expected.txt: Removed.
+        * svg/animations/animate-externalResourcesRequired-no-load-event.html: Removed.
+        * svg/custom/path-domsubtreemodified-crash.html:
+
+        * svg/dom/SVGAnimatedBoolean-expected.txt:
+        * svg/dom/SVGAnimatedBoolean.html:
+        Use the preserveAlpha property of <feConvolveMatrix> element to test
+        SVGAnimatedBoolean.
+
+        * svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading-expected.txt: Removed.
+        * svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg: Removed.
+        * svg/dom/SVGScriptElement/script-load-and-error-events.svg:
+        * svg/dom/SVGScriptElement/script-onerror-bubbling.svg:
+        * svg/dom/SVGScriptElement/script-reexecution.svg:
+        * svg/dynamic-updates/SVGUseElement-dom-href1-attr.html:
+
 2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>
 
         [WebAuthn] Warn users when no credentials are found
diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog
index 2ad4078..9175da5 100644
--- a/LayoutTests/imported/w3c/ChangeLog
+++ b/LayoutTests/imported/w3c/ChangeLog
@@ -1,5 +1,16 @@
 2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
 
+        [SVG2]: Remove the SVGExternalResourcesRequired interface
+        https://bugs.webkit.org/show_bug.cgi?id=191293
+
+        Reviewed by Simon Fraser.
+
+        * web-platform-tests/svg/import/types-dom-04-b-manual.svg:
+        Use the preserveAlpha property of <feConvolveMatrix> element to test
+        SVGAnimatedBoolean.
+
+2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
         Load event must be fired only for the SVG structurally external elements and the outermost SVG element
         https://bugs.webkit.org/show_bug.cgi?id=203044
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual.svg b/LayoutTests/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual.svg
index 37df625..d492671 100644
--- a/LayoutTests/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual.svg
+++ b/LayoutTests/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual.svg
@@ -92,6 +92,9 @@
       <filter>
         <feTurbulence id='feTurbulence' baseFrequency='2 3' numOctaves='2'/>
       </filter>
+      <filter>
+        <feConvolveMatrix id='feConvolveMatrix' order="1" kernelMatrix="1"/>
+      </filter>
     </g>
 
     <script><![CDATA[
@@ -102,6 +105,7 @@
           marker = $('marker'),
           svg = $('svg'),
           feTurbulence = $('feTurbulence');
+          feConvolveMatrix = $('feConvolveMatrix');
 
       function expect_exception(id, fn, code) {
         try {
@@ -189,12 +193,12 @@
          },
          true);
 
-      // SVGAnimatedBoolean: externalResourcesRequired on svg
+      // SVGAnimatedBoolean: preserveAlpha on svg
       expect_value
         ('r8',
          function() {
-           return !svg.externalResourcesRequired.baseVal
-               && (svg.setAttribute('externalResourcesRequired', 'true'), svg.externalResourcesRequired.baseVal);
+           return !feConvolveMatrix.preserveAlpha.baseVal
+               && (feConvolveMatrix.setAttribute('preserveAlpha', 'true'), feConvolveMatrix.preserveAlpha.baseVal);
          },
          true);
 
diff --git a/LayoutTests/platform/gtk/TestExpectations b/LayoutTests/platform/gtk/TestExpectations
index 29ae316..b6be727 100644
--- a/LayoutTests/platform/gtk/TestExpectations
+++ b/LayoutTests/platform/gtk/TestExpectations
@@ -1763,8 +1763,6 @@
 
 webkit.org/b/168373 media/video-seek-past-end-paused.html [ Failure Pass ]
 
-webkit.org/b/174240 svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg [ Pass Timeout ]
-
 webkit.org/b/174353 media/video-restricted-invisible-autoplay-not-allowed.html [ Crash Pass ]
 
 webkit.org/b/175933 media/audio-controls-timeline-in-media-document.html [ Pass Failure ]
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
index 11c90f9..4530619 100644
--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (16,518) size 380x60
       RenderSVGText {text} at (10,311) size 228x36 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 228x36
diff --git a/LayoutTests/platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
index 1614c55..b43056e 100644
--- a/LayoutTests/platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
+++ b/LayoutTests/platform/gtk/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (10,314) size 228x33
       RenderSVGText {text} at (10,314) size 228x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 228x32
diff --git a/LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt b/LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
index 5fc101e..8bc0ec4 100644
--- a/LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
+++ b/LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (16,516) size 385x64
       RenderSVGText {text} at (10,310) size 231x38 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 231x38
diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations
index 94bd000..0534769 100644
--- a/LayoutTests/platform/ios/TestExpectations
+++ b/LayoutTests/platform/ios/TestExpectations
@@ -2327,8 +2327,6 @@
 
 webkit.org/b/169210 imported/w3c/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-navigation-samedoc.html [ Failure ]
 
-webkit.org/b/153498 svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg [ Pass Timeout ]
-
 # displaylist tests are flaky on ios-simulator wk2
 webkit.org/b/153656 displaylists/canvas-display-list.html [ Pass Failure ]
 webkit.org/b/153656 displaylists/extent-includes-transforms.html [ Pass Failure ]
diff --git a/LayoutTests/platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
index 2a8c7bc..5788df2 100644
--- a/LayoutTests/platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
+++ b/LayoutTests/platform/ios/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (10,314) size 230x33
       RenderSVGText {text} at (10,314) size 230x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 230x33
diff --git a/LayoutTests/platform/mac/TestExpectations b/LayoutTests/platform/mac/TestExpectations
index e33a0c6..607e3eb 100644
--- a/LayoutTests/platform/mac/TestExpectations
+++ b/LayoutTests/platform/mac/TestExpectations
@@ -445,8 +445,6 @@
 # WebKit1 OOP plug-ins: Exceptions aren't thrown on invoke failure.
 plugins/npruntime/invoke-failure.html
 
-webkit.org/b/93589 svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg [ Pass Timeout ]
-
 # CSS image-resolution is not yet enabled.
 webkit.org/b/85262 fast/css/image-resolution
 
diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
index 7572db7..7752dc9 100644
--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (16,517) size 381x62
       RenderSVGText {text} at (10,310) size 229x38 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 229x37
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
index 2d1a013..5a5a017 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (10,314) size 230x33
       RenderSVGText {text} at (10,314) size 230x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 230x33
diff --git a/LayoutTests/platform/win/TestExpectations b/LayoutTests/platform/win/TestExpectations
index c9241de..f411fc0 100644
--- a/LayoutTests/platform/win/TestExpectations
+++ b/LayoutTests/platform/win/TestExpectations
@@ -3797,8 +3797,6 @@
 webkit.org/b/174801 fast/text/line-height-minimumFontSize-autosize.html [ Failure ]
 webkit.org/b/174801 fast/text/line-height-minimumFontSize.html [ Failure ]
 
-webkit.org/b/93589 svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg [ Pass Timeout ]
-
 # No service worker implementation for WK1
 http/tests/appcache/main-resource-redirect-with-sw.html [ Skip ]
 http/tests/cache-storage [ Skip ]
diff --git a/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
index c6e4c60..3702b6a 100644
--- a/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
+++ b/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (10,314) size 231x33
       RenderSVGText {text} at (10,314) size 231x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 231x32
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
index 7c193c7..83060aa 100644
--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/import/types-dom-04-b-manual-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (16,518) size 380x60
       RenderSVGText {text} at (10,311) size 228x36 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 228x36
diff --git a/LayoutTests/platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
index 934f1ae..39f29ef 100644
--- a/LayoutTests/platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
+++ b/LayoutTests/platform/wpe/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -67,6 +67,9 @@
         RenderSVGViewportContainer {svg} at (0,0) size 0x0
         RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
           [feTurbulence type="TURBULENCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feConvolveMatrix order="width=1 height=1" kernelMatrix="[1.00]" divisor="1.00" bias="0.00" target="(0,0)" edgeMode="DUPLICATE" kernelUnitLength="(1,1)" preserveAlpha="1"]
+            [SourceGraphic]
     RenderSVGContainer {g} at (16,524) size 380x54
       RenderSVGText {text} at (10,314) size 228x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,0) size 228x32
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
index 6e40550..f3f9e13 100644
--- a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
@@ -88,10 +88,13 @@
       <text id='text' rotate='0 20 40' x='10 20' lengthAdjust='spacing'>abc</text>
       <circle id='circle' r='50' transform='scale(1) scale(2)' class='one'/>
       <marker id='marker' orient='30'/>
-      <svg id='svg' viewBox='10 20 30 40' preserveAspectRatio='none' externalResourcesRequired='false'/>
+      <svg id='svg' viewBox='10 20 30 40' preserveAspectRatio='none'/>
       <filter>
         <feTurbulence id='feTurbulence' baseFrequency='2 3' numOctaves='2'/>
       </filter>
+      <filter>
+        <feConvolveMatrix id='feConvolveMatrix' order="1" kernelMatrix="1"/>
+      </filter>
     </g>
 
     <script><![CDATA[
@@ -102,6 +105,7 @@
           marker = $('marker'),
           svg = $('svg'),
           feTurbulence = $('feTurbulence');
+          feConvolveMatrix = $('feConvolveMatrix');
 
       function expect_exception(id, fn, code) {
         try {
@@ -189,12 +193,12 @@
          },
          true);
 
-      // SVGAnimatedBoolean: externalResourcesRequired on svg
+      // SVGAnimatedBoolean: preserveAlpha on feConvolveMatrix
       expect_value
         ('r8',
          function() {
-           return !svg.externalResourcesRequired.baseVal
-               && (svg.setAttribute('externalResourcesRequired', 'true'), svg.externalResourcesRequired.baseVal);
+           return !feConvolveMatrix.preserveAlpha.baseVal
+               && (feConvolveMatrix.setAttribute('preserveAlpha', 'true'), feConvolveMatrix.preserveAlpha.baseVal);
          },
          true);
 
diff --git a/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event-expected.txt b/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event-expected.txt
deleted file mode 100644
index 68fe806..0000000
--- a/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Test passes if it does not assert in debug builds.
-
-
diff --git a/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event.html b/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event.html
deleted file mode 100644
index 4f4935b..0000000
--- a/LayoutTests/svg/animations/animate-externalResourcesRequired-no-load-event.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<body>
-    <p>Test passes if it does not assert in debug builds.</p>
-    <option id="option">
-        <svg id="svg">
-            <set id="set" attributeName="externalResourcesRequired" dur="20ms" to="true"/>
-        </svg>
-    </option>
-    <select id="select">
-    <script>
-        if (window.testRunner) {
-            testRunner.dumpAsText();
-            testRunner.waitUntilDone();
-        }
-
-        svg.addEventListener("load", () => {
-            select.add(option);
-        });
-
-        set.addEventListener("endEvent", () => {
-            if (window.testRunner)
-                testRunner.notifyDone();
-        });
-    </script>
-</body>
diff --git a/LayoutTests/svg/custom/path-domsubtreemodified-crash.html b/LayoutTests/svg/custom/path-domsubtreemodified-crash.html
index 1cbbc82..9f7f0d9 100644
--- a/LayoutTests/svg/custom/path-domsubtreemodified-crash.html
+++ b/LayoutTests/svg/custom/path-domsubtreemodified-crash.html
@@ -27,9 +27,6 @@
     }, false);
 
     function doCrash() {
-        var farthestViewportElement = defs["farthestViewportElement"];
-        var externalResourcesRequired = farthestViewportElement["externalResourcesRequired"];
-        externalResourcesRequired["baseVal"] = undefined;
         body.offsetWidth;
         body.innerHTML = "FAIL";
     }
diff --git a/LayoutTests/svg/dom/SVGAnimatedBoolean-expected.txt b/LayoutTests/svg/dom/SVGAnimatedBoolean-expected.txt
index 936ffb3..539c827 100644
--- a/LayoutTests/svg/dom/SVGAnimatedBoolean-expected.txt
+++ b/LayoutTests/svg/dom/SVGAnimatedBoolean-expected.txt
@@ -1,14 +1,14 @@
-This test checks the SVGAnimatedBoolean API - utilizing the externalResourcesRequired property of SVGRectElement
+This test checks the SVGAnimatedBoolean API - utilizing the preserveAlpha property of SVGFEConvolveMatrixElement
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
 
-Check initial SVGExternalResourcesRequired value
-PASS rectElement.externalResourcesRequired.baseVal is false
+Check initial preserveAlpha value
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is false
 
 Set value to true
-PASS rectElement.externalResourcesRequired.baseVal = true is true
+PASS feConvolveMatrixElement.preserveAlpha.baseVal = true is true
 
 Caching baseVal in local variable
 PASS baseVal is true
@@ -16,19 +16,19 @@
 Modify local baseVal variable to true
 PASS baseVal = false is false
 
-Assure that rectElement.externalResourcesRequired has not been changed, but the local baseVal variable
+Assure that feConvolveMatrixElement.preserveAlpha has not been changed, but the local baseVal variable
 PASS baseVal is false
-PASS rectElement.externalResourcesRequired.baseVal is true
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is true
 
 Check assigning values of various types
-PASS rectElement.externalResourcesRequired.baseVal = rectElement.externalResourcesRequired is rectElement.externalResourcesRequired
-PASS rectElement.externalResourcesRequired.baseVal is true
-PASS rectElement.externalResourcesRequired.baseVal = null is null
-PASS rectElement.externalResourcesRequired.baseVal is false
-PASS rectElement.externalResourcesRequired.baseVal = 'aString' is 'aString'
-PASS rectElement.externalResourcesRequired.baseVal is true
-PASS rectElement.externalResourcesRequired.baseVal = rectElement is rectElement
-PASS rectElement.externalResourcesRequired.baseVal is true
+PASS feConvolveMatrixElement.preserveAlpha.baseVal = feConvolveMatrixElement.preserveAlpha is feConvolveMatrixElement.preserveAlpha
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is true
+PASS feConvolveMatrixElement.preserveAlpha.baseVal = null is null
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is false
+PASS feConvolveMatrixElement.preserveAlpha.baseVal = 'aString' is 'aString'
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is true
+PASS feConvolveMatrixElement.preserveAlpha.baseVal = feConvolveMatrixElement is feConvolveMatrixElement
+PASS feConvolveMatrixElement.preserveAlpha.baseVal is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/svg/dom/SVGAnimatedBoolean.html b/LayoutTests/svg/dom/SVGAnimatedBoolean.html
index 6d4a264..90197ec 100644
--- a/LayoutTests/svg/dom/SVGAnimatedBoolean.html
+++ b/LayoutTests/svg/dom/SVGAnimatedBoolean.html
@@ -7,20 +7,20 @@
 <p id="description"></p>
 <div id="console"></div>
 <script>
-description("This test checks the SVGAnimatedBoolean API - utilizing the externalResourcesRequired property of SVGRectElement");
+description("This test checks the SVGAnimatedBoolean API - utilizing the preserveAlpha property of SVGFEConvolveMatrixElement");
 
-var rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+var feConvolveMatrixElement = document.createElementNS("http://www.w3.org/2000/svg", "feConvolveMatrix");
 debug("");
-debug("Check initial SVGExternalResourcesRequired value");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "false");
+debug("Check initial preserveAlpha value");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "false");
 
 debug("");
 debug("Set value to true");
-shouldBe("rectElement.externalResourcesRequired.baseVal = true", "true");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal = true", "true");
 
 debug("");
 debug("Caching baseVal in local variable");
-var baseVal = rectElement.externalResourcesRequired.baseVal;
+var baseVal = feConvolveMatrixElement.preserveAlpha.baseVal;
 shouldBe("baseVal", "true");
 
 debug("");
@@ -28,22 +28,22 @@
 shouldBeFalse("baseVal = false");
 
 debug("");
-debug("Assure that rectElement.externalResourcesRequired has not been changed, but the local baseVal variable");
+debug("Assure that feConvolveMatrixElement.preserveAlpha has not been changed, but the local baseVal variable");
 shouldBe("baseVal", "false");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "true");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "true");
 
 debug("");
 debug("Check assigning values of various types");
 // ECMA-262, 9.2, "ToBoolean"
-shouldBe("rectElement.externalResourcesRequired.baseVal = rectElement.externalResourcesRequired", "rectElement.externalResourcesRequired");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "true");
-shouldBeNull("rectElement.externalResourcesRequired.baseVal = null");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "false");
-shouldBe("rectElement.externalResourcesRequired.baseVal = 'aString'", "'aString'");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "true");
-rectElement.externalResourcesRequired.baseVal = false;
-shouldBe("rectElement.externalResourcesRequired.baseVal = rectElement", "rectElement");
-shouldBe("rectElement.externalResourcesRequired.baseVal", "true");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal = feConvolveMatrixElement.preserveAlpha", "feConvolveMatrixElement.preserveAlpha");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "true");
+shouldBeNull("feConvolveMatrixElement.preserveAlpha.baseVal = null");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "false");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal = 'aString'", "'aString'");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "true");
+feConvolveMatrixElement.preserveAlpha.baseVal = false;
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal = feConvolveMatrixElement", "feConvolveMatrixElement");
+shouldBe("feConvolveMatrixElement.preserveAlpha.baseVal", "true");
 
 successfullyParsed = true;
 </script>
diff --git a/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading-expected.txt b/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading-expected.txt
deleted file mode 100644
index 44a1d2d..0000000
--- a/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Test changing externalResourcesRequired after inserting the element into the tree.
-Test 1: PASS
-
-Test 2: PASS
-
-Test 3: PASS
-
-Test 4: PASS
diff --git a/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg b/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
deleted file mode 100644
index eef9d45..0000000
--- a/LayoutTests/svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml" onload="startTest()">
-<defs>
-<script>
-var resourceLoaded = false;
-
-if (window.testRunner) {
-    testRunner.dumpAsText();
-    testRunner.waitUntilDone();
-}
-
-// The SVGLoad event should be fired right after appending the script element to the document, before the target resource is loaded
-function startTest() {
-    var scriptElement = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
-    scriptElement.href.baseVal = "resources/script-load.js";
-    scriptElement.onload = function() {
-        if (resourceLoaded)
-            document.getElementById("test1").innerHTML = "FAIL: onload fired too late. External resource already completed loading";
-        else {
-            document.getElementById("test1").innerHTML = "PASS";
-            window.setTimeout('continueTest1()', 0);
-        }
-    };
-
-    document.getElementsByTagName("defs")[0].appendChild(scriptElement);
-}
-
-// The SVGLoad event should be fired right after appending the script element to the document, before the target resource is loaded
-// Changing the 'externalResourcesRequired' property after appending the script element, shouldn't affect the SVGLoad event dispatching.
-function continueTest1() {
-    resourceLoaded = false;
-
-    var scriptElement = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
-    scriptElement.href.baseVal = "resources/script-load2.js";
-        scriptElement.onload = function() {
-
-        if (resourceLoaded)
-            document.getElementById("test2").innerHTML = "FAIL: onload fired too late. External resource already completed loading";
-        else {
-            document.getElementById("test2").innerHTML = "PASS";
-            window.setTimeout('continueTest2()', 0);
-        }
-    };
-
-    document.getElementsByTagName("defs")[0].appendChild(scriptElement);
-    scriptElement.externalResourcesRequired.baseVal = true;
-}
-
-// The SVGLoad event should be dispatched, afer the external resource has finished loading
-function continueTest2() {
-    resourceLoaded = false;
-
-    var scriptElement = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
-    scriptElement.externalResourcesRequired.baseVal = true;
-    scriptElement.href.baseVal = "resources/script-load3.js";
-    scriptElement.onload = function() {
-        if (!resourceLoaded)
-            document.getElementById("test3").innerHTML = "FAIL: onload fired too early. External resource still loading";
-        else {
-            document.getElementById("test3").innerHTML = "PASS";
-            window.setTimeout('continueTest3()', 0);
-        }
-    };
-
-    document.getElementsByTagName("defs")[0].appendChild(scriptElement);
-}
-
-// The SVGLoad event should be dispatched, afer the external resource has finished loading
-// Changing the 'externalResourcesRequired' property from 'true' to 'false' after inserting the script element
-// in the document, should cause an immediate dispatch of the SVGLoad event.
-function continueTest3() {
-    resourceLoaded = false;
-
-    var scriptElement = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
-    scriptElement.externalResourcesRequired.baseVal = true;
-    scriptElement.href.baseVal = "resources/script-load4.js";
-    scriptElement.onload = function() {
-        if (resourceLoaded)
-            document.getElementById("test4").innerHTML = "FAIL: onload fired too late. early. External resource still loading";
-        else {
-            document.getElementById("test4").innerHTML = "PASS";
-            window.setTimeout('finishTest()', 0);
-        }
-    };
-
-    document.getElementsByTagName("defs")[0].appendChild(scriptElement);
-    scriptElement.externalResourcesRequired.baseVal = false;
-}
-
-function finishTest() {
-    if (window.testRunner)
-        testRunner.notifyDone();
-}
-</script>
-</defs>
-<foreignObject>
-Test changing externalResourcesRequired after inserting the element into the tree.
-<xhtml:hr/>
-<xhtml:p>Test 1: <xhtml:span id="test1">DID NOT EXECUTE</xhtml:span></xhtml:p>
-<xhtml:p>Test 2: <xhtml:span id="test2">DID NOT EXECUTE</xhtml:span></xhtml:p>
-<xhtml:p>Test 3: <xhtml:span id="test3">DID NOT EXECUTE</xhtml:span></xhtml:p>
-<xhtml:p>Test 4: <xhtml:span id="test4">DID NOT EXECUTE</xhtml:span></xhtml:p>
-</foreignObject>
-</svg>
diff --git a/LayoutTests/svg/dom/SVGScriptElement/script-load-and-error-events.svg b/LayoutTests/svg/dom/SVGScriptElement/script-load-and-error-events.svg
index 252282e..b28e907 100644
--- a/LayoutTests/svg/dom/SVGScriptElement/script-load-and-error-events.svg
+++ b/LayoutTests/svg/dom/SVGScriptElement/script-load-and-error-events.svg
@@ -60,8 +60,6 @@
 }
 
 function lastTestBeforeRootElementLoaded() {
-    // Ensure the SVGSVGElement onload handler doesn't fire, because one script element points to a nonexistent
-    // resource, and specifies externalResourcesRequired=true. This prevents SVGLoad from being dispatched.
     window.setTimeout('startDynamicTests()', 0);
 }
 
@@ -108,7 +106,6 @@
     scriptElement.id = 6;
     scriptElement.type.baseVal = "text/javascript";
     scriptElement.href.baseVal = "resources/nonexistent.js";
-    scriptElement.externalResourcesRequired.baseVal = true;
     scriptElement.onerror = errorEventHandler;
 
     lastTest = 1;
@@ -117,9 +114,9 @@
 //]]>
 </script>
 <script id="0" type="text/javascript" onerror="errorEventHandler(evt)" onload="loadEventHandler(evt)" xlink:href="resources/certainlydoesnotexist.js"></script>
-<script id="1" type="text/javascript" onerror="errorEventHandler(evt)" externalResourcesRequired="true" onload="loadEventHandler(evt)" xlink:href="resources/certainlydoesnotexisttoo.js"/>
+<script id="1" type="text/javascript" onerror="errorEventHandler(evt)" onload="loadEventHandler(evt)" xlink:href="resources/certainlydoesnotexisttoo.js"/>
 <script id="2" type="text/javascript" onerror="errorEventHandler(evt)" onload="loadEventHandler(evt)" xlink:href="resources/script-load.js"></script>
-<script id="3" type="text/javascript" onerror="errorEventHandler(evt)" externalResourcesRequired="true" onload="loadEventHandler(evt); lastTestBeforeRootElementLoaded();" xlink:href="resources/script-load.js"/>
+<script id="3" type="text/javascript" onerror="errorEventHandler(evt)" onload="loadEventHandler(evt); lastTestBeforeRootElementLoaded();" xlink:href="resources/script-load.js"/>
 </defs>
 <foreignObject>
 Test load and error event handling with SVGScriptElement
diff --git a/LayoutTests/svg/dom/SVGScriptElement/script-onerror-bubbling.svg b/LayoutTests/svg/dom/SVGScriptElement/script-onerror-bubbling.svg
index c402099..559041c 100644
--- a/LayoutTests/svg/dom/SVGScriptElement/script-onerror-bubbling.svg
+++ b/LayoutTests/svg/dom/SVGScriptElement/script-onerror-bubbling.svg
@@ -52,7 +52,7 @@
 }
 </script>
 <script id="0" type="text/javascript" onerror="scriptOnErrorHandler(0)" xlink:href="resources/certainlydoesnotexist.js"></script>
-<script id="1" type="text/javascript" onerror="scriptOnErrorHandler(1)" xlink:href="resources/certainlydoesnotexisttoo.js" externalResourcesRequired="true" />
+<script id="1" type="text/javascript" onerror="scriptOnErrorHandler(1)" xlink:href="resources/certainlydoesnotexisttoo.js"/>
 <script id="2" type="text/javascript" onload="testOnErrorInDynamicScript()" xlink:href="resources/script-load.js"></script>
 </defs>
 <foreignObject>
diff --git a/LayoutTests/svg/dom/SVGScriptElement/script-reexecution.svg b/LayoutTests/svg/dom/SVGScriptElement/script-reexecution.svg
index a903670..13ed919 100644
--- a/LayoutTests/svg/dom/SVGScriptElement/script-reexecution.svg
+++ b/LayoutTests/svg/dom/SVGScriptElement/script-reexecution.svg
@@ -32,7 +32,6 @@
     message = "PASS";
 
     e3 = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
-    e3.externalResourcesRequired.baseVal = true; // Otherwhise SVGLoad event will be fired immediately.
     e3.href.baseVal = "resources/script-reexecution.js";
     e3.onload = function() { finish(); }
     document.getElementsByTagName("defs")[0].appendChild(e3);
diff --git a/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-href1-attr.html b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-href1-attr.html
index d22831c..a49ba3e 100644
--- a/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-href1-attr.html
+++ b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-href1-attr.html
@@ -22,7 +22,6 @@
 var useElement = createSVGElement("use");
 useElement.setAttribute("x", "10");
 useElement.setAttribute("y", "10");
-useElement.setAttribute("externalResourcesRequired", "true");
 useElement.setAttribute("onload", "completeTest()");
 useElement.setAttributeNS(xlinkNS, "xlink:href", "#MyRect");
 
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index ed78c8f..55d9585 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -1048,7 +1048,6 @@
     svg/SVGDocument.idl
     svg/SVGElement.idl
     svg/SVGEllipseElement.idl
-    svg/SVGExternalResourcesRequired.idl
     svg/SVGFEBlendElement.idl
     svg/SVGFEColorMatrixElement.idl
     svg/SVGFEComponentTransferElement.idl
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index c5436d7..d5bf3a4 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,191 @@
+2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2]: Remove the SVGExternalResourcesRequired interface
+        https://bugs.webkit.org/show_bug.cgi?id=191293
+
+        Reviewed by Simon Fraser.
+
+        The spec page is: https://www.w3.org/TR/SVG/changes.html.
+
+        r251290 made externalResourcesRequired have no effect on firing the load
+        event. All the control was moved to SVGURIReference. This patch will remove
+        this interface entirely to conform with SVG2 specs and other browsers.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * svg/SVGAElement.cpp:
+        (WebCore::SVGAElement::SVGAElement):
+        (WebCore::SVGAElement::parseAttribute):
+        (WebCore::SVGAElement::svgAttributeChanged):
+        * svg/SVGAElement.h:
+        * svg/SVGAElement.idl:
+        * svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::SVGAnimationElement):
+        (WebCore::SVGAnimationElement::isSupportedAttribute):
+        (WebCore::SVGAnimationElement::parseAttribute):
+        * svg/SVGAnimationElement.h:
+        * svg/SVGAnimationElement.idl:
+        * svg/SVGCircleElement.cpp:
+        (WebCore::SVGCircleElement::SVGCircleElement):
+        (WebCore::SVGCircleElement::parseAttribute):
+        (WebCore::SVGCircleElement::svgAttributeChanged):
+        * svg/SVGCircleElement.h:
+        * svg/SVGCircleElement.idl:
+        * svg/SVGClipPathElement.cpp:
+        (WebCore::SVGClipPathElement::SVGClipPathElement):
+        (WebCore::SVGClipPathElement::parseAttribute):
+        (WebCore::SVGClipPathElement::svgAttributeChanged):
+        * svg/SVGClipPathElement.h:
+        * svg/SVGClipPathElement.idl:
+        * svg/SVGCursorElement.cpp:
+        (WebCore::SVGCursorElement::SVGCursorElement):
+        (WebCore::SVGCursorElement::parseAttribute):
+        * svg/SVGCursorElement.h:
+        * svg/SVGCursorElement.idl:
+        * svg/SVGDefsElement.cpp:
+        (WebCore::SVGDefsElement::SVGDefsElement):
+        * svg/SVGDefsElement.h:
+        * svg/SVGDefsElement.idl:
+        * svg/SVGEllipseElement.cpp:
+        (WebCore::SVGEllipseElement::SVGEllipseElement):
+        (WebCore::SVGEllipseElement::parseAttribute):
+        (WebCore::SVGEllipseElement::svgAttributeChanged):
+        * svg/SVGEllipseElement.h:
+        * svg/SVGEllipseElement.idl:
+        * svg/SVGExternalResourcesRequired.cpp: Removed.
+        * svg/SVGExternalResourcesRequired.h: Removed.
+        * svg/SVGExternalResourcesRequired.idl: Removed.
+        * svg/SVGFEImageElement.cpp:
+        (WebCore::SVGFEImageElement::SVGFEImageElement):
+        (WebCore::SVGFEImageElement::parseAttribute):
+        * svg/SVGFEImageElement.h:
+        * svg/SVGFEImageElement.idl:
+        * svg/SVGFilterElement.cpp:
+        (WebCore::SVGFilterElement::SVGFilterElement):
+        (WebCore::SVGFilterElement::parseAttribute):
+        (WebCore::SVGFilterElement::svgAttributeChanged):
+        * svg/SVGFilterElement.h:
+        * svg/SVGFilterElement.idl:
+        * svg/SVGFontElement.cpp:
+        (WebCore::SVGFontElement::SVGFontElement):
+        * svg/SVGFontElement.h:
+        * svg/SVGForeignObjectElement.cpp:
+        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
+        (WebCore::SVGForeignObjectElement::parseAttribute):
+        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
+        * svg/SVGForeignObjectElement.h:
+        * svg/SVGForeignObjectElement.idl:
+        * svg/SVGGElement.cpp:
+        (WebCore::SVGGElement::SVGGElement):
+        (WebCore::SVGGElement::parseAttribute): Deleted.
+        (WebCore::SVGGElement::svgAttributeChanged): Deleted.
+        * svg/SVGGElement.h:
+        * svg/SVGGElement.idl:
+        * svg/SVGGradientElement.cpp:
+        (WebCore::SVGGradientElement::SVGGradientElement):
+        (WebCore::SVGGradientElement::parseAttribute):
+        * svg/SVGGradientElement.h:
+        * svg/SVGGradientElement.idl:
+        * svg/SVGImageElement.cpp:
+        (WebCore::SVGImageElement::SVGImageElement):
+        (WebCore::SVGImageElement::parseAttribute):
+        (WebCore::SVGImageElement::svgAttributeChanged):
+        * svg/SVGImageElement.h:
+        * svg/SVGImageElement.idl:
+        * svg/SVGLineElement.cpp:
+        (WebCore::SVGLineElement::SVGLineElement):
+        (WebCore::SVGLineElement::parseAttribute):
+        (WebCore::SVGLineElement::svgAttributeChanged):
+        * svg/SVGLineElement.h:
+        * svg/SVGLineElement.idl:
+        * svg/SVGMPathElement.cpp:
+        (WebCore::SVGMPathElement::SVGMPathElement):
+        (WebCore::SVGMPathElement::parseAttribute):
+        (WebCore::SVGMPathElement::svgAttributeChanged):
+        * svg/SVGMPathElement.h:
+        * svg/SVGMPathElement.idl:
+        * svg/SVGMarkerElement.cpp:
+        (WebCore::SVGMarkerElement::SVGMarkerElement):
+        (WebCore::SVGMarkerElement::parseAttribute):
+        (WebCore::SVGMarkerElement::svgAttributeChanged):
+        * svg/SVGMarkerElement.h:
+        * svg/SVGMarkerElement.idl:
+        * svg/SVGMaskElement.cpp:
+        (WebCore::SVGMaskElement::SVGMaskElement):
+        (WebCore::SVGMaskElement::parseAttribute):
+        (WebCore::SVGMaskElement::svgAttributeChanged):
+        * svg/SVGMaskElement.h:
+        * svg/SVGMaskElement.idl:
+        * svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::SVGPathElement):
+        (WebCore::SVGPathElement::parseAttribute):
+        (WebCore::SVGPathElement::svgAttributeChanged):
+        * svg/SVGPathElement.h:
+        * svg/SVGPathElement.idl:
+        * svg/SVGPatternElement.cpp:
+        (WebCore::SVGPatternElement::SVGPatternElement):
+        (WebCore::SVGPatternElement::parseAttribute):
+        (WebCore::SVGPatternElement::svgAttributeChanged):
+        * svg/SVGPatternElement.h:
+        * svg/SVGPatternElement.idl:
+        * svg/SVGPolyElement.cpp:
+        (WebCore::SVGPolyElement::SVGPolyElement):
+        (WebCore::SVGPolyElement::parseAttribute):
+        (WebCore::SVGPolyElement::svgAttributeChanged):
+        * svg/SVGPolyElement.h:
+        * svg/SVGPolygonElement.idl:
+        * svg/SVGPolylineElement.idl:
+        * svg/SVGRectElement.cpp:
+        (WebCore::SVGRectElement::SVGRectElement):
+        (WebCore::SVGRectElement::parseAttribute):
+        (WebCore::SVGRectElement::svgAttributeChanged):
+        * svg/SVGRectElement.h:
+        * svg/SVGRectElement.idl:
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::SVGSVGElement):
+        (WebCore::SVGSVGElement::parseAttribute):
+        (WebCore::SVGSVGElement::svgAttributeChanged):
+        * svg/SVGSVGElement.h:
+        * svg/SVGSVGElement.idl:
+        * svg/SVGScriptElement.cpp:
+        (WebCore::SVGScriptElement::SVGScriptElement):
+        (WebCore::SVGScriptElement::parseAttribute):
+        (WebCore::SVGScriptElement::svgAttributeChanged):
+        * svg/SVGScriptElement.h:
+        * svg/SVGScriptElement.idl:
+        * svg/SVGSwitchElement.cpp:
+        (WebCore::SVGSwitchElement::SVGSwitchElement):
+        * svg/SVGSwitchElement.h:
+        * svg/SVGSwitchElement.idl:
+        * svg/SVGSymbolElement.cpp:
+        (WebCore::SVGSymbolElement::SVGSymbolElement):
+        (WebCore::SVGSymbolElement::parseAttribute):
+        (WebCore::SVGSymbolElement::svgAttributeChanged): Deleted.
+        * svg/SVGSymbolElement.h:
+        * svg/SVGSymbolElement.idl:
+        * svg/SVGTextContentElement.cpp:
+        (WebCore::SVGTextContentElement::SVGTextContentElement):
+        (WebCore::SVGTextContentElement::parseAttribute):
+        (WebCore::SVGTextContentElement::svgAttributeChanged):
+        * svg/SVGTextContentElement.h:
+        * svg/SVGTextContentElement.idl:
+        * svg/SVGUseElement.cpp:
+        (WebCore::SVGUseElement::SVGUseElement):
+        (WebCore::SVGUseElement::parseAttribute):
+        (WebCore::SVGUseElement::svgAttributeChanged):
+        * svg/SVGUseElement.h:
+        * svg/SVGUseElement.idl:
+        * svg/SVGViewElement.cpp:
+        (WebCore::SVGViewElement::SVGViewElement):
+        (WebCore::SVGViewElement::parseAttribute):
+        (WebCore::SVGViewElement::svgAttributeChanged):
+        * svg/SVGViewElement.h:
+        * svg/SVGViewElement.idl:
+
 2019-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         [Clipboard API] Refactor Pasteboard::read() to take an optional item index
diff --git a/Source/WebCore/DerivedSources-input.xcfilelist b/Source/WebCore/DerivedSources-input.xcfilelist
index 03cd92f..c28d074 100644
--- a/Source/WebCore/DerivedSources-input.xcfilelist
+++ b/Source/WebCore/DerivedSources-input.xcfilelist
@@ -966,7 +966,6 @@
 $(PROJECT_DIR)/svg/SVGDocument.idl
 $(PROJECT_DIR)/svg/SVGElement.idl
 $(PROJECT_DIR)/svg/SVGEllipseElement.idl
-$(PROJECT_DIR)/svg/SVGExternalResourcesRequired.idl
 $(PROJECT_DIR)/svg/SVGFEBlendElement.idl
 $(PROJECT_DIR)/svg/SVGFEColorMatrixElement.idl
 $(PROJECT_DIR)/svg/SVGFEComponentTransferElement.idl
diff --git a/Source/WebCore/DerivedSources-output.xcfilelist b/Source/WebCore/DerivedSources-output.xcfilelist
index 615457d..66e9fa7 100644
--- a/Source/WebCore/DerivedSources-output.xcfilelist
+++ b/Source/WebCore/DerivedSources-output.xcfilelist
@@ -1485,8 +1485,6 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGElementWrapperFactory.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGEllipseElement.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGEllipseElement.h
-$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGExternalResourcesRequired.cpp
-$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGExternalResourcesRequired.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGFEBlendElement.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGFEBlendElement.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSSVGFEColorMatrixElement.cpp
diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make
index 77b4443..5d33d85 100644
--- a/Source/WebCore/DerivedSources.make
+++ b/Source/WebCore/DerivedSources.make
@@ -957,7 +957,6 @@
     $(WebCore)/svg/SVGDocument.idl \
     $(WebCore)/svg/SVGElement.idl \
     $(WebCore)/svg/SVGEllipseElement.idl \
-    $(WebCore)/svg/SVGExternalResourcesRequired.idl \
     $(WebCore)/svg/SVGFEBlendElement.idl \
     $(WebCore)/svg/SVGFEColorMatrixElement.idl \
     $(WebCore)/svg/SVGFEComponentTransferElement.idl \
diff --git a/Source/WebCore/Sources.txt b/Source/WebCore/Sources.txt
index e7c9046..96288be 100644
--- a/Source/WebCore/Sources.txt
+++ b/Source/WebCore/Sources.txt
@@ -2369,7 +2369,6 @@
 svg/SVGDocumentExtensions.cpp
 svg/SVGElement.cpp
 svg/SVGEllipseElement.cpp
-svg/SVGExternalResourcesRequired.cpp
 svg/SVGFEBlendElement.cpp
 svg/SVGFEColorMatrixElement.cpp
 svg/SVGFEComponentTransferElement.cpp
@@ -3240,7 +3239,6 @@
 JSSVGDocument.cpp
 JSSVGElement.cpp
 JSSVGEllipseElement.cpp
-JSSVGExternalResourcesRequired.cpp
 JSSVGFEBlendElement.cpp
 JSSVGFEColorMatrixElement.cpp
 JSSVGFEComponentTransferElement.cpp
diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
index e9b5eaf0c..7cb903a 100644
--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -3414,7 +3414,6 @@
 		B22279B40D00BF220071B782 /* SVGDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = B222781E0D00BF1F0071B782 /* SVGDocument.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		B22279B70D00BF220071B782 /* SVGElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278210D00BF1F0071B782 /* SVGElement.h */; };
 		B22279C00D00BF220071B782 /* SVGEllipseElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B222782A0D00BF1F0071B782 /* SVGEllipseElement.h */; };
-		B22279C50D00BF220071B782 /* SVGExternalResourcesRequired.h in Headers */ = {isa = PBXBuildFile; fileRef = B222782F0D00BF1F0071B782 /* SVGExternalResourcesRequired.h */; };
 		B22279C80D00BF220071B782 /* SVGFEBlendElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278320D00BF1F0071B782 /* SVGFEBlendElement.h */; };
 		B22279CB0D00BF220071B782 /* SVGFEColorMatrixElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278350D00BF1F0071B782 /* SVGFEColorMatrixElement.h */; };
 		B22279CE0D00BF220071B782 /* SVGFEComponentTransferElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278380D00BF1F0071B782 /* SVGFEComponentTransferElement.h */; };
@@ -12229,9 +12228,6 @@
 		B22278290D00BF1F0071B782 /* SVGEllipseElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGEllipseElement.cpp; sourceTree = "<group>"; };
 		B222782A0D00BF1F0071B782 /* SVGEllipseElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGEllipseElement.h; sourceTree = "<group>"; };
 		B222782B0D00BF1F0071B782 /* SVGEllipseElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGEllipseElement.idl; sourceTree = "<group>"; };
-		B222782E0D00BF1F0071B782 /* SVGExternalResourcesRequired.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGExternalResourcesRequired.cpp; sourceTree = "<group>"; };
-		B222782F0D00BF1F0071B782 /* SVGExternalResourcesRequired.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGExternalResourcesRequired.h; sourceTree = "<group>"; };
-		B22278300D00BF1F0071B782 /* SVGExternalResourcesRequired.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGExternalResourcesRequired.idl; sourceTree = "<group>"; };
 		B22278310D00BF1F0071B782 /* SVGFEBlendElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFEBlendElement.cpp; sourceTree = "<group>"; };
 		B22278320D00BF1F0071B782 /* SVGFEBlendElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGFEBlendElement.h; sourceTree = "<group>"; };
 		B22278330D00BF1F0071B782 /* SVGFEBlendElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGFEBlendElement.idl; sourceTree = "<group>"; };
@@ -24237,9 +24233,6 @@
 				B22278290D00BF1F0071B782 /* SVGEllipseElement.cpp */,
 				B222782A0D00BF1F0071B782 /* SVGEllipseElement.h */,
 				B222782B0D00BF1F0071B782 /* SVGEllipseElement.idl */,
-				B222782E0D00BF1F0071B782 /* SVGExternalResourcesRequired.cpp */,
-				B222782F0D00BF1F0071B782 /* SVGExternalResourcesRequired.h */,
-				B22278300D00BF1F0071B782 /* SVGExternalResourcesRequired.idl */,
 				B22278310D00BF1F0071B782 /* SVGFEBlendElement.cpp */,
 				B22278320D00BF1F0071B782 /* SVGFEBlendElement.h */,
 				B22278330D00BF1F0071B782 /* SVGFEBlendElement.idl */,
@@ -32129,7 +32122,6 @@
 				081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */,
 				B562DB6117D3CD660010AF96 /* SVGElementTypeHelpers.h in Headers */,
 				B22279C00D00BF220071B782 /* SVGEllipseElement.h in Headers */,
-				B22279C50D00BF220071B782 /* SVGExternalResourcesRequired.h in Headers */,
 				B22279C80D00BF220071B782 /* SVGFEBlendElement.h in Headers */,
 				B22279CB0D00BF220071B782 /* SVGFEColorMatrixElement.h in Headers */,
 				B22279CE0D00BF220071B782 /* SVGFEComponentTransferElement.h in Headers */,
diff --git a/Source/WebCore/svg/SVGAElement.cpp b/Source/WebCore/svg/SVGAElement.cpp
index 81ab424..99db359 100644
--- a/Source/WebCore/svg/SVGAElement.cpp
+++ b/Source/WebCore/svg/SVGAElement.cpp
@@ -48,7 +48,6 @@
 
 inline SVGAElement::SVGAElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
 {
     ASSERT(hasTagName(SVGNames::aTag));
@@ -84,7 +83,6 @@
 
     SVGGraphicsElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGAElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -100,7 +98,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGAElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGAElement.h b/Source/WebCore/svg/SVGAElement.h
index 3099630..b92b4b9 100644
--- a/Source/WebCore/svg/SVGAElement.h
+++ b/Source/WebCore/svg/SVGAElement.h
@@ -22,14 +22,13 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 #include "SVGURIReference.h"
 #include "SharedStringHash.h"
 
 namespace WebCore {
 
-class SVGAElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGURIReference {
+class SVGAElement final : public SVGGraphicsElement, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGAElement);
 public:
     static Ref<SVGAElement> create(const QualifiedName&, Document&);
@@ -42,7 +41,7 @@
 private:
     SVGAElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAElement, SVGGraphicsElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGAElement.idl b/Source/WebCore/svg/SVGAElement.idl
index 28795aa..5b9b8bb 100644
--- a/Source/WebCore/svg/SVGAElement.idl
+++ b/Source/WebCore/svg/SVGAElement.idl
@@ -27,5 +27,4 @@
     readonly attribute SVGAnimatedString target;
 };
 
-SVGAElement implements SVGExternalResourcesRequired;
 SVGAElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGAnimationElement.cpp b/Source/WebCore/svg/SVGAnimationElement.cpp
index b8b51f1..1241922 100644
--- a/Source/WebCore/svg/SVGAnimationElement.cpp
+++ b/Source/WebCore/svg/SVGAnimationElement.cpp
@@ -49,7 +49,6 @@
 
 SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document& document)
     : SVGSMILElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGTests(this)
 {
 }
@@ -136,7 +135,6 @@
     static const auto supportedAttributes = makeNeverDestroyed([] {
         HashSet<QualifiedName> set;
         SVGTests::addSupportedAttributes(set);
-        SVGExternalResourcesRequired::addSupportedAttributes(set);
         set.add({
             SVGNames::valuesAttr.get(),
             SVGNames::keyTimesAttr.get(),
@@ -203,7 +201,6 @@
 
     SVGSMILElement::parseAttribute(name, value);
     SVGTests::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGAnimationElement::svgAttributeChanged(const QualifiedName& attrName)
diff --git a/Source/WebCore/svg/SVGAnimationElement.h b/Source/WebCore/svg/SVGAnimationElement.h
index aa53a0c..8b1fb7f 100644
--- a/Source/WebCore/svg/SVGAnimationElement.h
+++ b/Source/WebCore/svg/SVGAnimationElement.h
@@ -24,7 +24,6 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGSMILElement.h"
 #include "SVGTests.h"
 #include "UnitBezier.h"
@@ -38,7 +37,7 @@
 // the value during the animation since the value can be animated itself.
 enum AnimatedPropertyValueType { RegularPropertyValue, CurrentColorValue, InheritValue };
 
-class SVGAnimationElement : public SVGSMILElement, public SVGExternalResourcesRequired, public SVGTests {
+class SVGAnimationElement : public SVGSMILElement, public SVGTests {
     WTF_MAKE_ISO_ALLOCATED(SVGAnimationElement);
 public:
     float getStartTime() const;
@@ -86,7 +85,7 @@
 protected:
     SVGAnimationElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAnimationElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAnimationElement, SVGElement, SVGTests>;
     const SVGPropertyRegistry& propertyRegistry() const override { return m_propertyRegistry; }
 
     virtual void resetAnimation();
diff --git a/Source/WebCore/svg/SVGAnimationElement.idl b/Source/WebCore/svg/SVGAnimationElement.idl
index 839ca68..979c990c 100644
--- a/Source/WebCore/svg/SVGAnimationElement.idl
+++ b/Source/WebCore/svg/SVGAnimationElement.idl
@@ -37,5 +37,4 @@
     void endElementAt(optional unrestricted float offset = NaN);
 };
 
-SVGAnimationElement implements SVGExternalResourcesRequired;
 SVGAnimationElement implements SVGTests;
diff --git a/Source/WebCore/svg/SVGCircleElement.cpp b/Source/WebCore/svg/SVGCircleElement.cpp
index 49d4593..ebdaa52 100644
--- a/Source/WebCore/svg/SVGCircleElement.cpp
+++ b/Source/WebCore/svg/SVGCircleElement.cpp
@@ -32,7 +32,6 @@
 
 inline SVGCircleElement::SVGCircleElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::circleTag));
 
@@ -63,7 +62,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -75,7 +73,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGCircleElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGCircleElement.h b/Source/WebCore/svg/SVGCircleElement.h
index 71b7630..9fe9984 100644
--- a/Source/WebCore/svg/SVGCircleElement.h
+++ b/Source/WebCore/svg/SVGCircleElement.h
@@ -21,13 +21,12 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-class SVGCircleElement final : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGCircleElement final : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGCircleElement);
 public:
     static Ref<SVGCircleElement> create(const QualifiedName&, Document&);
@@ -43,7 +42,7 @@
 private:
     SVGCircleElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCircleElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCircleElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGCircleElement.idl b/Source/WebCore/svg/SVGCircleElement.idl
index 54e1ab4..2188c07 100644
--- a/Source/WebCore/svg/SVGCircleElement.idl
+++ b/Source/WebCore/svg/SVGCircleElement.idl
@@ -29,5 +29,3 @@
     readonly attribute SVGAnimatedLength cy;
     readonly attribute SVGAnimatedLength r;
 };
-
-SVGCircleElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGClipPathElement.cpp b/Source/WebCore/svg/SVGClipPathElement.cpp
index 74f973c..9a8dc8d 100644
--- a/Source/WebCore/svg/SVGClipPathElement.cpp
+++ b/Source/WebCore/svg/SVGClipPathElement.cpp
@@ -36,7 +36,6 @@
 
 inline SVGClipPathElement::SVGClipPathElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::clipPathTag));
 
@@ -60,7 +59,6 @@
     }
 
     SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGClipPathElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -74,7 +72,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGClipPathElement::childrenChanged(const ChildChange& change)
diff --git a/Source/WebCore/svg/SVGClipPathElement.h b/Source/WebCore/svg/SVGClipPathElement.h
index fb3ef17..c2548ef 100644
--- a/Source/WebCore/svg/SVGClipPathElement.h
+++ b/Source/WebCore/svg/SVGClipPathElement.h
@@ -21,7 +21,6 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 #include "SVGUnitTypes.h"
 
@@ -29,7 +28,7 @@
 
 class RenderObject;
 
-class SVGClipPathElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGClipPathElement final : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGClipPathElement);
 public:
     static Ref<SVGClipPathElement> create(const QualifiedName&, Document&);
@@ -40,7 +39,7 @@
 private:
     SVGClipPathElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGClipPathElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGClipPathElement, SVGGraphicsElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGClipPathElement.idl b/Source/WebCore/svg/SVGClipPathElement.idl
index 96b5af1..20a9a10 100644
--- a/Source/WebCore/svg/SVGClipPathElement.idl
+++ b/Source/WebCore/svg/SVGClipPathElement.idl
@@ -27,5 +27,3 @@
 interface SVGClipPathElement : SVGGraphicsElement {
     readonly attribute SVGAnimatedEnumeration clipPathUnits;
 };
-
-SVGClipPathElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGCursorElement.cpp b/Source/WebCore/svg/SVGCursorElement.cpp
index 2fd5766..ff3b643 100644
--- a/Source/WebCore/svg/SVGCursorElement.cpp
+++ b/Source/WebCore/svg/SVGCursorElement.cpp
@@ -35,7 +35,6 @@
 
 inline SVGCursorElement::SVGCursorElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGTests(this)
     , SVGURIReference(this)
 {
@@ -72,7 +71,6 @@
 
     SVGElement::parseAttribute(name, value);
     SVGTests::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
 }
 
diff --git a/Source/WebCore/svg/SVGCursorElement.h b/Source/WebCore/svg/SVGCursorElement.h
index 5dd4d4b..3aeaf26 100644
--- a/Source/WebCore/svg/SVGCursorElement.h
+++ b/Source/WebCore/svg/SVGCursorElement.h
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGTests.h"
 #include "SVGURIReference.h"
 
@@ -30,7 +29,7 @@
 
 class CSSCursorImageValue;
 
-class SVGCursorElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGTests, public SVGURIReference {
+class SVGCursorElement final : public SVGElement, public SVGTests, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGCursorElement);
 public:
     static Ref<SVGCursorElement> create(const QualifiedName&, Document&);
@@ -49,7 +48,7 @@
 private:
     SVGCursorElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCursorElement, SVGElement, SVGExternalResourcesRequired, SVGTests, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGCursorElement, SVGElement, SVGTests, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGCursorElement.idl b/Source/WebCore/svg/SVGCursorElement.idl
index 203f079..a43cb4d 100644
--- a/Source/WebCore/svg/SVGCursorElement.idl
+++ b/Source/WebCore/svg/SVGCursorElement.idl
@@ -28,6 +28,5 @@
     readonly attribute SVGAnimatedLength y;
 };
 
-SVGCursorElement implements SVGExternalResourcesRequired;
 SVGCursorElement implements SVGTests;
 SVGCursorElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGDefsElement.cpp b/Source/WebCore/svg/SVGDefsElement.cpp
index acbe55e..7d20165 100644
--- a/Source/WebCore/svg/SVGDefsElement.cpp
+++ b/Source/WebCore/svg/SVGDefsElement.cpp
@@ -32,7 +32,6 @@
 
 inline SVGDefsElement::SVGDefsElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::defsTag));
 }
diff --git a/Source/WebCore/svg/SVGDefsElement.h b/Source/WebCore/svg/SVGDefsElement.h
index 8fbbef8..03e55eb 100644
--- a/Source/WebCore/svg/SVGDefsElement.h
+++ b/Source/WebCore/svg/SVGDefsElement.h
@@ -21,12 +21,11 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 
 namespace WebCore {
 
-class SVGDefsElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGDefsElement final : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGDefsElement);
 public:
     static Ref<SVGDefsElement> create(const QualifiedName&, Document&);
@@ -34,7 +33,7 @@
 private:
     SVGDefsElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGDefsElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGDefsElement, SVGGraphicsElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     bool isValid() const final;
diff --git a/Source/WebCore/svg/SVGDefsElement.idl b/Source/WebCore/svg/SVGDefsElement.idl
index 5cd565e..7ecdd73 100644
--- a/Source/WebCore/svg/SVGDefsElement.idl
+++ b/Source/WebCore/svg/SVGDefsElement.idl
@@ -25,5 +25,3 @@
 
 interface SVGDefsElement : SVGGraphicsElement {
 };
-
-SVGDefsElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGEllipseElement.cpp b/Source/WebCore/svg/SVGEllipseElement.cpp
index adb6cbc..7c325b2 100644
--- a/Source/WebCore/svg/SVGEllipseElement.cpp
+++ b/Source/WebCore/svg/SVGEllipseElement.cpp
@@ -32,7 +32,6 @@
 
 inline SVGEllipseElement::SVGEllipseElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::ellipseTag));
 
@@ -66,7 +65,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -78,7 +76,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGEllipseElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGEllipseElement.h b/Source/WebCore/svg/SVGEllipseElement.h
index ca07b3f..d8fe9bd 100644
--- a/Source/WebCore/svg/SVGEllipseElement.h
+++ b/Source/WebCore/svg/SVGEllipseElement.h
@@ -21,13 +21,12 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-class SVGEllipseElement final : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGEllipseElement final : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGEllipseElement);
 public:
     static Ref<SVGEllipseElement> create(const QualifiedName&, Document&);
@@ -45,7 +44,7 @@
 private:
     SVGEllipseElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGEllipseElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGEllipseElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGEllipseElement.idl b/Source/WebCore/svg/SVGEllipseElement.idl
index 7d09a65..65579bf 100644
--- a/Source/WebCore/svg/SVGEllipseElement.idl
+++ b/Source/WebCore/svg/SVGEllipseElement.idl
@@ -29,5 +29,3 @@
     readonly attribute SVGAnimatedLength rx;
     readonly attribute SVGAnimatedLength ry;
 };
-
-SVGEllipseElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGExternalResourcesRequired.cpp b/Source/WebCore/svg/SVGExternalResourcesRequired.cpp
deleted file mode 100644
index b233b55..0000000
--- a/Source/WebCore/svg/SVGExternalResourcesRequired.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org>
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "SVGExternalResourcesRequired.h"
-
-#include "RenderSVGResource.h"
-#include "RenderSVGShape.h"
-#include "SVGElement.h"
-#include "SVGNames.h"
-
-namespace WebCore {
-
-SVGExternalResourcesRequired::SVGExternalResourcesRequired(SVGElement* contextElement)
-    : m_contextElement(*contextElement)
-    , m_externalResourcesRequired(SVGAnimatedBoolean::create(contextElement))
-{
-    static std::once_flag onceFlag;
-    std::call_once(onceFlag, [] {
-        PropertyRegistry::registerProperty<SVGNames::externalResourcesRequiredAttr, &SVGExternalResourcesRequired::m_externalResourcesRequired>();
-    });
-}
-
-void SVGExternalResourcesRequired::parseAttribute(const QualifiedName& name, const AtomString& value)
-{
-    if (name == SVGNames::externalResourcesRequiredAttr)
-        m_externalResourcesRequired->setBaseValInternal(value == "true");
-}
-
-void SVGExternalResourcesRequired::svgAttributeChanged(const QualifiedName& attrName)
-{
-    if (!isKnownAttribute(attrName))
-        return;
-    if (!m_contextElement.isConnected())
-        return;
-
-    auto* renderer = m_contextElement.renderer();
-    if (renderer && is<RenderSVGShape>(renderer)) {
-        SVGElement::InstanceInvalidationGuard guard(m_contextElement);
-        RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
-    }
-}
-
-void SVGExternalResourcesRequired::addSupportedAttributes(HashSet<QualifiedName>& supportedAttributes)
-{
-    supportedAttributes.add(SVGNames::externalResourcesRequiredAttr);
-}
-
-}
diff --git a/Source/WebCore/svg/SVGExternalResourcesRequired.h b/Source/WebCore/svg/SVGExternalResourcesRequired.h
deleted file mode 100644
index 800ba90..0000000
--- a/Source/WebCore/svg/SVGExternalResourcesRequired.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "QualifiedName.h"
-#include "SVGPropertyOwnerRegistry.h"
-#include <wtf/HashSet.h>
-
-namespace WebCore {
-
-class SVGElement;
-
-// Notes on a SVG 1.1 spec discrepancy:
-// The SVG DOM defines the attribute externalResourcesRequired as being of type SVGAnimatedBoolean, whereas the 
-// SVG language definition says that externalResourcesRequired is not animated. Because the SVG language definition
-// states that externalResourcesRequired cannot be animated, the animVal will always be the same as the baseVal.
-// FIXME: When implementing animVal support, make sure that animVal==baseVal for externalResourcesRequired
-class SVGExternalResourcesRequired {
-    WTF_MAKE_NONCOPYABLE(SVGExternalResourcesRequired);
-public:
-    virtual ~SVGExternalResourcesRequired() = default;
-
-    void parseAttribute(const QualifiedName&, const AtomString&);
-    void svgAttributeChanged(const QualifiedName&);
-
-    static void addSupportedAttributes(HashSet<QualifiedName>&);
-
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGExternalResourcesRequired>;
-
-    bool externalResourcesRequired() const { return m_externalResourcesRequired->currentValue(); }
-    SVGAnimatedBoolean& externalResourcesRequiredAnimated() { return m_externalResourcesRequired; }
-
-protected:
-    SVGExternalResourcesRequired(SVGElement* contextElement);
-    static bool isKnownAttribute(const QualifiedName& attributeName) { return PropertyRegistry::isKnownAttribute(attributeName); }
-
-private:
-    SVGElement& m_contextElement;
-    Ref<SVGAnimatedBoolean> m_externalResourcesRequired;
-};
-
-} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGExternalResourcesRequired.idl b/Source/WebCore/svg/SVGExternalResourcesRequired.idl
deleted file mode 100644
index 0220889..0000000
--- a/Source/WebCore/svg/SVGExternalResourcesRequired.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 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. 
- */
-
-[
-    NoInterfaceObject,
-] interface SVGExternalResourcesRequired { 
-    readonly attribute SVGAnimatedBoolean externalResourcesRequired;
-};
diff --git a/Source/WebCore/svg/SVGFEImageElement.cpp b/Source/WebCore/svg/SVGFEImageElement.cpp
index 8f8213a..2d59e50 100644
--- a/Source/WebCore/svg/SVGFEImageElement.cpp
+++ b/Source/WebCore/svg/SVGFEImageElement.cpp
@@ -40,7 +40,6 @@
 
 inline SVGFEImageElement::SVGFEImageElement(const QualifiedName& tagName, Document& document)
     : SVGFilterPrimitiveStandardAttributes(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
 {
     ASSERT(hasTagName(SVGNames::feImageTag));
@@ -126,7 +125,6 @@
 
     SVGFilterPrimitiveStandardAttributes::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGFEImageElement::svgAttributeChanged(const QualifiedName& attrName)
diff --git a/Source/WebCore/svg/SVGFEImageElement.h b/Source/WebCore/svg/SVGFEImageElement.h
index 0b868b3..f27dc38 100644
--- a/Source/WebCore/svg/SVGFEImageElement.h
+++ b/Source/WebCore/svg/SVGFEImageElement.h
@@ -23,14 +23,13 @@
 
 #include "CachedImageClient.h"
 #include "CachedResourceHandle.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFEImage.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGURIReference.h"
 
 namespace WebCore {
 
-class SVGFEImageElement final : public SVGFilterPrimitiveStandardAttributes, public SVGExternalResourcesRequired, public SVGURIReference, public CachedImageClient {
+class SVGFEImageElement final : public SVGFilterPrimitiveStandardAttributes, public SVGURIReference, public CachedImageClient {
     WTF_MAKE_ISO_ALLOCATED(SVGFEImageElement);
 public:
     static Ref<SVGFEImageElement> create(const QualifiedName&, Document&);
@@ -45,7 +44,7 @@
 private:
     SVGFEImageElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFEImageElement, SVGFilterPrimitiveStandardAttributes, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) override;
diff --git a/Source/WebCore/svg/SVGFEImageElement.idl b/Source/WebCore/svg/SVGFEImageElement.idl
index 422f432..45a6adc 100644
--- a/Source/WebCore/svg/SVGFEImageElement.idl
+++ b/Source/WebCore/svg/SVGFEImageElement.idl
@@ -27,6 +27,5 @@
     readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
 
-SVGFEImageElement implements SVGExternalResourcesRequired;
 SVGFEImageElement implements SVGFilterPrimitiveStandardAttributes;
 SVGFEImageElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGFilterElement.cpp b/Source/WebCore/svg/SVGFilterElement.cpp
index 186b771..7432ebb 100644
--- a/Source/WebCore/svg/SVGFilterElement.cpp
+++ b/Source/WebCore/svg/SVGFilterElement.cpp
@@ -40,7 +40,6 @@
 
 inline SVGFilterElement::SVGFilterElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
 {
     // Spec: If the x/y attribute is not specified, the effect is as if a value of "-10%" were specified.
@@ -88,7 +87,6 @@
 
     SVGElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGFilterElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -106,7 +104,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGFilterElement::childrenChanged(const ChildChange& change)
diff --git a/Source/WebCore/svg/SVGFilterElement.h b/Source/WebCore/svg/SVGFilterElement.h
index 5903209..1acd2ae 100644
--- a/Source/WebCore/svg/SVGFilterElement.h
+++ b/Source/WebCore/svg/SVGFilterElement.h
@@ -24,13 +24,12 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGURIReference.h"
 #include "SVGUnitTypes.h"
 
 namespace WebCore {
 
-class SVGFilterElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGURIReference {
+class SVGFilterElement final : public SVGElement, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGFilterElement);
 public:
     static Ref<SVGFilterElement> create(const QualifiedName&, Document&);
@@ -52,7 +51,7 @@
 private:
     SVGFilterElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFilterElement, SVGElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGFilterElement.idl b/Source/WebCore/svg/SVGFilterElement.idl
index 5da6496..4e8c9d3 100644
--- a/Source/WebCore/svg/SVGFilterElement.idl
+++ b/Source/WebCore/svg/SVGFilterElement.idl
@@ -33,5 +33,4 @@
     readonly attribute SVGAnimatedLength      height;
 };
 
-SVGFilterElement implements SVGExternalResourcesRequired;
 SVGFilterElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGFontElement.cpp b/Source/WebCore/svg/SVGFontElement.cpp
index 6855d83..f3c7d35 100644
--- a/Source/WebCore/svg/SVGFontElement.cpp
+++ b/Source/WebCore/svg/SVGFontElement.cpp
@@ -42,7 +42,6 @@
 
 inline SVGFontElement::SVGFontElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::fontTag));
 }
diff --git a/Source/WebCore/svg/SVGFontElement.h b/Source/WebCore/svg/SVGFontElement.h
index cd1e8ea..45e6b88 100644
--- a/Source/WebCore/svg/SVGFontElement.h
+++ b/Source/WebCore/svg/SVGFontElement.h
@@ -25,7 +25,6 @@
 #if ENABLE(SVG_FONTS)
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGParserUtilities.h"
 
 namespace WebCore {
@@ -42,7 +41,7 @@
     float kerning { 0 };
 };
 
-class SVGFontElement final : public SVGElement, public SVGExternalResourcesRequired {
+class SVGFontElement final : public SVGElement {
     WTF_MAKE_ISO_ALLOCATED(SVGFontElement);
 public:
     static Ref<SVGFontElement> create(const QualifiedName&, Document&);
@@ -52,7 +51,7 @@
 
     bool rendererIsNeeded(const RenderStyle&) final { return false; }
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFontElement, SVGElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGFontElement, SVGElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     PropertyRegistry m_propertyRegistry { *this };
diff --git a/Source/WebCore/svg/SVGForeignObjectElement.cpp b/Source/WebCore/svg/SVGForeignObjectElement.cpp
index 7ff3b86..8e676d9 100644
--- a/Source/WebCore/svg/SVGForeignObjectElement.cpp
+++ b/Source/WebCore/svg/SVGForeignObjectElement.cpp
@@ -37,7 +37,6 @@
 
 inline SVGForeignObjectElement::SVGForeignObjectElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::foreignObjectTag));
     static std::once_flag onceFlag;
@@ -70,7 +69,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -88,7 +86,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGForeignObjectElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGForeignObjectElement.h b/Source/WebCore/svg/SVGForeignObjectElement.h
index db20433..82faf2e 100644
--- a/Source/WebCore/svg/SVGForeignObjectElement.h
+++ b/Source/WebCore/svg/SVGForeignObjectElement.h
@@ -19,14 +19,13 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 #include "SVGNames.h"
 #include "SVGURIReference.h"
 
 namespace WebCore {
 
-class SVGForeignObjectElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGForeignObjectElement final : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGForeignObjectElement);
 public:
     static Ref<SVGForeignObjectElement> create(const QualifiedName&, Document&);
@@ -44,7 +43,7 @@
 private:
     SVGForeignObjectElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGForeignObjectElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGForeignObjectElement, SVGGraphicsElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGForeignObjectElement.idl b/Source/WebCore/svg/SVGForeignObjectElement.idl
index 8856757..d3dee87 100644
--- a/Source/WebCore/svg/SVGForeignObjectElement.idl
+++ b/Source/WebCore/svg/SVGForeignObjectElement.idl
@@ -29,5 +29,3 @@
     readonly attribute SVGAnimatedLength width;
     readonly attribute SVGAnimatedLength height;
 };
-
-SVGForeignObjectElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGGElement.cpp b/Source/WebCore/svg/SVGGElement.cpp
index 7c050e0..ddc1799 100644
--- a/Source/WebCore/svg/SVGGElement.cpp
+++ b/Source/WebCore/svg/SVGGElement.cpp
@@ -35,7 +35,6 @@
 
 SVGGElement::SVGGElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::gTag));
 }
@@ -50,18 +49,6 @@
     return create(SVGNames::gTag, document);
 }
 
-void SVGGElement::parseAttribute(const QualifiedName& name, const AtomString& value)
-{
-    SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
-}
-
-void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
-{
-    SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
-}
-
 RenderPtr<RenderElement> SVGGElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
 {
     // SVG 1.1 testsuite explicitly uses constructs like <g display="none"><linearGradient>
diff --git a/Source/WebCore/svg/SVGGElement.h b/Source/WebCore/svg/SVGGElement.h
index 668cee9..4999670 100644
--- a/Source/WebCore/svg/SVGGElement.h
+++ b/Source/WebCore/svg/SVGGElement.h
@@ -21,12 +21,11 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 
 namespace WebCore {
 
-class SVGGElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGGElement final : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGGElement);
 public:
     static Ref<SVGGElement> create(const QualifiedName&, Document&);
@@ -37,12 +36,9 @@
 
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGElement, SVGGraphicsElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
-    void parseAttribute(const QualifiedName&, const AtomString&) final;
-    void svgAttributeChanged(const QualifiedName&) final;
-
     bool isValid() const final { return SVGTests::isValid(); }
     bool rendererIsNeeded(const RenderStyle&) final;
 
diff --git a/Source/WebCore/svg/SVGGElement.idl b/Source/WebCore/svg/SVGGElement.idl
index 62cc1bb..c934f23 100644
--- a/Source/WebCore/svg/SVGGElement.idl
+++ b/Source/WebCore/svg/SVGGElement.idl
@@ -25,5 +25,3 @@
 
 interface SVGGElement : SVGGraphicsElement {
 };
-
-SVGGElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGGradientElement.cpp b/Source/WebCore/svg/SVGGradientElement.cpp
index bf3d886..0c607d8 100644
--- a/Source/WebCore/svg/SVGGradientElement.cpp
+++ b/Source/WebCore/svg/SVGGradientElement.cpp
@@ -40,7 +40,6 @@
 
 SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
 {
     static std::once_flag onceFlag;
@@ -74,7 +73,6 @@
 
     SVGElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
diff --git a/Source/WebCore/svg/SVGGradientElement.h b/Source/WebCore/svg/SVGGradientElement.h
index 6fcf452..17470fc 100644
--- a/Source/WebCore/svg/SVGGradientElement.h
+++ b/Source/WebCore/svg/SVGGradientElement.h
@@ -23,7 +23,6 @@
 
 #include "Gradient.h"
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGNames.h"
 #include "SVGURIReference.h"
 #include "SVGUnitTypes.h"
@@ -70,7 +69,7 @@
     }
 };
 
-class SVGGradientElement : public SVGElement, public SVGExternalResourcesRequired, public SVGURIReference {
+class SVGGradientElement : public SVGElement, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGGradientElement);
 public:
     enum {
@@ -82,7 +81,7 @@
 
     Vector<Gradient::ColorStop> buildStops();
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGradientElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGradientElement, SVGElement, SVGURIReference>;
 
     SVGSpreadMethodType spreadMethod() const { return m_spreadMethod->currentValue<SVGSpreadMethodType>(); }
     SVGUnitTypes::SVGUnitType gradientUnits() const { return m_gradientUnits->currentValue<SVGUnitTypes::SVGUnitType>(); }
diff --git a/Source/WebCore/svg/SVGGradientElement.idl b/Source/WebCore/svg/SVGGradientElement.idl
index 2ba9fe7..c4d6f48 100644
--- a/Source/WebCore/svg/SVGGradientElement.idl
+++ b/Source/WebCore/svg/SVGGradientElement.idl
@@ -37,5 +37,4 @@
     readonly attribute SVGAnimatedEnumeration   spreadMethod;
 };
 
-SVGGradientElement implements SVGExternalResourcesRequired;
 SVGGradientElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGImageElement.cpp b/Source/WebCore/svg/SVGImageElement.cpp
index 491f2a0..46f893b 100644
--- a/Source/WebCore/svg/SVGImageElement.cpp
+++ b/Source/WebCore/svg/SVGImageElement.cpp
@@ -39,7 +39,6 @@
 
 inline SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
     , m_imageLoader(*this)
 {
@@ -90,7 +89,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
 }
 
@@ -126,7 +124,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGImageElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGImageElement.h b/Source/WebCore/svg/SVGImageElement.h
index eaff618..c2179f1 100644
--- a/Source/WebCore/svg/SVGImageElement.h
+++ b/Source/WebCore/svg/SVGImageElement.h
@@ -21,14 +21,13 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 #include "SVGImageLoader.h"
 #include "SVGURIReference.h"
 
 namespace WebCore {
 
-class SVGImageElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGURIReference {
+class SVGImageElement final : public SVGGraphicsElement, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGImageElement);
 public:
     static Ref<SVGImageElement> create(const QualifiedName&, Document&);
@@ -51,7 +50,7 @@
 private:
     SVGImageElement(const QualifiedName&, Document&);
     
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGImageElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGImageElement, SVGGraphicsElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGImageElement.idl b/Source/WebCore/svg/SVGImageElement.idl
index 53355a0..8be8228 100644
--- a/Source/WebCore/svg/SVGImageElement.idl
+++ b/Source/WebCore/svg/SVGImageElement.idl
@@ -31,5 +31,4 @@
     readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
 
-SVGImageElement implements SVGExternalResourcesRequired;
 SVGImageElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGLineElement.cpp b/Source/WebCore/svg/SVGLineElement.cpp
index 3c4d39e..a42eae5 100644
--- a/Source/WebCore/svg/SVGLineElement.cpp
+++ b/Source/WebCore/svg/SVGLineElement.cpp
@@ -32,7 +32,6 @@
 
 inline SVGLineElement::SVGLineElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::lineTag));
 
@@ -66,7 +65,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -83,7 +81,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 bool SVGLineElement::selfHasRelativeLengths() const
diff --git a/Source/WebCore/svg/SVGLineElement.h b/Source/WebCore/svg/SVGLineElement.h
index 36a0bb4..8c0eafe 100644
--- a/Source/WebCore/svg/SVGLineElement.h
+++ b/Source/WebCore/svg/SVGLineElement.h
@@ -21,13 +21,12 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-class SVGLineElement final : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGLineElement final : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGLineElement);
 public:
     static Ref<SVGLineElement> create(const QualifiedName&, Document&);
@@ -45,7 +44,7 @@
 private:
     SVGLineElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLineElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGLineElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGLineElement.idl b/Source/WebCore/svg/SVGLineElement.idl
index 8d08451..c46d222 100644
--- a/Source/WebCore/svg/SVGLineElement.idl
+++ b/Source/WebCore/svg/SVGLineElement.idl
@@ -29,5 +29,3 @@
     readonly attribute SVGAnimatedLength x2;
     readonly attribute SVGAnimatedLength y2;
 };
-
-SVGLineElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGMPathElement.cpp b/Source/WebCore/svg/SVGMPathElement.cpp
index d803924..c633af5 100644
--- a/Source/WebCore/svg/SVGMPathElement.cpp
+++ b/Source/WebCore/svg/SVGMPathElement.cpp
@@ -34,7 +34,6 @@
 
 inline SVGMPathElement::SVGMPathElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
 {
     ASSERT(hasTagName(SVGNames::mpathTag));
@@ -105,7 +104,6 @@
 {
     SVGElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGMPathElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -117,7 +115,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RefPtr<SVGPathElement> SVGMPathElement::pathElement()
diff --git a/Source/WebCore/svg/SVGMPathElement.h b/Source/WebCore/svg/SVGMPathElement.h
index 67d1db3..0fd735f 100644
--- a/Source/WebCore/svg/SVGMPathElement.h
+++ b/Source/WebCore/svg/SVGMPathElement.h
@@ -21,7 +21,6 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGNames.h"
 #include "SVGURIReference.h"
 
@@ -29,7 +28,7 @@
     
 class SVGPathElement;
 
-class SVGMPathElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGURIReference {
+class SVGMPathElement final : public SVGElement, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGMPathElement);
 public:
     static Ref<SVGMPathElement> create(const QualifiedName&, Document&);
@@ -43,7 +42,7 @@
 private:
     SVGMPathElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMPathElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMPathElement, SVGElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGMPathElement.idl b/Source/WebCore/svg/SVGMPathElement.idl
index c5d58b6..b1d5359 100644
--- a/Source/WebCore/svg/SVGMPathElement.idl
+++ b/Source/WebCore/svg/SVGMPathElement.idl
@@ -26,5 +26,4 @@
 interface SVGMPathElement : SVGElement {
 };
 
-SVGMPathElement implements SVGExternalResourcesRequired;
 SVGMPathElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGMarkerElement.cpp b/Source/WebCore/svg/SVGMarkerElement.cpp
index 8306fd7..98ab588 100644
--- a/Source/WebCore/svg/SVGMarkerElement.cpp
+++ b/Source/WebCore/svg/SVGMarkerElement.cpp
@@ -33,7 +33,6 @@
 
 inline SVGMarkerElement::SVGMarkerElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGFitToViewBox(this)
 {
     // Spec: If the markerWidth/markerHeight attribute is not specified, the effect is as if a value of "3" were specified.
@@ -90,7 +89,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGFitToViewBox::parseAttribute(name, value);
 }
 
@@ -112,7 +110,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGMarkerElement::childrenChanged(const ChildChange& change)
diff --git a/Source/WebCore/svg/SVGMarkerElement.h b/Source/WebCore/svg/SVGMarkerElement.h
index ff76b07..7110953 100644
--- a/Source/WebCore/svg/SVGMarkerElement.h
+++ b/Source/WebCore/svg/SVGMarkerElement.h
@@ -22,13 +22,12 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 #include "SVGMarkerTypes.h"
 
 namespace WebCore {
 
-class SVGMarkerElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGFitToViewBox {
+class SVGMarkerElement final : public SVGElement, public SVGFitToViewBox {
     WTF_MAKE_ISO_ALLOCATED(SVGMarkerElement);
 public:
     // Forward declare enumerations in the W3C naming scheme, for IDL generation.
@@ -71,7 +70,7 @@
 private:
     SVGMarkerElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMarkerElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMarkerElement, SVGElement, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) override;
diff --git a/Source/WebCore/svg/SVGMarkerElement.idl b/Source/WebCore/svg/SVGMarkerElement.idl
index edd8de5..0337dc6 100644
--- a/Source/WebCore/svg/SVGMarkerElement.idl
+++ b/Source/WebCore/svg/SVGMarkerElement.idl
@@ -46,5 +46,4 @@
     void setOrientToAngle(SVGAngle angle);
 };
 
-SVGMarkerElement implements SVGExternalResourcesRequired;
 SVGMarkerElement implements SVGFitToViewBox;
diff --git a/Source/WebCore/svg/SVGMaskElement.cpp b/Source/WebCore/svg/SVGMaskElement.cpp
index b7a0f11..f6860a1 100644
--- a/Source/WebCore/svg/SVGMaskElement.cpp
+++ b/Source/WebCore/svg/SVGMaskElement.cpp
@@ -41,7 +41,6 @@
 
 inline SVGMaskElement::SVGMaskElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGTests(this)
 {
     // Spec: If the x/y attribute is not specified, the effect is as if a value of "-10%" were specified.
@@ -94,7 +93,6 @@
 
     SVGElement::parseAttribute(name, value);
     SVGTests::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGMaskElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -112,7 +110,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGMaskElement::childrenChanged(const ChildChange& change)
diff --git a/Source/WebCore/svg/SVGMaskElement.h b/Source/WebCore/svg/SVGMaskElement.h
index c3e49ba..490dc22 100644
--- a/Source/WebCore/svg/SVGMaskElement.h
+++ b/Source/WebCore/svg/SVGMaskElement.h
@@ -21,14 +21,13 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGNames.h"
 #include "SVGTests.h"
 #include "SVGUnitTypes.h"
 
 namespace WebCore {
 
-class SVGMaskElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGTests {
+class SVGMaskElement final : public SVGElement, public SVGTests {
     WTF_MAKE_ISO_ALLOCATED(SVGMaskElement);
 public:
     static Ref<SVGMaskElement> create(const QualifiedName&, Document&);
@@ -50,7 +49,7 @@
 private:
     SVGMaskElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMaskElement, SVGElement, SVGExternalResourcesRequired, SVGTests>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGMaskElement, SVGElement, SVGTests>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGMaskElement.idl b/Source/WebCore/svg/SVGMaskElement.idl
index e5bb8c3..b7b6b45 100644
--- a/Source/WebCore/svg/SVGMaskElement.idl
+++ b/Source/WebCore/svg/SVGMaskElement.idl
@@ -33,5 +33,4 @@
     readonly attribute SVGAnimatedLength height;
 };
 
-SVGMaskElement implements SVGExternalResourcesRequired;
 SVGMaskElement implements SVGTests;
diff --git a/Source/WebCore/svg/SVGPathElement.cpp b/Source/WebCore/svg/SVGPathElement.cpp
index 6ba1440..e1cff5c 100644
--- a/Source/WebCore/svg/SVGPathElement.cpp
+++ b/Source/WebCore/svg/SVGPathElement.cpp
@@ -37,7 +37,6 @@
 
 inline SVGPathElement::SVGPathElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::pathTag));
 
@@ -61,7 +60,6 @@
     }
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -79,7 +77,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGPathElement::invalidateMPathDependencies()
diff --git a/Source/WebCore/svg/SVGPathElement.h b/Source/WebCore/svg/SVGPathElement.h
index 3a59773..917e33b 100644
--- a/Source/WebCore/svg/SVGPathElement.h
+++ b/Source/WebCore/svg/SVGPathElement.h
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "Path.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 #include "SVGPathByteStream.h"
@@ -33,7 +32,7 @@
 class SVGPathSegList;
 class SVGPoint;
 
-class SVGPathElement final : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGPathElement final : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGPathElement);
 public:
     static Ref<SVGPathElement> create(const QualifiedName&, Document&);
@@ -108,7 +107,7 @@
 private:
     SVGPathElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPathElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGPathElement.idl b/Source/WebCore/svg/SVGPathElement.idl
index ee6bec8..a53878b 100644
--- a/Source/WebCore/svg/SVGPathElement.idl
+++ b/Source/WebCore/svg/SVGPathElement.idl
@@ -101,5 +101,3 @@
     readonly attribute SVGPathSegList animatedPathSegList;
     readonly attribute SVGPathSegList animatedNormalizedPathSegList;
 };
-
-SVGPathElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGPatternElement.cpp b/Source/WebCore/svg/SVGPatternElement.cpp
index 8389a71..d6b38d7 100644
--- a/Source/WebCore/svg/SVGPatternElement.cpp
+++ b/Source/WebCore/svg/SVGPatternElement.cpp
@@ -47,7 +47,6 @@
 
 inline SVGPatternElement::SVGPatternElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGFitToViewBox(this)
     , SVGTests(this)
     , SVGURIReference(this)
@@ -106,7 +105,6 @@
     SVGElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
     SVGTests::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGFitToViewBox::parseAttribute(name, value);
 }
 
@@ -125,7 +123,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 void SVGPatternElement::childrenChanged(const ChildChange& change)
diff --git a/Source/WebCore/svg/SVGPatternElement.h b/Source/WebCore/svg/SVGPatternElement.h
index 1e661d7f..575bab2 100644
--- a/Source/WebCore/svg/SVGPatternElement.h
+++ b/Source/WebCore/svg/SVGPatternElement.h
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 #include "SVGNames.h"
 #include "SVGTests.h"
@@ -33,7 +32,7 @@
 
 struct PatternAttributes;
  
-class SVGPatternElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGFitToViewBox, public SVGTests, public SVGURIReference {
+class SVGPatternElement final : public SVGElement, public SVGFitToViewBox, public SVGTests, public SVGURIReference {
     WTF_MAKE_ISO_ALLOCATED(SVGPatternElement);
 public:
     static Ref<SVGPatternElement> create(const QualifiedName&, Document&);
@@ -61,7 +60,7 @@
 private:
     SVGPatternElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPatternElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGTests, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPatternElement, SVGElement, SVGFitToViewBox, SVGTests, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGPatternElement.idl b/Source/WebCore/svg/SVGPatternElement.idl
index 5fecc65..55514d4 100644
--- a/Source/WebCore/svg/SVGPatternElement.idl
+++ b/Source/WebCore/svg/SVGPatternElement.idl
@@ -33,7 +33,6 @@
     readonly attribute SVGAnimatedLength        height;
 };
 
-SVGPatternElement implements SVGExternalResourcesRequired;
 SVGPatternElement implements SVGFitToViewBox;
 SVGPatternElement implements SVGTests;
 SVGPatternElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGPolyElement.cpp b/Source/WebCore/svg/SVGPolyElement.cpp
index 62bf314..ea1fe09 100644
--- a/Source/WebCore/svg/SVGPolyElement.cpp
+++ b/Source/WebCore/svg/SVGPolyElement.cpp
@@ -35,7 +35,6 @@
 
 SVGPolyElement::SVGPolyElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     static std::once_flag onceFlag;
     std::call_once(onceFlag, [] {
@@ -52,7 +51,6 @@
     }
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -67,7 +65,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 size_t SVGPolyElement::approximateMemoryCost() const
diff --git a/Source/WebCore/svg/SVGPolyElement.h b/Source/WebCore/svg/SVGPolyElement.h
index 5ee311f..3f888b1 100644
--- a/Source/WebCore/svg/SVGPolyElement.h
+++ b/Source/WebCore/svg/SVGPolyElement.h
@@ -21,13 +21,12 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-class SVGPolyElement : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGPolyElement : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGPolyElement);
 public:
     const SVGPointList& points() const { return m_points->currentValue(); }
@@ -41,7 +40,7 @@
     SVGPolyElement(const QualifiedName&, Document&);
 
 private:
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPolyElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPolyElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) override; 
diff --git a/Source/WebCore/svg/SVGPolygonElement.idl b/Source/WebCore/svg/SVGPolygonElement.idl
index e31b92b..36821e3 100644
--- a/Source/WebCore/svg/SVGPolygonElement.idl
+++ b/Source/WebCore/svg/SVGPolygonElement.idl
@@ -27,5 +27,3 @@
     readonly attribute SVGPointList points;
     readonly attribute SVGPointList animatedPoints;
 };
-
-SVGPolygonElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGPolylineElement.idl b/Source/WebCore/svg/SVGPolylineElement.idl
index ae4d567..095a52c 100644
--- a/Source/WebCore/svg/SVGPolylineElement.idl
+++ b/Source/WebCore/svg/SVGPolylineElement.idl
@@ -27,5 +27,3 @@
     readonly attribute SVGPointList points;
     readonly attribute SVGPointList animatedPoints;
 };
-
-SVGPolylineElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGRectElement.cpp b/Source/WebCore/svg/SVGRectElement.cpp
index eca13f0..37b6665 100644
--- a/Source/WebCore/svg/SVGRectElement.cpp
+++ b/Source/WebCore/svg/SVGRectElement.cpp
@@ -33,7 +33,6 @@
 
 inline SVGRectElement::SVGRectElement(const QualifiedName& tagName, Document& document)
     : SVGGeometryElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::rectTag));
 
@@ -73,7 +72,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGeometryElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -85,7 +83,6 @@
     }
 
     SVGGeometryElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 RenderPtr<RenderElement> SVGRectElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
diff --git a/Source/WebCore/svg/SVGRectElement.h b/Source/WebCore/svg/SVGRectElement.h
index c5f5f2c..3173968 100644
--- a/Source/WebCore/svg/SVGRectElement.h
+++ b/Source/WebCore/svg/SVGRectElement.h
@@ -21,13 +21,12 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGeometryElement.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-class SVGRectElement final : public SVGGeometryElement, public SVGExternalResourcesRequired {
+class SVGRectElement final : public SVGGeometryElement {
     WTF_MAKE_ISO_ALLOCATED(SVGRectElement);
 public:
     static Ref<SVGRectElement> create(const QualifiedName&, Document&);
@@ -49,7 +48,7 @@
 private:
     SVGRectElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRectElement, SVGGeometryElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGRectElement, SVGGeometryElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGRectElement.idl b/Source/WebCore/svg/SVGRectElement.idl
index ecfcee6..0078d2b 100644
--- a/Source/WebCore/svg/SVGRectElement.idl
+++ b/Source/WebCore/svg/SVGRectElement.idl
@@ -32,5 +32,3 @@
     readonly attribute SVGAnimatedLength rx;
     readonly attribute SVGAnimatedLength ry;
 };
-
-SVGRectElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGSVGElement.cpp b/Source/WebCore/svg/SVGSVGElement.cpp
index 47f0c3c..e1b5f3b 100644
--- a/Source/WebCore/svg/SVGSVGElement.cpp
+++ b/Source/WebCore/svg/SVGSVGElement.cpp
@@ -53,7 +53,6 @@
 
 inline SVGSVGElement::SVGSVGElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGFitToViewBox(this)
     , m_timeContainer(SMILTimeContainer::create(*this))
 {
@@ -255,7 +254,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGFitToViewBox::parseAttribute(name, value);
     SVGZoomAndPan::parseAttribute(name, value);
 }
@@ -280,7 +278,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 unsigned SVGSVGElement::suspendRedraw(unsigned)
diff --git a/Source/WebCore/svg/SVGSVGElement.h b/Source/WebCore/svg/SVGSVGElement.h
index 41b1e7c..81bcb34 100644
--- a/Source/WebCore/svg/SVGSVGElement.h
+++ b/Source/WebCore/svg/SVGSVGElement.h
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "FloatPoint.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 #include "SVGGraphicsElement.h"
 #include "SVGZoomAndPan.h"
@@ -39,7 +38,7 @@
 class SVGViewElement;
 class SVGViewSpec;
 
-class SVGSVGElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGFitToViewBox, public SVGZoomAndPan {
+class SVGSVGElement final : public SVGGraphicsElement, public SVGFitToViewBox, public SVGZoomAndPan {
     WTF_MAKE_ISO_ALLOCATED(SVGSVGElement);
 public: // DOM
     const AtomString& contentScriptType() const;
@@ -134,7 +133,7 @@
     SVGSVGElement(const QualifiedName&, Document&);
     virtual ~SVGSVGElement();
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSVGElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSVGElement, SVGGraphicsElement, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
     
     void parseAttribute(const QualifiedName&, const AtomString&) override;
diff --git a/Source/WebCore/svg/SVGSVGElement.idl b/Source/WebCore/svg/SVGSVGElement.idl
index 44aa519..47dad41 100644
--- a/Source/WebCore/svg/SVGSVGElement.idl
+++ b/Source/WebCore/svg/SVGSVGElement.idl
@@ -77,6 +77,5 @@
     Element getElementById([RequiresExistingAtomString] DOMString elementId);
 };
 
-SVGSVGElement implements SVGExternalResourcesRequired;
 SVGSVGElement implements SVGFitToViewBox;
 SVGSVGElement implements SVGZoomAndPan;
diff --git a/Source/WebCore/svg/SVGScriptElement.cpp b/Source/WebCore/svg/SVGScriptElement.cpp
index 4e16038..d248fd3 100644
--- a/Source/WebCore/svg/SVGScriptElement.cpp
+++ b/Source/WebCore/svg/SVGScriptElement.cpp
@@ -32,7 +32,6 @@
 
 inline SVGScriptElement::SVGScriptElement(const QualifiedName& tagName, Document& document, bool wasInsertedByParser, bool alreadyStarted)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
     , ScriptElement(*this, wasInsertedByParser, alreadyStarted)
     , m_loadEventTimer(*this, &SVGElement::loadEventTimerFired)
@@ -49,7 +48,6 @@
 {
     SVGElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGScriptElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -62,7 +60,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 Node::InsertedIntoAncestorResult SVGScriptElement::insertedIntoAncestor(InsertionType insertionType, ContainerNode& parentOfInsertedTree)
diff --git a/Source/WebCore/svg/SVGScriptElement.h b/Source/WebCore/svg/SVGScriptElement.h
index d038a08..7a9c7fd 100644
--- a/Source/WebCore/svg/SVGScriptElement.h
+++ b/Source/WebCore/svg/SVGScriptElement.h
@@ -22,14 +22,13 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGURIReference.h"
 #include "ScriptElement.h"
 #include "XLinkNames.h"
 
 namespace WebCore {
 
-class SVGScriptElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGURIReference, public ScriptElement {
+class SVGScriptElement final : public SVGElement, public SVGURIReference, public ScriptElement {
     WTF_MAKE_ISO_ALLOCATED(SVGScriptElement);
 public:
     static Ref<SVGScriptElement> create(const QualifiedName&, Document&, bool wasInsertedByParser);
@@ -40,7 +39,7 @@
 private:
     SVGScriptElement(const QualifiedName&, Document&, bool wasInsertedByParser, bool alreadyStarted);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGScriptElement, SVGElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGScriptElement, SVGElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGScriptElement.idl b/Source/WebCore/svg/SVGScriptElement.idl
index ef60d42..a491ab9 100644
--- a/Source/WebCore/svg/SVGScriptElement.idl
+++ b/Source/WebCore/svg/SVGScriptElement.idl
@@ -27,5 +27,4 @@
     [Reflect] attribute DOMString type;
 };
 
-SVGScriptElement implements SVGExternalResourcesRequired;
 SVGScriptElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGSwitchElement.cpp b/Source/WebCore/svg/SVGSwitchElement.cpp
index 989d435..8457b06 100644
--- a/Source/WebCore/svg/SVGSwitchElement.cpp
+++ b/Source/WebCore/svg/SVGSwitchElement.cpp
@@ -33,7 +33,6 @@
 
 inline SVGSwitchElement::SVGSwitchElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     ASSERT(hasTagName(SVGNames::switchTag));
 }
diff --git a/Source/WebCore/svg/SVGSwitchElement.h b/Source/WebCore/svg/SVGSwitchElement.h
index 3d14a4f..0b99dac 100644
--- a/Source/WebCore/svg/SVGSwitchElement.h
+++ b/Source/WebCore/svg/SVGSwitchElement.h
@@ -21,12 +21,11 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 
 namespace WebCore {
 
-class SVGSwitchElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGSwitchElement final : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGSwitchElement);
 public:
     static Ref<SVGSwitchElement> create(const QualifiedName&, Document&);
@@ -34,7 +33,7 @@
 private:
     SVGSwitchElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSwitchElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSwitchElement, SVGGraphicsElement>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     bool isValid() const final { return SVGTests::isValid(); }
diff --git a/Source/WebCore/svg/SVGSwitchElement.idl b/Source/WebCore/svg/SVGSwitchElement.idl
index 9b2a1df..7e8fdc2 100644
--- a/Source/WebCore/svg/SVGSwitchElement.idl
+++ b/Source/WebCore/svg/SVGSwitchElement.idl
@@ -25,5 +25,3 @@
 
 interface SVGSwitchElement : SVGGraphicsElement {
 };
-
-SVGSwitchElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGSymbolElement.cpp b/Source/WebCore/svg/SVGSymbolElement.cpp
index c7cc412..3f37e1b 100644
--- a/Source/WebCore/svg/SVGSymbolElement.cpp
+++ b/Source/WebCore/svg/SVGSymbolElement.cpp
@@ -33,7 +33,6 @@
 
 inline SVGSymbolElement::SVGSymbolElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGFitToViewBox(this)
 {
     ASSERT(hasTagName(SVGNames::symbolTag));
@@ -47,16 +46,9 @@
 void SVGSymbolElement::parseAttribute(const QualifiedName& name, const AtomString& value)
 {
     SVGElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGFitToViewBox::parseAttribute(name, value);
 }
 
-void SVGSymbolElement::svgAttributeChanged(const QualifiedName& attrName)
-{
-    SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
-}
-
 bool SVGSymbolElement::selfHasRelativeLengths() const
 {
     return hasAttribute(SVGNames::viewBoxAttr);
diff --git a/Source/WebCore/svg/SVGSymbolElement.h b/Source/WebCore/svg/SVGSymbolElement.h
index 1f0e3e4..befa3b4 100644
--- a/Source/WebCore/svg/SVGSymbolElement.h
+++ b/Source/WebCore/svg/SVGSymbolElement.h
@@ -22,12 +22,11 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 
 namespace WebCore {
 
-class SVGSymbolElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGFitToViewBox {
+class SVGSymbolElement final : public SVGElement, public SVGFitToViewBox {
     WTF_MAKE_ISO_ALLOCATED(SVGSymbolElement);
 public:
     static Ref<SVGSymbolElement> create(const QualifiedName&, Document&);
@@ -35,11 +34,10 @@
 private:
     SVGSymbolElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSymbolElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGSymbolElement, SVGElement, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) override;
-    void svgAttributeChanged(const QualifiedName&) override;
     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
 
     bool selfHasRelativeLengths() const override;
diff --git a/Source/WebCore/svg/SVGSymbolElement.idl b/Source/WebCore/svg/SVGSymbolElement.idl
index 4d6a678..926d55c 100644
--- a/Source/WebCore/svg/SVGSymbolElement.idl
+++ b/Source/WebCore/svg/SVGSymbolElement.idl
@@ -26,5 +26,4 @@
 interface SVGSymbolElement : SVGElement {
 };
 
-SVGSymbolElement implements SVGExternalResourcesRequired;
 SVGSymbolElement implements SVGFitToViewBox;
diff --git a/Source/WebCore/svg/SVGTextContentElement.cpp b/Source/WebCore/svg/SVGTextContentElement.cpp
index d59891e..b8f8522 100644
--- a/Source/WebCore/svg/SVGTextContentElement.cpp
+++ b/Source/WebCore/svg/SVGTextContentElement.cpp
@@ -44,7 +44,6 @@
  
 SVGTextContentElement::SVGTextContentElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
 {
     static std::once_flag onceFlag;
     std::call_once(onceFlag, [] {
@@ -175,7 +174,6 @@
     reportAttributeParsingError(parseError, name, value);
 
     SVGGraphicsElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
 }
 
 void SVGTextContentElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -192,7 +190,6 @@
     }
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 SVGAnimatedLength& SVGTextContentElement::textLengthAnimated()
diff --git a/Source/WebCore/svg/SVGTextContentElement.h b/Source/WebCore/svg/SVGTextContentElement.h
index db0fef2..ba8eaa7 100644
--- a/Source/WebCore/svg/SVGTextContentElement.h
+++ b/Source/WebCore/svg/SVGTextContentElement.h
@@ -21,7 +21,6 @@
 
 #pragma once
 
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 
 namespace WebCore {
@@ -62,7 +61,7 @@
     }
 };
 
-class SVGTextContentElement : public SVGGraphicsElement, public SVGExternalResourcesRequired {
+class SVGTextContentElement : public SVGGraphicsElement {
     WTF_MAKE_ISO_ALLOCATED(SVGTextContentElement);
 public:
     enum {
@@ -83,7 +82,7 @@
 
     static SVGTextContentElement* elementFromRenderer(RenderObject*);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextContentElement, SVGGraphicsElement, SVGExternalResourcesRequired>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextContentElement, SVGGraphicsElement>;
 
     const SVGLengthValue& specifiedTextLength() const { return m_specifiedTextLength; }
     const SVGLengthValue& textLength() const { return m_textLength->currentValue(); }
diff --git a/Source/WebCore/svg/SVGTextContentElement.idl b/Source/WebCore/svg/SVGTextContentElement.idl
index f816a3f..d17ef32 100644
--- a/Source/WebCore/svg/SVGTextContentElement.idl
+++ b/Source/WebCore/svg/SVGTextContentElement.idl
@@ -42,6 +42,3 @@
     long getCharNumAtPosition(DOMPointInit point);
     [MayThrowException] void selectSubString(optional unsigned long offset = 0, optional unsigned long length = 0);
 };
-
-// FIXME: SVGTextContentElement is not supposed to implement SVGExternalResourcesRequired.
-SVGTextContentElement implements SVGExternalResourcesRequired;
diff --git a/Source/WebCore/svg/SVGUseElement.cpp b/Source/WebCore/svg/SVGUseElement.cpp
index 294b326..b693739 100644
--- a/Source/WebCore/svg/SVGUseElement.cpp
+++ b/Source/WebCore/svg/SVGUseElement.cpp
@@ -48,7 +48,6 @@
 
 inline SVGUseElement::SVGUseElement(const QualifiedName& tagName, Document& document)
     : SVGGraphicsElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGURIReference(this)
     , m_loadEventTimer(*this, &SVGElement::loadEventTimerFired)
 {
@@ -90,7 +89,6 @@
 
     reportAttributeParsingError(parseError, name, value);
 
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGGraphicsElement::parseAttribute(name, value);
     SVGURIReference::parseAttribute(name, value);
 }
@@ -176,11 +174,10 @@
         return;
     }
 
-    if (SVGLangSpace::isKnownAttribute(attrName) || SVGExternalResourcesRequired::isKnownAttribute(attrName))
+    if (SVGLangSpace::isKnownAttribute(attrName))
         invalidateShadowTree();
 
     SVGGraphicsElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 static HashSet<AtomString> createAllowedElementSet()
diff --git a/Source/WebCore/svg/SVGUseElement.h b/Source/WebCore/svg/SVGUseElement.h
index 5b5148f..57019c7 100644
--- a/Source/WebCore/svg/SVGUseElement.h
+++ b/Source/WebCore/svg/SVGUseElement.h
@@ -23,7 +23,6 @@
 
 #include "CachedResourceHandle.h"
 #include "CachedSVGDocumentClient.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGGraphicsElement.h"
 #include "SVGURIReference.h"
 
@@ -32,7 +31,7 @@
 class CachedSVGDocument;
 class SVGGElement;
 
-class SVGUseElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGURIReference, private CachedSVGDocumentClient {
+class SVGUseElement final : public SVGGraphicsElement, public SVGURIReference, private CachedSVGDocumentClient {
     WTF_MAKE_ISO_ALLOCATED(SVGUseElement);
 public:
     static Ref<SVGUseElement> create(const QualifiedName&, Document&);
@@ -62,7 +61,7 @@
     void removedFromAncestor(RemovalType, ContainerNode&) override;
     void buildPendingResource() override;
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGUseElement, SVGGraphicsElement, SVGExternalResourcesRequired, SVGURIReference>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGUseElement, SVGGraphicsElement, SVGURIReference>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) override;
diff --git a/Source/WebCore/svg/SVGUseElement.idl b/Source/WebCore/svg/SVGUseElement.idl
index b8e9eaf..54de74a 100644
--- a/Source/WebCore/svg/SVGUseElement.idl
+++ b/Source/WebCore/svg/SVGUseElement.idl
@@ -30,5 +30,4 @@
     readonly attribute SVGAnimatedLength height;
 };
 
-SVGUseElement implements SVGExternalResourcesRequired;
 SVGUseElement implements SVGURIReference;
diff --git a/Source/WebCore/svg/SVGViewElement.cpp b/Source/WebCore/svg/SVGViewElement.cpp
index 662f065..83eada3 100644
--- a/Source/WebCore/svg/SVGViewElement.cpp
+++ b/Source/WebCore/svg/SVGViewElement.cpp
@@ -34,7 +34,6 @@
 
 inline SVGViewElement::SVGViewElement(const QualifiedName& tagName, Document& document)
     : SVGElement(tagName, document)
-    , SVGExternalResourcesRequired(this)
     , SVGFitToViewBox(this)
 {
     ASSERT(hasTagName(SVGNames::viewTag));
@@ -58,7 +57,6 @@
     }
 
     SVGElement::parseAttribute(name, value);
-    SVGExternalResourcesRequired::parseAttribute(name, value);
     SVGFitToViewBox::parseAttribute(name, value);
     SVGZoomAndPan::parseAttribute(name, value);
 }
@@ -80,7 +78,6 @@
     }
 
     SVGElement::svgAttributeChanged(attrName);
-    SVGExternalResourcesRequired::svgAttributeChanged(attrName);
 }
 
 }
diff --git a/Source/WebCore/svg/SVGViewElement.h b/Source/WebCore/svg/SVGViewElement.h
index fe37e91..8721853 100644
--- a/Source/WebCore/svg/SVGViewElement.h
+++ b/Source/WebCore/svg/SVGViewElement.h
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "SVGElement.h"
-#include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 #include "SVGSVGElement.h"
 #include "SVGStringList.h"
@@ -30,7 +29,7 @@
 
 namespace WebCore {
 
-class SVGViewElement final : public SVGElement, public SVGExternalResourcesRequired, public SVGFitToViewBox, public SVGZoomAndPan {
+class SVGViewElement final : public SVGElement, public SVGFitToViewBox, public SVGZoomAndPan {
     WTF_MAKE_ISO_ALLOCATED(SVGViewElement);
 public:
     static Ref<SVGViewElement> create(const QualifiedName&, Document&);
@@ -47,7 +46,7 @@
 private:
     SVGViewElement(const QualifiedName&, Document&);
 
-    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewElement, SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox>;
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGViewElement, SVGElement, SVGFitToViewBox>;
     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
 
     void parseAttribute(const QualifiedName&, const AtomString&) final;
diff --git a/Source/WebCore/svg/SVGViewElement.idl b/Source/WebCore/svg/SVGViewElement.idl
index 5f7aba3..eb32a47 100644
--- a/Source/WebCore/svg/SVGViewElement.idl
+++ b/Source/WebCore/svg/SVGViewElement.idl
@@ -27,6 +27,5 @@
     [SameObject] readonly attribute SVGStringList viewTarget;
 };
 
-SVGViewElement implements SVGExternalResourcesRequired;
 SVGViewElement implements SVGFitToViewBox;
 SVGViewElement implements SVGZoomAndPan;