[webkit-changes] [WebKit/WebKit] 9057e6: SVG fragment reference fails in shadow tree under ...
Ryosuke Niwa
noreply at github.com
Tue Jun 27 15:03:34 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9057e67f74027a0a28d82230b35263cf724de030
https://github.com/WebKit/WebKit/commit/9057e67f74027a0a28d82230b35263cf724de030
Author: Ryosuke Niwa <rniwa at webkit.org>
Date: 2023-06-27 (Tue, 27 Jun 2023)
Changed paths:
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-linear-gradient-expected.html
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-linear-gradient.html
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-radial-gradient-expected.html
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-radial-gradient.html
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-rect-expected.html
A LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-rect.html
M Source/WebCore/accessibility/AccessibilitySVGElement.cpp
M Source/WebCore/dom/Node.cpp
M Source/WebCore/dom/Node.h
M Source/WebCore/dom/TreeScope.cpp
M Source/WebCore/dom/TreeScope.h
M Source/WebCore/rendering/CSSFilter.cpp
M Source/WebCore/rendering/ReferencedSVGResources.cpp
M Source/WebCore/rendering/ReferencedSVGResources.h
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderObject.h
M Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
M Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
M Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
M Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp
M Source/WebCore/rendering/svg/SVGResources.cpp
M Source/WebCore/rendering/svg/SVGResourcesCache.cpp
M Source/WebCore/style/StyleBuilderConverter.h
M Source/WebCore/svg/SVGDocumentExtensions.cpp
M Source/WebCore/svg/SVGDocumentExtensions.h
M Source/WebCore/svg/SVGElement.cpp
M Source/WebCore/svg/SVGFEImageElement.cpp
M Source/WebCore/svg/SVGLinearGradientElement.cpp
M Source/WebCore/svg/SVGMPathElement.cpp
M Source/WebCore/svg/SVGRadialGradientElement.cpp
M Source/WebCore/svg/SVGTRefElement.cpp
M Source/WebCore/svg/SVGTextPathElement.cpp
M Source/WebCore/svg/SVGUseElement.cpp
M Source/WebCore/svg/animation/SVGSMILElement.cpp
Log Message:
-----------
SVG fragment reference fails in shadow tree under some circumstances
https://bugs.webkit.org/show_bug.cgi?id=212820
Reviewed by Darin Adler.
The bug was caused by SVG fragment references looking up elements in the document tree instead of in each shadow tree.
This patch moves the lookup of SVG fragment references to each tree scope. However, when such a reference appears in
the content referenced by a SVG use element, we must do the lookup in the tree in which SVG use element resides and
not SVG use element's shadow tree. For this reason, this patch introduces Node::treeScopeForSVGReferences which
abstracts away this concept as well as RenderObject::treeScopeForSVGReferences which calls the former.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-linear-gradient-expected.html: Added.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-linear-gradient.html: Added.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-radial-gradient-expected.html: Added.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-radial-gradient.html: Added.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-rect-expected.html: Added.
* LayoutTests/fast/shadow-dom/svg-multiple-references-in-multiple-shadows-rect.html: Added.
* Source/WebCore/accessibility/AccessibilitySVGElement.cpp:
(WebCore::AccessibilitySVGElement::targetForUseElement const):
* Source/WebCore/dom/Node.cpp:
(WebCore::Node::treeScopeForSVGReferences const):
* Source/WebCore/dom/Node.h:
* Source/WebCore/dom/TreeScope.cpp:
(WebCore::TreeScope::svgResourcesMap const):
(WebCore::TreeScope::addSVGResource):
(WebCore::TreeScope::removeSVGResource):
(WebCore::TreeScope::svgResourceById const):
(WebCore::TreeScope::addPendingSVGResource):
(WebCore::TreeScope::isIdOfPendingSVGResource const):
(WebCore::TreeScope::isElementWithPendingSVGResources const):
(WebCore::TreeScope::isPendingSVGResource const):
(WebCore::TreeScope::clearHasPendingSVGResourcesIfPossible):
(WebCore::TreeScope::removeElementFromPendingSVGResources):
(WebCore::TreeScope::removePendingSVGResource):
(WebCore::TreeScope::markPendingSVGResourcesForRemoval):
(WebCore::TreeScope::takeElementFromPendingSVGResourcesForRemovalMap):
* Source/WebCore/dom/TreeScope.h:
* Source/WebCore/rendering/CSSFilter.cpp:
(WebCore::referenceFilterElement):
* Source/WebCore/rendering/ReferencedSVGResources.cpp:
(WebCore::ReferencedSVGResources::~ReferencedSVGResources):
(WebCore::ReferencedSVGResources::removeClientForTarget):
(WebCore::ReferencedSVGResources::updateReferencedResources):
(WebCore::ReferencedSVGResources::elementForResourceID):
(WebCore::ReferencedSVGResources::referencedFilterElement):
(WebCore::ReferencedSVGResources::referencedClipperRenderer):
* Source/WebCore/rendering/ReferencedSVGResources.h:
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::updateReferencedSVGResources):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::setupClipPath):
* Source/WebCore/rendering/RenderObject.h:
(WebCore::RenderObject::treeScopeForSVGReferences const):
* Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp:
(WebCore::RenderSVGResourceContainer::willBeDestroyed):
(WebCore::RenderSVGResourceContainer::idChanged):
(WebCore::RenderSVGResourceContainer::registerResource):
* Source/WebCore/rendering/svg/RenderSVGResourceContainer.h:
(WebCore::getRenderSVGResourceContainerById):
(WebCore::getRenderSVGResourceById):
* Source/WebCore/rendering/svg/RenderSVGTextPath.cpp:
(WebCore::RenderSVGTextPath::targetElement const):
* Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp:
(WebCore::writeResources):
* Source/WebCore/rendering/svg/SVGResources.cpp:
(WebCore::paintingResourceFromSVGPaint):
(WebCore::SVGResources::buildCachedResources):
(WebCore::registerPendingResource): Deleted.
* Source/WebCore/rendering/svg/SVGResourcesCache.cpp:
(WebCore::SVGResourcesCache::resourceDestroyed):
* Source/WebCore/style/StyleBuilderConverter.h:
(WebCore::Style::BuilderConverter::convertPathOperation):
* Source/WebCore/svg/SVGDocumentExtensions.cpp:
(WebCore::SVGDocumentExtensions::addResource): Deleted.
(WebCore::SVGDocumentExtensions::removeResource): Deleted.
(WebCore::SVGDocumentExtensions::resourceById const): Deleted.
(WebCore::SVGDocumentExtensions::addPendingResource): Deleted.
(WebCore::SVGDocumentExtensions::isIdOfPendingResource const): Deleted.
(WebCore::SVGDocumentExtensions::isElementWithPendingResources const): Deleted.
(WebCore::SVGDocumentExtensions::isPendingResource const): Deleted.
(WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible): Deleted.
(WebCore::SVGDocumentExtensions::removeElementFromPendingResources): Deleted.
(WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval): Deleted.
(WebCore::SVGDocumentExtensions::takeElementFromPendingResourcesForRemovalMap): Deleted.
* Source/WebCore/svg/SVGDocumentExtensions.h:
(WebCore::SVGDocumentExtensions::removePendingResource): Deleted.
* Source/WebCore/svg/SVGElement.cpp:
(WebCore::SVGElement::~SVGElement):
(WebCore::SVGElement::removedFromAncestor):
(WebCore::SVGElement::insertedIntoAncestor):
(WebCore::SVGElement::buildPendingResourcesIfNeeded):
* Source/WebCore/svg/SVGFEImageElement.cpp:
(WebCore::SVGFEImageElement::buildPendingResource):
(WebCore::SVGFEImageElement::imageBufferForEffect const):
* Source/WebCore/svg/SVGLinearGradientElement.cpp:
(WebCore::SVGLinearGradientElement::collectGradientAttributes):
* Source/WebCore/svg/SVGMPathElement.cpp:
(WebCore::SVGMPathElement::buildPendingResource):
(WebCore::SVGMPathElement::pathElement):
* Source/WebCore/svg/SVGRadialGradientElement.cpp:
(WebCore::SVGRadialGradientElement::collectGradientAttributes):
* Source/WebCore/svg/SVGTRefElement.cpp:
(WebCore::SVGTRefElement::detachTarget):
(WebCore::SVGTRefElement::buildPendingResource):
* Source/WebCore/svg/SVGTextPathElement.cpp:
(WebCore::SVGTextPathElement::buildPendingResource):
* Source/WebCore/svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::updateUserAgentShadowTree):
* Source/WebCore/svg/animation/SVGSMILElement.cpp:
(WebCore::SVGSMILElement::buildPendingResource):
Canonical link: https://commits.webkit.org/265565@main
More information about the webkit-changes
mailing list