Skip to content

Commit

Permalink
[LBSE] Adopt more smart pointers in SVG code
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=273113

Reviewed by Sihui Liu.

Based on [alpha.webkit.UncountedCallArgsChecker] warnings.

* Source/WebCore/rendering/ReferencedSVGResources.cpp:
(WebCore::ReferencedSVGResources::~ReferencedSVGResources):
(WebCore::ReferencedSVGResources::referencedMarkerElement):
(WebCore::ReferencedSVGResources::referencedMaskElement):
(WebCore::ReferencedSVGResources::referencedPaintServerElement):
* Source/WebCore/rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::svgMaskerResourceFromStyle const):
* Source/WebCore/rendering/style/StyleCachedImage.cpp:
(WebCore::StyleCachedImage::uncheckedRenderSVGResource const):
* Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp:
(WebCore::RenderSVGGradientStop::gradientElement):
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::imageChanged):
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::computeClipPath const):
* Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp:
(WebCore::RenderSVGResourceContainer::registerResource):
* Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp:
(WebCore::RenderSVGResourceMarker::updateLayerTransform):
(WebCore::RenderSVGResourceMarker::overflowClipRect const):
* Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp:
(WebCore::RenderSVGResourceMasker::applyMask):
* Source/WebCore/rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::layoutChildren):
(WebCore::SVGRenderSupport::applyStrokeStyleToContext):
(WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResource.cpp:
(WebCore::removeFromCacheAndInvalidateDependencies):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceContainer.cpp:
(WebCore::LegacyRenderSVGResourceContainer::registerResource):
* Source/WebCore/rendering/svg/legacy/SVGResources.cpp:
(WebCore::SVGResources::buildCachedResources):

Canonical link: https://commits.webkit.org/277969@main
  • Loading branch information
rwlbuis committed Apr 25, 2024
1 parent c260b2d commit b2ca06d
Show file tree
Hide file tree
Showing 13 changed files with 39 additions and 39 deletions.
10 changes: 5 additions & 5 deletions Source/WebCore/rendering/ReferencedSVGResources.cpp
Expand Up @@ -91,7 +91,7 @@ ReferencedSVGResources::ReferencedSVGResources(RenderElement& renderer)

ReferencedSVGResources::~ReferencedSVGResources()
{
auto& treeScope = m_renderer.treeScopeForSVGReferences();
Ref treeScope = m_renderer.treeScopeForSVGReferences();
for (auto& targetID : copyToVector(m_elementClients.keys()))
removeClientForTarget(treeScope, targetID);
}
Expand Down Expand Up @@ -237,7 +237,7 @@ RefPtr<SVGClipPathElement> ReferencedSVGResources::referencedClipPathElement(Tre

RefPtr<SVGMarkerElement> ReferencedSVGResources::referencedMarkerElement(TreeScope& treeScope, const String& markerResource)
{
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(markerResource, treeScope.documentScope());
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(markerResource, treeScope.protectedDocumentScope());
if (resourceID.isEmpty())
return nullptr;

Expand All @@ -247,11 +247,11 @@ RefPtr<SVGMarkerElement> ReferencedSVGResources::referencedMarkerElement(TreeSco

RefPtr<SVGMaskElement> ReferencedSVGResources::referencedMaskElement(TreeScope& treeScope, const StyleImage& maskImage)
{
auto reresolvedURL = maskImage.reresolvedURL(treeScope.documentScope());
auto reresolvedURL = maskImage.reresolvedURL(treeScope.protectedDocumentScope());
if (reresolvedURL.isEmpty())
return nullptr;

auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(reresolvedURL.string(), treeScope.documentScope());
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(reresolvedURL.string(), treeScope.protectedDocumentScope());
if (resourceID.isEmpty())
return nullptr;

Expand All @@ -261,7 +261,7 @@ RefPtr<SVGMaskElement> ReferencedSVGResources::referencedMaskElement(TreeScope&

RefPtr<SVGElement> ReferencedSVGResources::referencedPaintServerElement(TreeScope& treeScope, const String& uri)
{
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(uri, treeScope.documentScope());
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(uri, treeScope.protectedDocumentScope());
if (resourceID.isEmpty())
return nullptr;

Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/RenderLayerModelObject.cpp
Expand Up @@ -484,7 +484,7 @@ RenderSVGResourceMasker* RenderLayerModelObject::svgMaskerResourceFromStyle() co
if (reresolvedURL.isEmpty())
return nullptr;

auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(reresolvedURL.string(), document());
auto resourceID = SVGURIReference::fragmentIdentifierFromIRIString(reresolvedURL.string(), protectedDocument());

if (RefPtr referencedMaskElement = ReferencedSVGResources::referencedMaskElement(treeScopeForSVGReferences(), *maskImage)) {
if (auto* referencedMaskerRenderer = dynamicDowncast<RenderSVGResourceMasker>(referencedMaskElement->renderer()))
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/style/StyleCachedImage.cpp
Expand Up @@ -106,7 +106,7 @@ LegacyRenderSVGResourceContainer* StyleCachedImage::uncheckedRenderSVGResource(c
return nullptr;
}

auto& document = renderer->document();
Ref document = renderer->document();
auto reresolvedURL = this->reresolvedURL(document);

if (!m_cachedImage) {
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp
Expand Up @@ -77,7 +77,7 @@ void RenderSVGGradientStop::layout()

SVGGradientElement* RenderSVGGradientStop::gradientElement()
{
return dynamicDowncast<SVGGradientElement>(element().parentElement());
return dynamicDowncast<SVGGradientElement>(element().protectedParentElement().get());
}

}
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/svg/RenderSVGImage.cpp
Expand Up @@ -358,7 +358,7 @@ void RenderSVGImage::imageChanged(WrappedImagePtr newImage, const IntRect* rect)

repaintOrMarkForLayout(rect);

if (AXObjectCache* cache = document().existingAXObjectCache())
if (CheckedPtr cache = document().existingAXObjectCache())
cache->deferRecomputeIsIgnoredIfNeeded(protectedImageElement().ptr());
}

Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
Expand Up @@ -278,7 +278,7 @@ Path RenderSVGModelObject::computeClipPath(AffineTransform& transform) const
if (layer()->isTransformed())
transform.multiply(layer()->currentTransform(RenderStyle::individualTransformOperations()).toAffineTransform());

if (RefPtr useElement = dynamicDowncast<SVGUseElement>(element())) {
if (RefPtr useElement = dynamicDowncast<SVGUseElement>(protectedElement())) {
if (CheckedPtr clipChildRenderer = useElement->rendererClipChild())
transform.multiply(downcast<RenderLayerModelObject>(*clipChildRenderer).checkedLayer()->currentTransform(RenderStyle::individualTransformOperations()).toAffineTransform());
if (RefPtr clipChild = useElement->clipChild())
Expand Down
8 changes: 4 additions & 4 deletions Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
Expand Up @@ -87,14 +87,14 @@ static inline void notifyResourceChanged(SVGElement& element)

void RenderSVGResourceContainer::registerResource()
{
auto& treeScope = this->treeScopeForSVGReferences();
if (!treeScope.isIdOfPendingSVGResource(m_id))
Ref treeScope = this->treeScopeForSVGReferences();
if (!treeScope->isIdOfPendingSVGResource(m_id))
return;

auto elements = copyToVectorOf<Ref<SVGElement>>(treeScope.removePendingSVGResource(m_id));
auto elements = copyToVectorOf<Ref<SVGElement>>(treeScope->removePendingSVGResource(m_id));
for (auto& element : elements) {
ASSERT(element->hasPendingResources());
treeScope.clearHasPendingSVGResourcesIfPossible(element);
treeScope->clearHasPendingSVGResourcesIfPossible(element);
notifyResourceChanged(element.get());
}
}
Expand Down
14 changes: 7 additions & 7 deletions Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
Expand Up @@ -91,16 +91,16 @@ void RenderSVGResourceMarker::updateLayerTransform()
ASSERT(hasLayer());

// First update the supplemental layer transform.
auto& useMarkerElement = markerElement();
Ref useMarkerElement = markerElement();
auto viewportSize = this->viewportSize();

m_supplementalLayerTransform.makeIdentity();

if (useMarkerElement.hasAttribute(SVGNames::viewBoxAttr)) {
if (useMarkerElement->hasAttribute(SVGNames::viewBoxAttr)) {
// An empty viewBox disables the rendering -- dirty the visible descendant status!
if (useMarkerElement.hasEmptyViewBox())
if (useMarkerElement->hasEmptyViewBox())
layer()->dirtyVisibleContentStatus();
else if (auto viewBoxTransform = useMarkerElement.viewBoxToViewTransform(viewportSize.width(), viewportSize.height()); !viewBoxTransform.isIdentity())
else if (auto viewBoxTransform = useMarkerElement->viewBoxToViewTransform(viewportSize.width(), viewportSize.height()); !viewBoxTransform.isIdentity())
m_supplementalLayerTransform = viewBoxTransform;
}

Expand All @@ -124,11 +124,11 @@ void RenderSVGResourceMarker::applyTransform(TransformationMatrix& transform, co

LayoutRect RenderSVGResourceMarker::overflowClipRect(const LayoutPoint& location, RenderFragmentContainer*, OverlayScrollbarSizeRelevancy, PaintPhase) const
{
auto& useMarkerElement = markerElement();
Ref useMarkerElement = markerElement();

auto clipRect = enclosingLayoutRect(viewport());
if (useMarkerElement.hasAttribute(SVGNames::viewBoxAttr)) {
if (useMarkerElement.hasEmptyViewBox())
if (useMarkerElement->hasAttribute(SVGNames::viewBoxAttr)) {
if (useMarkerElement->hasEmptyViewBox())
return { };

if (!m_supplementalLayerTransform.isIdentity())
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
Expand Up @@ -98,8 +98,8 @@ void RenderSVGResourceMasker::applyMask(PaintInfo& paintInfo, const RenderLayerM
context.translate(coordinateSystemOriginTranslation);

AffineTransform contentTransform;
auto& maskElement = this->maskElement();
if (maskElement.maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
Ref maskElement = this->maskElement();
if (maskElement->maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
contentTransform.translate(objectBoundingBox.x(), objectBoundingBox.y());
contentTransform.scale(objectBoundingBox.width(), objectBoundingBox.height());
}
Expand Down
16 changes: 8 additions & 8 deletions Source/WebCore/rendering/svg/SVGRenderSupport.cpp
Expand Up @@ -276,7 +276,7 @@ void SVGRenderSupport::layoutChildren(RenderElement& start, bool selfNeedsLayout

if (layoutSizeChanged) {
// When selfNeedsLayout is false and the layout size changed, we have to check whether this child uses relative lengths
if (auto* element = dynamicDowncast<SVGElement>(*child.node()); element && element->hasRelativeLengths()) {
if (RefPtr element = dynamicDowncast<SVGElement>(child.node()); element && element->hasRelativeLengths()) {
// When the layout size changed and when using relative values tell the LegacyRenderSVGShape to update its shape object
if (CheckedPtr shape = dynamicDowncast<LegacyRenderSVGShape>(child))
shape->setNeedsShapeUpdate();
Expand Down Expand Up @@ -447,7 +447,7 @@ bool SVGRenderSupport::pointInClippingArea(const RenderElement& renderer, const

void SVGRenderSupport::applyStrokeStyleToContext(GraphicsContext& context, const RenderStyle& style, const RenderElement& renderer)
{
RefPtr element = dynamicDowncast<SVGElement>(renderer.element());
auto element = dynamicDowncast<SVGElement>(renderer.protectedElement());
if (!element) {
ASSERT_NOT_REACHED();
return;
Expand Down Expand Up @@ -507,15 +507,15 @@ bool SVGRenderSupport::isolatesBlending(const RenderStyle& style)

void SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending(const RenderElement& renderer)
{
ASSERT(renderer.element());
ASSERT(renderer.element()->isSVGElement());

for (auto& ancestor : ancestorsOfType<SVGGraphicsElement>(*renderer.protectedElement())) {
auto* style = ancestor.computedStyle();
RefPtr element = renderer.element();
ASSERT(element);
ASSERT(element->isSVGElement());
for (Ref ancestor : ancestorsOfType<SVGGraphicsElement>(*element)) {
auto* style = ancestor->computedStyle();
if (!style || !isolatesBlending(*style))
continue;
if (style->hasPositionedMask())
ancestor.setShouldIsolateBlending(renderer.style().hasBlendMode());
ancestor->setShouldIsolateBlending(renderer.style().hasBlendMode());
return;
}
}
Expand Down
Expand Up @@ -178,7 +178,7 @@ static void removeFromCacheAndInvalidateDependencies(RenderElement& renderer, bo
clipper->removeClientFromCache(renderer);
}

RefPtr svgElement = dynamicDowncast<SVGElement>(renderer.element());
auto svgElement = dynamicDowncast<SVGElement>(renderer.protectedElement());
if (!svgElement)
return;

Expand Down
Expand Up @@ -194,20 +194,20 @@ void LegacyRenderSVGResourceContainer::removeClientRenderLayer(RenderLayer& clie

void LegacyRenderSVGResourceContainer::registerResource()
{
auto& treeScope = this->treeScopeForSVGReferences();
if (!treeScope.isIdOfPendingSVGResource(m_id)) {
treeScope.addSVGResource(m_id, *this);
Ref treeScope = this->treeScopeForSVGReferences();
if (!treeScope->isIdOfPendingSVGResource(m_id)) {
treeScope->addSVGResource(m_id, *this);
return;
}

auto elements = copyToVectorOf<Ref<SVGElement>>(treeScope.removePendingSVGResource(m_id));
auto elements = copyToVectorOf<Ref<SVGElement>>(treeScope->removePendingSVGResource(m_id));

treeScope.addSVGResource(m_id, *this);
treeScope->addSVGResource(m_id, *this);

// Update cached resources of pending clients.
for (auto& client : elements) {
ASSERT(client->hasPendingResources());
treeScope.clearHasPendingSVGResourcesIfPossible(client);
treeScope->clearHasPendingSVGResourcesIfPossible(client);
auto* renderer = client->renderer();
if (!renderer)
continue;
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/svg/legacy/SVGResources.cpp
Expand Up @@ -238,7 +238,7 @@ std::unique_ptr<SVGResources> SVGResources::buildCachedResources(const RenderEle
const FilterOperations& filterOperations = style.filter();
if (filterOperations.size() == 1) {
if (RefPtr referenceFilterOperation = dynamicDowncast<ReferenceFilterOperation>(*filterOperations.at(0))) {
AtomString id = SVGURIReference::fragmentIdentifierFromIRIString(referenceFilterOperation->url(), element->protectedDocument());
AtomString id = SVGURIReference::fragmentIdentifierFromIRIString(referenceFilterOperation->url(), document);
if (auto* filter = getRenderSVGResourceById<LegacyRenderSVGResourceFilter>(treeScope, id))
ensureResources(foundResources).setFilter(filter);
else
Expand Down

0 comments on commit b2ca06d

Please sign in to comment.