[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