Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9057e67f74027a0a28d82230b35263cf724de030
      
https://github.com/WebKit/WebKit/commit/9057e67f74027a0a28d82230b35263cf724de030
  Author: Ryosuke Niwa <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to