⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 220066 in webkit


Ignore:
Timestamp:
Jul 31, 2017, 7:37:42 AM (9 years ago)
Author:
jmarcell@apple.com
Message:

Cherry-pick r220048. rdar://problem/33619591

Location:
branches/safari-604-branch
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-604-branch/LayoutTests/ChangeLog

    r220065 r220066  
     12017-07-31  Jason Marcell  <jmarcell@apple.com>
     2
     3        Cherry-pick r220048. rdar://problem/33619591
     4
     5    2017-07-30  Said Abou-Hallawa  <sabouhallawa@apple.com>
     6
     7            RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available
     8            https://bugs.webkit.org/show_bug.cgi?id=174874
     9            <rdar://problem/33530130>
     10
     11            Reviewed by Darin Adler.
     12
     13            * fast/images/image-element-image-content-data-expected.txt: Added.
     14            * fast/images/image-element-image-content-data.html: Added.
     15
    1162017-07-31  Jason Marcell  <jmarcell@apple.com>
    217
  • branches/safari-604-branch/Source/WebCore/ChangeLog

    r220065 r220066  
     12017-07-31  Jason Marcell  <jmarcell@apple.com>
     2
     3        Cherry-pick r220048. rdar://problem/33619591
     4
     5    2017-07-30  Said Abou-Hallawa  <sabouhallawa@apple.com>
     6
     7            RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available
     8            https://bugs.webkit.org/show_bug.cgi?id=174874
     9            <rdar://problem/33530130>
     10
     11            Reviewed by Darin Adler.
     12
     13            If an <img> element has image content data for a none cached image, e.g.
     14            -webkit-named-image, RenderImageResourceStyleImage will be created and
     15            attached to the RenderImage. RenderImageResourceStyleImage::m_cachedImage
     16            will be set to null because the m_styleImage->isCachedImage() is false in
     17            this case. When ImageLoader finishes loading the url of the src attribute,
     18            RenderImageResource::setCachedImage() will be called to set m_cachedImage.
     19
     20            A crash will happen when the RenderImage is destroyed. Destroying the
     21            RenderImage calls RenderImageResourceStyleImage::shutdown() which checks
     22            m_cachedImage and finds it not null, so it calls RenderImageResourceStyleImage::image()
     23            which ends up calling CSSNamedImageValue::image() which returns a null pointer
     24            because the size is empty. RenderImageResourceStyleImage::shutdown() calls
     25            image()->stopAnimation() without checking the return value of image().
     26
     27            Like the base class virtual method RenderImageResource::image(),
     28            RenderImageResourceStyleImage::image() should return the nullImage() if
     29            the image is not available.
     30
     31            Test: fast/images/image-element-image-content-data.html
     32
     33            * css/CSSCrossfadeValue.cpp:
     34            * css/CSSFilterImageValue.cpp:
     35            * page/EventHandler.cpp:
     36            * page/PageSerializer.cpp:
     37            * rendering/RenderElement.cpp:
     38            * rendering/RenderImageResource.cpp:
     39            * rendering/RenderImageResourceStyleImage.cpp:
     40            (WebCore::RenderImageResourceStyleImage::initialize):
     41
     42            (WebCore::RenderImageResourceStyleImage::shutdown): Revert back the changes
     43            of r208511 in this function. Add a call to image()->stopAnimation() without
     44            checking the return of image() since it will return the nullImage() if
     45            the image not available. There is no need to check m_cachedImage before
     46            calling image() because image() does not check or access m_cachedImage.
     47
     48            (WebCore::RenderImageResourceStyleImage::image): The base class method
     49            RenderImageResource::image() returns the nullImage() if the image not
     50            available. This is because CachedImage::imageForRenderer() returns
     51            the nullImage() if the image is not available; see CachedImage.h. We should
     52            do the same for the derived class for consistency.
     53
     54            * rendering/style/ContentData.cpp:
     55            * rendering/style/StyleCachedImage.cpp:
     56            * style/StylePendingResources.cpp:
     57
    1582017-07-31  Jason Marcell  <jmarcell@apple.com>
    259
  • branches/safari-604-branch/Source/WebCore/css/CSSCrossfadeValue.cpp

    r218890 r220066  
    3434#include "CrossfadeGeneratedImage.h"
    3535#include "RenderElement.h"
    36 #include "StyleCachedImage.h"
    3736#include <wtf/text/StringBuilder.h>
    3837
  • branches/safari-604-branch/Source/WebCore/css/CSSFilterImageValue.cpp

    r218890 r220066  
    3434#include "ImageBuffer.h"
    3535#include "RenderElement.h"
    36 #include "StyleCachedImage.h"
    3736#include "StyleResolver.h"
    3837#include <wtf/text/StringBuilder.h>
  • branches/safari-604-branch/Source/WebCore/page/EventHandler.cpp

    r220023 r220066  
    8686#include "ShadowRoot.h"
    8787#include "SpatialNavigation.h"
    88 #include "StyleCachedImage.h"
    8988#include "TextEvent.h"
    9089#include "TextIterator.h"
  • branches/safari-604-branch/Source/WebCore/page/PageSerializer.cpp

    r216702 r220066  
    5353#include "Page.h"
    5454#include "RenderElement.h"
    55 #include "StyleCachedImage.h"
    5655#include "StyleImage.h"
    5756#include "StyleProperties.h"
  • branches/safari-604-branch/Source/WebCore/rendering/RenderElement.cpp

    r217893 r220066  
    5151#include "RenderFlexibleBox.h"
    5252#include "RenderImage.h"
    53 #include "RenderImageResourceStyleImage.h"
    5453#include "RenderInline.h"
    5554#include "RenderIterator.h"
  • branches/safari-604-branch/Source/WebCore/rendering/RenderImageResource.cpp

    r217012 r220066  
    3333#include "RenderElement.h"
    3434#include "RenderImage.h"
    35 #include "RenderImageResourceStyleImage.h"
    3635
    3736namespace WebCore {
  • branches/safari-604-branch/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp

    r219205 r220066  
    3131#include "CachedImage.h"
    3232#include "RenderElement.h"
    33 #include "StyleCachedImage.h"
    3433
    3534namespace WebCore {
    … …  
    4948
    5049    if (m_styleImage->isCachedImage())
    51         m_cachedImage = m_styleImage.get().cachedImage();
     50        m_cachedImage = m_styleImage->cachedImage();
    5251
    5352    m_styleImage->addClient(m_renderer);
    … …  
    5756{
    5857    ASSERT(m_renderer);
     58    image()->stopAnimation();
    5959    m_styleImage->removeClient(m_renderer);
    60     if (m_cachedImage) {
    61         image()->stopAnimation();
    62         m_cachedImage = nullptr;
    63     }
     60    m_cachedImage = nullptr;
    6461}
    6562
    … …  
    6764{
    6865    // Generated content may trigger calls to image() while we're still pending, don't assert but gracefully exit.
    69     return !m_styleImage->isPending() ? m_styleImage->image(m_renderer, size) : &Image::nullImage();
     66    if (m_styleImage->isPending())
     67        return &Image::nullImage();
     68    if (auto image = m_styleImage->image(m_renderer, size))
     69        return image;
     70    return &Image::nullImage();
    7071}
    7172
  • branches/safari-604-branch/Source/WebCore/rendering/style/ContentData.cpp

    r210758 r220066  
    2626#include "RenderImage.h"
    2727#include "RenderImageResource.h"
    28 #include "RenderImageResourceStyleImage.h"
    2928#include "RenderQuote.h"
    3029#include "RenderStyle.h"
  • branches/safari-604-branch/Source/WebCore/rendering/style/StyleCachedImage.cpp

    r215700 r220066  
    3030#include "CachedImage.h"
    3131#include "RenderElement.h"
    32 #include "RenderView.h"
    3332
    3433namespace WebCore {
  • branches/safari-604-branch/Source/WebCore/style/StylePendingResources.cpp

    r210758 r220066  
    3535#include "RenderStyle.h"
    3636#include "SVGURIReference.h"
    37 #include "StyleCachedImage.h"
    3837#include "StyleGeneratedImage.h"
    3938#include "TransformFunctions.h"
Note: See TracChangeset for help on using the changeset viewer.