Diff
Modified: trunk/Source/WebCore/ChangeLog (272234 => 272235)
--- trunk/Source/WebCore/ChangeLog 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/ChangeLog 2021-02-02 22:00:32 UTC (rev 272235)
@@ -1,3 +1,58 @@
+2021-02-02 Darin Adler <[email protected]>
+
+ Null check renderers consistently in StyleImage code
+ https://bugs.webkit.org/show_bug.cgi?id=221287
+ rdar://73356955
+
+ Reviewed by Simon Fraser.
+
+ Many of these functions were asserting renderers are non-null, without a
+ strong guarantee that is true. Adding a few null checks makes the code
+ easier to reason about. An exception was add/removeClient, which never
+ need to be called with a null pointer, so for that we change the argument
+ type from a pointer to a reference.
+
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::updateFillImages): Pass a reference.
+ (WebCore::RenderElement::updateImage): Ditto.
+ (WebCore::RenderElement::willBeDestroyed): Ditto.
+
+ * rendering/RenderImageResource.cpp:
+ (WebCore::RenderImageResource::setCachedImage): Check renderer for null.
+ (WebCore::RenderImageResource::resetAnimation): Ditto.
+ (WebCore::RenderImageResource::setContainerContext): Ditto.
+
+ * rendering/RenderImageResourceStyleImage.cpp:
+ (WebCore::RenderImageResourceStyleImage::initialize): Pass a reference.
+ (WebCore::RenderImageResourceStyleImage::shutdown): Check the renderer for
+ null before passing a reference.
+ (WebCore::RenderImageResourceStyleImage::setContainerContext): Ditto.
+
+ * rendering/RenderListMarker.cpp:
+ (WebCore::RenderListMarker::willBeDestroyed): Pass a reference.
+ (WebCore::RenderListMarker::styleDidChange): Ditto.
+
+ * rendering/style/StyleCachedImage.cpp:
+ (WebCore::StyleCachedImage::addClient): Take a reference.
+ (WebCore::StyleCachedImage::removeClient): Ditto.
+
+ * rendering/style/StyleGeneratedImage.cpp:
+ (WebCore::StyleGeneratedImage::imageSize const): Check renderer for null.
+ (WebCore::StyleGeneratedImage::addClient): Take a reference.
+ (WebCore::StyleGeneratedImage::removeClient): Ditto.
+ (WebCore::StyleGeneratedImage::image const): Check renderer for null.
+ (WebCore::StyleGeneratedImage::knownToBeOpaque const): Ditto.
+
+ * rendering/style/StyleMultiImage.cpp:
+ (WebCore::StyleMultiImage::addClient): Take a reference.
+ (WebCore::StyleMultiImage::removeClient): Ditto.
+
+ * rendering/style/StyleCachedImage.h: Update add/removeClient to take
+ a reference.
+ * rendering/style/StyleGeneratedImage.h: Ditto.
+ * rendering/style/StyleImage.h: Ditto.
+ * rendering/style/StyleMultiImage.h: Ditto.
+
2021-02-02 Said Abou-Hallawa <[email protected]>
[macOS] Force loading the HEIF reader symbols before transcoding any HEIF image
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -3,7 +3,7 @@
* (C) 1999 Antti Koivisto ([email protected])
* (C) 2005 Allan Sandfeld Jensen ([email protected])
* (C) 2005, 2006 Samuel Weinig ([email protected])
- * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2013, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2005-2021 Apple Inc. All rights reserved.
* Copyright (C) 2010, 2012 Google Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
@@ -360,11 +360,11 @@
// Add before removing, to avoid removing all clients of an image that is in both sets.
for (auto* layer = &newLayers; layer; layer = layer->next()) {
if (layer->image())
- layer->image()->addClient(this);
+ layer->image()->addClient(*this);
}
for (auto* layer = oldLayers; layer; layer = layer->next()) {
if (layer->image())
- layer->image()->removeClient(this);
+ layer->image()->removeClient(*this);
}
}
@@ -373,9 +373,9 @@
if (oldImage == newImage)
return;
if (oldImage)
- oldImage->removeClient(this);
+ oldImage->removeClient(*this);
if (newImage)
- newImage->addClient(this);
+ newImage->addClient(*this);
}
void RenderElement::updateShapeImage(const ShapeValue* oldShapeValue, const ShapeValue* newShapeValue)
@@ -1028,19 +1028,19 @@
if (hasInitializedStyle()) {
for (auto* bgLayer = &m_style.backgroundLayers(); bgLayer; bgLayer = bgLayer->next()) {
if (auto* backgroundImage = bgLayer->image())
- backgroundImage->removeClient(this);
+ backgroundImage->removeClient(*this);
}
for (auto* maskLayer = &m_style.maskLayers(); maskLayer; maskLayer = maskLayer->next()) {
if (auto* maskImage = maskLayer->image())
- maskImage->removeClient(this);
+ maskImage->removeClient(*this);
}
if (auto* borderImage = m_style.borderImage().image())
- borderImage->removeClient(this);
+ borderImage->removeClient(*this);
if (auto* maskBoxImage = m_style.maskBoxImage().image())
- maskBoxImage->removeClient(this);
+ maskBoxImage->removeClient(*this);
if (auto shapeValue = m_style.shapeOutside()) {
if (auto shapeImage = shapeValue->image())
- shapeImage->removeClient(this);
+ shapeImage->removeClient(*this);
}
}
if (m_hasPausedImageAnimations)
Modified: trunk/Source/WebCore/rendering/RenderImageResource.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/RenderImageResource.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/RenderImageResource.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -4,7 +4,7 @@
* Copyright (C) 2000 Dirk Mueller <[email protected]>
* Copyright (C) 2006 Allan Sandfeld Jensen <[email protected]>
* Copyright (C) 2006 Samuel Weinig <[email protected]>
- * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
* Copyright (C) 2010 Patrick Gansterer <[email protected]>
*
@@ -39,9 +39,7 @@
WTF_MAKE_ISO_ALLOCATED_IMPL(RenderImageResource);
-RenderImageResource::RenderImageResource()
-{
-}
+RenderImageResource::RenderImageResource() = default;
void RenderImageResource::initialize(RenderElement& renderer, CachedImage* styleCachedImage)
{
@@ -63,9 +61,8 @@
if (m_cachedImage == newImage)
return;
- ASSERT(m_renderer);
- if (m_cachedImage && m_cachedImageRemoveClientIsNeeded)
- m_cachedImage->removeClient(*renderer());
+ if (m_cachedImage && m_renderer && m_cachedImageRemoveClientIsNeeded)
+ m_cachedImage->removeClient(*m_renderer);
m_cachedImage = newImage;
m_cachedImageRemoveClientIsNeeded = true;
if (!m_cachedImage)
@@ -81,11 +78,10 @@
if (!m_cachedImage)
return;
- ASSERT(m_renderer);
image()->resetAnimation();
- if (!renderer()->needsLayout())
- renderer()->repaint();
+ if (m_renderer && !m_renderer->needsLayout())
+ m_renderer->repaint();
}
RefPtr<Image> RenderImageResource::image(const IntSize&) const
@@ -92,7 +88,7 @@
{
if (!m_cachedImage)
return &Image::nullImage();
- if (auto image = m_cachedImage->imageForRenderer(renderer()))
+ if (auto image = m_cachedImage->imageForRenderer(m_renderer.get()))
return image;
return &Image::nullImage();
}
@@ -99,10 +95,9 @@
void RenderImageResource::setContainerContext(const IntSize& imageContainerSize, const URL& imageURL)
{
- if (!m_cachedImage)
+ if (!m_cachedImage || !m_renderer)
return;
- ASSERT(m_renderer);
- m_cachedImage->setContainerContextForClient(*renderer(), imageContainerSize, renderer()->style().effectiveZoom(), imageURL);
+ m_cachedImage->setContainerContextForClient(*m_renderer, imageContainerSize, m_renderer->style().effectiveZoom(), imageURL);
}
LayoutSize RenderImageResource::imageSize(float multiplier, CachedImage::SizeType type) const
@@ -109,9 +104,9 @@
{
if (!m_cachedImage)
return LayoutSize();
- LayoutSize size = m_cachedImage->imageSizeForRenderer(renderer(), multiplier, type);
- if (is<RenderImage>(renderer()))
- size.scale(downcast<RenderImage>(*renderer()).imageDevicePixelRatio());
+ LayoutSize size = m_cachedImage->imageSizeForRenderer(m_renderer.get(), multiplier, type);
+ if (is<RenderImage>(m_renderer.get()))
+ size.scale(downcast<RenderImage>(*m_renderer).imageDevicePixelRatio());
return size;
}
Modified: trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -4,7 +4,7 @@
* Copyright (C) 2000 Dirk Mueller <[email protected]>
* Copyright (C) 2006 Allan Sandfeld Jensen <[email protected]>
* Copyright (C) 2006 Samuel Weinig <[email protected]>
- * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
* Copyright (C) 2010 Patrick Gansterer <[email protected]>
*
@@ -45,14 +45,14 @@
void RenderImageResourceStyleImage::initialize(RenderElement& renderer)
{
RenderImageResource::initialize(renderer, m_styleImage->hasCachedImage() ? m_styleImage.get().cachedImage() : nullptr);
- m_styleImage->addClient(this->renderer());
+ m_styleImage->addClient(renderer);
}
void RenderImageResourceStyleImage::shutdown()
{
RenderImageResource::shutdown();
- if (renderer())
- m_styleImage->removeClient(renderer());
+ if (auto renderer = this->renderer())
+ m_styleImage->removeClient(*renderer);
}
RefPtr<Image> RenderImageResourceStyleImage::image(const IntSize& size) const
@@ -67,8 +67,8 @@
void RenderImageResourceStyleImage::setContainerContext(const IntSize& size, const URL&)
{
- ASSERT(renderer());
- m_styleImage->setContainerContextForRenderer(*renderer(), size, renderer()->style().effectiveZoom());
+ if (auto renderer = this->renderer())
+ m_styleImage->setContainerContextForRenderer(*renderer, size, renderer->style().effectiveZoom());
}
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderListMarker.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/RenderListMarker.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/RenderListMarker.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999 Lars Knoll ([email protected])
* (C) 1999 Antti Koivisto ([email protected])
- * Copyright (C) 2003-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
* Copyright (C) 2006 Andrew Wellington ([email protected])
* Copyright (C) 2010 Daniel Bates ([email protected])
*
@@ -1082,7 +1082,7 @@
void RenderListMarker::willBeDestroyed()
{
if (m_image)
- m_image->removeClient(this);
+ m_image->removeClient(*this);
RenderBox::willBeDestroyed();
}
@@ -1100,10 +1100,10 @@
if (m_image != style().listStyleImage()) {
if (m_image)
- m_image->removeClient(this);
+ m_image->removeClient(*this);
m_image = style().listStyleImage();
if (m_image)
- m_image->addClient(this);
+ m_image->addClient(*this);
}
}
Modified: trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -156,23 +156,20 @@
m_cachedImage->setContainerContextForClient(renderer, LayoutSize(containerSize), containerZoom, imageURL());
}
-void StyleCachedImage::addClient(RenderElement* renderer)
+void StyleCachedImage::addClient(RenderElement& renderer)
{
ASSERT(!m_isPending);
if (!m_cachedImage)
return;
- ASSERT(renderer);
- m_cachedImage->addClient(*renderer);
+ m_cachedImage->addClient(renderer);
}
-void StyleCachedImage::removeClient(RenderElement* renderer)
+void StyleCachedImage::removeClient(RenderElement& renderer)
{
ASSERT(!m_isPending);
if (!m_cachedImage)
return;
- ASSERT(renderer);
-
- m_cachedImage->removeClient(*renderer);
+ m_cachedImage->removeClient(renderer);
}
RefPtr<Image> StyleCachedImage::image(RenderElement* renderer, const FloatSize&) const
Modified: trunk/Source/WebCore/rendering/style/StyleCachedImage.h (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleCachedImage.h 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleCachedImage.h 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -58,8 +58,8 @@
void computeIntrinsicDimensions(const RenderElement*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) final;
bool usesImageContainerSize() const final;
void setContainerContextForRenderer(const RenderElement&, const FloatSize&, float) final;
- void addClient(RenderElement*) final;
- void removeClient(RenderElement*) final;
+ void addClient(RenderElement&) final;
+ void removeClient(RenderElement&) final;
RefPtr<Image> image(RenderElement*, const FloatSize&) const final;
float imageScaleFactor() const final;
bool knownToBeOpaque(const RenderElement*) const final;
Modified: trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -54,8 +54,10 @@
FloatSize StyleGeneratedImage::imageSize(const RenderElement* renderer, float multiplier) const
{
- ASSERT(renderer);
if (m_fixedSize) {
+ if (!renderer)
+ return { };
+
FloatSize fixedSize = m_imageGeneratorValue->fixedSize(*renderer);
if (multiplier == 1.0f)
return fixedSize;
@@ -86,28 +88,24 @@
intrinsicRatio = size;
}
-void StyleGeneratedImage::addClient(RenderElement* renderer)
+void StyleGeneratedImage::addClient(RenderElement& renderer)
{
- ASSERT(renderer);
- m_imageGeneratorValue->addClient(*renderer);
+ m_imageGeneratorValue->addClient(renderer);
}
-void StyleGeneratedImage::removeClient(RenderElement* renderer)
+void StyleGeneratedImage::removeClient(RenderElement& renderer)
{
- ASSERT(renderer);
- m_imageGeneratorValue->removeClient(*renderer);
+ m_imageGeneratorValue->removeClient(renderer);
}
RefPtr<Image> StyleGeneratedImage::image(RenderElement* renderer, const FloatSize& size) const
{
- ASSERT(renderer);
- return m_imageGeneratorValue->image(*renderer, size);
+ return renderer ? m_imageGeneratorValue->image(*renderer, size) : &Image::nullImage();
}
bool StyleGeneratedImage::knownToBeOpaque(const RenderElement* renderer) const
{
- ASSERT(renderer);
- return m_imageGeneratorValue->knownToBeOpaque(*renderer);
+ return renderer && m_imageGeneratorValue->knownToBeOpaque(*renderer);
}
}
Modified: trunk/Source/WebCore/rendering/style/StyleGeneratedImage.h (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleGeneratedImage.h 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleGeneratedImage.h 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -54,8 +54,8 @@
void computeIntrinsicDimensions(const RenderElement*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) final;
bool usesImageContainerSize() const final { return !m_fixedSize; }
void setContainerContextForRenderer(const RenderElement&, const FloatSize& containerSize, float) final { m_containerSize = containerSize; }
- void addClient(RenderElement*) final;
- void removeClient(RenderElement*) final;
+ void addClient(RenderElement&) final;
+ void removeClient(RenderElement&) final;
RefPtr<Image> image(RenderElement*, const FloatSize&) const final;
bool knownToBeOpaque(const RenderElement*) const final;
Modified: trunk/Source/WebCore/rendering/style/StyleImage.h (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleImage.h 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleImage.h 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -60,8 +60,8 @@
virtual bool imageHasRelativeHeight() const = 0;
virtual bool usesImageContainerSize() const = 0;
virtual void setContainerContextForRenderer(const RenderElement&, const FloatSize&, float) = 0;
- virtual void addClient(RenderElement*) = 0;
- virtual void removeClient(RenderElement*) = 0;
+ virtual void addClient(RenderElement&) = 0;
+ virtual void removeClient(RenderElement&) = 0;
virtual RefPtr<Image> image(RenderElement*, const FloatSize&) const = 0;
virtual WrappedImagePtr data() const = 0;
virtual float imageScaleFactor() const { return 1; }
Modified: trunk/Source/WebCore/rendering/style/StyleMultiImage.cpp (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleMultiImage.cpp 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleMultiImage.cpp 2021-02-02 22:00:32 UTC (rev 272235)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
* Copyright (C) 2020 Noam Rosenthal ([email protected])
*
* This library is free software; you can redistribute it and/or
@@ -134,7 +134,7 @@
m_selectedImage->setContainerContextForRenderer(renderer, containerSize, containerZoom);
}
-void StyleMultiImage::addClient(RenderElement* renderer)
+void StyleMultiImage::addClient(RenderElement& renderer)
{
if (!m_selectedImage)
return;
@@ -141,7 +141,7 @@
m_selectedImage->addClient(renderer);
}
-void StyleMultiImage::removeClient(RenderElement* renderer)
+void StyleMultiImage::removeClient(RenderElement& renderer)
{
if (!m_selectedImage)
return;
Modified: trunk/Source/WebCore/rendering/style/StyleMultiImage.h (272234 => 272235)
--- trunk/Source/WebCore/rendering/style/StyleMultiImage.h 2021-02-02 21:54:31 UTC (rev 272234)
+++ trunk/Source/WebCore/rendering/style/StyleMultiImage.h 2021-02-02 22:00:32 UTC (rev 272235)
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll ([email protected])
* (C) 2000 Antti Koivisto ([email protected])
* (C) 2000 Dirk Mueller ([email protected])
- * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
* Copyright (C) 2020 Noam Rosenthal ([email protected])
*
* This library is free software; you can redistribute it and/or
@@ -57,8 +57,8 @@
void computeIntrinsicDimensions(const RenderElement*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) final;
bool usesImageContainerSize() const final;
void setContainerContextForRenderer(const RenderElement&, const FloatSize&, float);
- void addClient(RenderElement*) final;
- void removeClient(RenderElement*) final;
+ void addClient(RenderElement&) final;
+ void removeClient(RenderElement&) final;
RefPtr<Image> image(RenderElement*, const FloatSize&) const final;
float imageScaleFactor() const final;
bool knownToBeOpaque(const RenderElement*) const final;