Changeset 220934 in webkit


Ignore:
Timestamp:
Aug 18, 2017 2:40:42 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

Followup (r220289): RenderImageResourceStyleImage code clean up
https://bugs.webkit.org/show_bug.cgi?id=175444

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2017-08-18
Reviewed by Darin Adler.

RenderImageResourceStyleImage may be created with a StyleImage of type
StyleGeneratedImage. It may also be associated with a CachedImage which
is loaded through a source URL. In this case, adding and removing m_renderer
as a client of the CachedImage will be done through
RenderImageResource::setCachedImage().

RenderImageResource::setCachedImage() is already called from
ImageLoader::updateRenderer() when the CachedImage finishes loading. This
call adds m_renderer to the clients of the CachedImage.
RenderImageResource::setCachedImage() will also be called from
RenderImageResourceStyleImage::shutdown() via RenderImageResource::shutdown()
to remove m_renderer from the clients of CachedImage by passing a null pointer.

  • rendering/RenderImage.cpp:

(WebCore::RenderImage::styleWillChange):

  • rendering/RenderImageResource.cpp:

(WebCore::RenderImageResource::initialize):
(WebCore::RenderImageResource::shutdown):
(WebCore::RenderImageResource::setCachedImage):
(WebCore::RenderImageResource::resetAnimation):
(WebCore::RenderImageResource::image const):
(WebCore::RenderImageResource::setContainerSizeForRenderer):
(WebCore::RenderImageResource::imageSize const):
(WebCore::RenderImageResource::~RenderImageResource): Deleted.
(WebCore::RenderImageResource::errorOccurred const): Deleted.
(WebCore::RenderImageResource::imageHasRelativeWidth const): Deleted.
(WebCore::RenderImageResource::imageHasRelativeHeight const): Deleted.
(WebCore::RenderImageResource::intrinsicSize const): Deleted.
(WebCore::RenderImageResource::getImageSize const): Deleted.

  • rendering/RenderImageResource.h:

(WebCore::RenderImageResource::initialize):
(WebCore::RenderImageResource::renderer const):
(WebCore::RenderImageResource::errorOccurred const):
(WebCore::RenderImageResource::imageHasRelativeWidth const):
(WebCore::RenderImageResource::imageHasRelativeHeight const):
(WebCore::RenderImageResource::imageSize const):
(WebCore::RenderImageResource::intrinsicSize const):
(WebCore::RenderImageResource::imagePtr const):

  • rendering/RenderImageResourceStyleImage.cpp:

(WebCore::RenderImageResourceStyleImage::initialize):
(WebCore::RenderImageResourceStyleImage::shutdown):
(WebCore::RenderImageResourceStyleImage::image const):
(WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer):
(WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage): Deleted.

  • rendering/RenderImageResourceStyleImage.h:
  • rendering/RenderSnapshottedPlugIn.cpp:

(WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):

  • rendering/svg/RenderSVGImage.cpp:

