Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
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
- Loading branch information