(WebCore::RenderSVGImage::RenderSVGImage):

Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r220933 r220934  
     12017-08-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
     2
     3        Followup (r220289): RenderImageResourceStyleImage code clean up
     4        https://bugs.webkit.org/show_bug.cgi?id=175444
     5
     6        Reviewed by Darin Adler.
     7
     8        RenderImageResourceStyleImage may be created with a StyleImage of type
     9        StyleGeneratedImage. It may also be associated with a CachedImage which
     10        is loaded through a source URL. In this case, adding and removing m_renderer
     11        as a client of the CachedImage will be done through
     12        RenderImageResource::setCachedImage().
     13
     14        RenderImageResource::setCachedImage() is already called from
     15        ImageLoader::updateRenderer() when the CachedImage finishes loading. This
     16        call adds m_renderer to the clients of the CachedImage.
     17        RenderImageResource::setCachedImage() will also be called from
     18        RenderImageResourceStyleImage::shutdown() via RenderImageResource::shutdown()
     19        to remove m_renderer from the clients of CachedImage by passing a null pointer.
     20
     21        * rendering/RenderImage.cpp:
     22        (WebCore::RenderImage::styleWillChange):
     23        * rendering/RenderImageResource.cpp:
     24        (WebCore::RenderImageResource::initialize):
     25        (WebCore::RenderImageResource::shutdown):
     26        (WebCore::RenderImageResource::setCachedImage):
     27        (WebCore::RenderImageResource::resetAnimation):
     28        (WebCore::RenderImageResource::image const):
     29        (WebCore::RenderImageResource::setContainerSizeForRenderer):
     30        (WebCore::RenderImageResource::imageSize const):
     31        (WebCore::RenderImageResource::~RenderImageResource): Deleted.
     32        (WebCore::RenderImageResource::errorOccurred const): Deleted.
     33        (WebCore::RenderImageResource::imageHasRelativeWidth const): Deleted.
     34        (WebCore::RenderImageResource::imageHasRelativeHeight const): Deleted.
     35        (WebCore::RenderImageResource::intrinsicSize const): Deleted.
     36        (WebCore::RenderImageResource::getImageSize const): Deleted.
     37        * rendering/RenderImageResource.h:
     38        (WebCore::RenderImageResource::initialize):
     39        (WebCore::RenderImageResource::renderer const):
     40        (WebCore::RenderImageResource::errorOccurred const):
     41        (WebCore::RenderImageResource::imageHasRelativeWidth const):
     42        (WebCore::RenderImageResource::imageHasRelativeHeight const):
     43        (WebCore::RenderImageResource::imageSize const):
     44        (WebCore::RenderImageResource::intrinsicSize const):
     45        (WebCore::RenderImageResource::imagePtr const):
     46        * rendering/RenderImageResourceStyleImage.cpp:
     47        (WebCore::RenderImageResourceStyleImage::initialize):
     48        (WebCore::RenderImageResourceStyleImage::shutdown):
     49        (WebCore::RenderImageResourceStyleImage::image const):
     50        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer):
     51        (WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage): Deleted.
     52        * rendering/RenderImageResourceStyleImage.h:
     53        * rendering/RenderSnapshottedPlugIn.cpp:
     54        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
     55        * rendering/svg/RenderSVGImage.cpp:
     56        (WebCore::RenderSVGImage::RenderSVGImage):
     57
    1582017-08-18  Jiewen Tan  <jiewen_tan@apple.com>
    259
  • trunk/Source/WebCore/rendering/RenderImage.cpp

    r219961 r220934  
    209209{
    210210    if (!hasInitializedStyle())
    211         imageResource().initialize(this);
     211        imageResource().initialize(*this);
    212212    RenderReplaced::styleWillChange(diff, newStyle);
    213213}
  • trunk/Source/WebCore/rendering/RenderImageResource.cpp

    r220073 r220934  
    4141}
    4242
    43 RenderImageResource::~RenderImageResource()
    44 {
    45 }
    46 
    47 void RenderImageResource::initialize(RenderElement* renderer)
     43void RenderImageResource::initialize(RenderElement& renderer, CachedImage* styleCachedImage)
    4844{
    4945    ASSERT(!m_renderer);
    50     ASSERT(renderer);
    51     m_renderer = renderer;
     46    ASSERT(!m_cachedImage);
     47    m_renderer = &renderer;
     48    m_cachedImage = styleCachedImage;
     49    m_cachedImageRemoveClientIsNeeded = !styleCachedImage;
    5250}
    5351
    5452void RenderImageResource::shutdown()
     53{
     54    image()->stopAnimation();
     55    setCachedImage(nullptr);
     56}
     57
     58void RenderImageResource::setCachedImage(CachedImage* newImage)
     59{
     60    if (m_cachedImage == newImage)
     61        return;
     62
     63    ASSERT(m_renderer);
     64    if (m_cachedImage && m_cachedImageRemoveClientIsNeeded)
     65        m_cachedImage->removeClient(*m_renderer);
     66    m_cachedImage = newImage;
     67    m_cachedImageRemoveClientIsNeeded = true;
     68    if (!m_cachedImage)
     69        return;
     70
     71    m_cachedImage->addClient(*m_renderer);
     72    if (m_cachedImage->errorOccurred())
     73        m_renderer->imageChanged(m_cachedImage.get());
     74}
     75
     76void RenderImageResource::resetAnimation()
    5577{
    5678    if (!m_cachedImage)
     
    5880
    5981    ASSERT(m_renderer);
    60     image()->stopAnimation();
    61     m_cachedImage->removeClient(*m_renderer);
    62 }
    63 
    64 void RenderImageResource::setCachedImage(CachedImage* newImage)
    65 {
    66     ASSERT(m_renderer);
    67 
    68     if (m_cachedImage == newImage)
    69         return;
    70 
    71     if (m_cachedImage)
    72         m_cachedImage->removeClient(*m_renderer);
    73     m_cachedImage = newImage;
    74     if (m_cachedImage) {
    75         m_cachedImage->addClient(*m_renderer);
    76         if (m_cachedImage->errorOccurred())
    77             m_renderer->imageChanged(m_cachedImage.get());
    78     }
    79 }
    80 
    81 void RenderImageResource::resetAnimation()
    82 {
    83     ASSERT(m_renderer);
    84 
    85     if (!m_cachedImage)
    86         return;
    87 
    8882    image()->resetAnimation();
    8983
     
    9488RefPtr<Image> RenderImageResource::image(const IntSize&) const
    9589{
    96     return m_cachedImage ? m_cachedImage->imageForRenderer(m_renderer) : &Image::nullImage();
    97 }
    98 
    99 bool RenderImageResource::errorOccurred() const
    100 {
    101     return m_cachedImage && m_cachedImage->errorOccurred();
     90    if (!m_cachedImage)
     91        return &Image::nullImage();
     92    if (auto image = m_cachedImage->imageForRenderer(m_renderer))
     93        return image;
     94    return &Image::nullImage();
    10295}
    10396
    10497void RenderImageResource::setContainerSizeForRenderer(const IntSize& imageContainerSize)
    10598{
     99    if (!m_cachedImage)
     100        return;
    106101    ASSERT(m_renderer);
    107     if (m_cachedImage)
    108         m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style().effectiveZoom());
     102    m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style().effectiveZoom());
    109103}
    110104
    111 bool RenderImageResource::imageHasRelativeWidth() const
    112 {
    113     return m_cachedImage ? m_cachedImage->imageHasRelativeWidth() : false;
    114 }
    115 
    116 bool RenderImageResource::imageHasRelativeHeight() const
    117 {
    118     return m_cachedImage ? m_cachedImage->imageHasRelativeHeight() : false;
    119 }
    120 
    121 LayoutSize RenderImageResource::imageSize(float multiplier) const
    122 {
    123     return getImageSize(multiplier, CachedImage::UsedSize);
    124 }
    125 
    126 LayoutSize RenderImageResource::intrinsicSize(float multiplier) const
    127 {
    128     return getImageSize(multiplier, CachedImage::IntrinsicSize);
    129 }
    130 
    131 LayoutSize RenderImageResource::getImageSize(float multiplier, CachedImage::SizeType type) const
     105LayoutSize RenderImageResource::imageSize(float multiplier, CachedImage::SizeType type) const
    132106{
    133107    if (!m_cachedImage)
  • trunk/Source/WebCore/rendering/RenderImageResource.h

    r217012 r220934  
    3939public:
    4040    RenderImageResource();
    41     virtual ~RenderImageResource();
     41    virtual ~RenderImageResource() = default;
    4242
    43     virtual void initialize(RenderElement*);
     43    virtual void initialize(RenderElement& renderer) { initialize(renderer, nullptr); }
    4444    virtual void shutdown();
    4545
     
    5050
    5151    virtual RefPtr<Image> image(const IntSize& size = { }) const;
    52     virtual bool errorOccurred() const;
     52    virtual bool errorOccurred() const { return m_cachedImage && m_cachedImage->errorOccurred(); }
    5353
    5454    virtual void setContainerSizeForRenderer(const IntSize&);
    55     virtual bool imageHasRelativeWidth() const;
    56     virtual bool imageHasRelativeHeight() const;
    5755
    58     virtual LayoutSize imageSize(float multiplier) const;
    59     virtual LayoutSize intrinsicSize(float multiplier) const;
     56    virtual bool imageHasRelativeWidth() const { return m_cachedImage && m_cachedImage->imageHasRelativeWidth(); }
     57    virtual bool imageHasRelativeHeight() const { return m_cachedImage && m_cachedImage->imageHasRelativeHeight(); }
     58
     59    inline LayoutSize imageSize(float multiplier) const { return imageSize(multiplier, CachedImage::UsedSize); }
     60    inline LayoutSize intrinsicSize(float multiplier) const { return imageSize(multiplier, CachedImage::IntrinsicSize); }
    6061
    6162    virtual WrappedImagePtr imagePtr() const { return m_cachedImage.get(); }
    6263
    6364protected:
     65    RenderElement* renderer() const { return m_renderer; }
     66    void initialize(RenderElement&, CachedImage*);
     67   
     68private:
     69    virtual LayoutSize imageSize(float multiplier, CachedImage::SizeType) const;
     70
    6471    RenderElement* m_renderer { nullptr };
    6572    CachedResourceHandle<CachedImage> m_cachedImage;
    66 
    67 private:
    68     LayoutSize getImageSize(float multiplier, CachedImage::SizeType) const;
     73    bool m_cachedImageRemoveClientIsNeeded { true };
    6974};
    7075
  • trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp

    r220289 r220934  
    4040}
    4141
    42 RenderImageResourceStyleImage::~RenderImageResourceStyleImage()
     42void RenderImageResourceStyleImage::initialize(RenderElement& renderer)
    4343{
    44 }
    45 
    46 void RenderImageResourceStyleImage::initialize(RenderElement* renderer)
    47 {
    48     RenderImageResource::initialize(renderer);
    49 
    50     if (m_styleImage->isCachedImage())
    51         m_cachedImage = m_styleImage.get().cachedImage();
    52 
    53     m_styleImage->addClient(m_renderer);
     44    RenderImageResource::initialize(renderer, m_styleImage->isCachedImage() ? m_styleImage.get().cachedImage() : nullptr);
     45    m_styleImage->addClient(this->renderer());
    5446}
    5547
    5648void RenderImageResourceStyleImage::shutdown()
    5749{
    58     ASSERT(m_renderer);
    59     image()->stopAnimation();
    60     m_styleImage->removeClient(m_renderer);
    61     if (!m_styleImage->isCachedImage() && m_cachedImage)
    62         m_cachedImage->removeClient(*m_renderer);
    63     m_cachedImage = nullptr;
     50    ASSERT(renderer());
     51    RenderImageResource::shutdown();
     52    m_styleImage->removeClient(renderer());
    6453}
    6554
     
    6958    if (m_styleImage->isPending())
    7059        return &Image::nullImage();
    71     if (auto image = m_styleImage->image(m_renderer, size))
     60    if (auto image = m_styleImage->image(renderer(), size))
    7261        return image;
    7362    return &Image::nullImage();
     
    7665void RenderImageResourceStyleImage::setContainerSizeForRenderer(const IntSize& size)
    7766{
    78     ASSERT(m_renderer);
    79     m_styleImage->setContainerSizeForRenderer(m_renderer, size, m_renderer->style().effectiveZoom());
     67    ASSERT(renderer());
     68    m_styleImage->setContainerSizeForRenderer(renderer(), size, renderer()->style().effectiveZoom());
    8069}
    8170
  • trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.h

    r216728 r220934  
    3737public:
    3838    explicit RenderImageResourceStyleImage(StyleImage&);
    39     virtual ~RenderImageResourceStyleImage();
    4039
    4140private:
    42     void initialize(RenderElement*) override;
    43     void shutdown() override;
     41    void initialize(RenderElement&) final;
     42    void shutdown() final;
    4443
    45     RefPtr<Image> image(const IntSize& = { }) const override;
    46     bool errorOccurred() const override { return m_styleImage->errorOccurred(); }
     44    RefPtr<Image> image(const IntSize& = { }) const final;
     45    bool errorOccurred() const final { return m_styleImage->errorOccurred(); }
    4746
    48     void setContainerSizeForRenderer(const IntSize&) override;
    49     bool imageHasRelativeWidth() const override { return m_styleImage->imageHasRelativeWidth(); }
    50     bool imageHasRelativeHeight() const override { return m_styleImage->imageHasRelativeHeight(); }
     47    void setContainerSizeForRenderer(const IntSize&) final;
    5148
    52     LayoutSize imageSize(float multiplier) const override { return LayoutSize(m_styleImage->imageSize(m_renderer, multiplier)); }
    53     LayoutSize intrinsicSize(float multiplier) const override { return LayoutSize(m_styleImage->imageSize(m_renderer, multiplier)); }
     49    bool imageHasRelativeWidth() const final { return m_styleImage->imageHasRelativeWidth(); }
     50    bool imageHasRelativeHeight() const final { return m_styleImage->imageHasRelativeHeight(); }
    5451
    55     WrappedImagePtr imagePtr() const override { return m_styleImage->data(); }
     52    WrappedImagePtr imagePtr() const final { return m_styleImage->data(); }
     53    LayoutSize imageSize(float multiplier, CachedImage::SizeType) const final { return LayoutSize(m_styleImage->imageSize(renderer(), multiplier)); }
    5654
    5755    Ref<StyleImage> m_styleImage;
  • trunk/Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp

    r214173 r220934  
    5353    , m_snapshotResource(std::make_unique<RenderImageResource>())
    5454{
    55     m_snapshotResource->initialize(this);
     55    m_snapshotResource->initialize(*this);
    5656}
    5757
  • trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp

    r219961 r220934  
    5050    , m_imageResource(std::make_unique<RenderImageResource>())
    5151{
    52     imageResource().initialize(this);
     52    imageResource().initialize(*this);
    5353}
    5454
Note: See TracChangeset for help on using the changeset viewer.