Changeset 136558 in webkit


Ignore:
Timestamp:
Dec 4, 2012, 1:29:22 PM (13 years ago)
Author:
inferno@chromium.org
Message:

Crash in CachedResource::checkNotify due to -webkit-crossfade.
https://bugs.webkit.org/show_bug.cgi?id=98068

Reviewed by Nate Chapin.

Source/WebCore:

Make sure to not re-add the same client again for |m_cachedFromImage|
and |m_cachedToImage|. This would otherwise cause the CSSCrossfadeValue
client to not get removed from its cached image resource (when it is
going away).

Test: fast/images/crossfade-client-not-removed-crash.html

  • css/CSSCrossfadeValue.cpp:

(WebCore::CSSCrossfadeValue::loadSubimages):

LayoutTests:

  • fast/images/crossfade-client-not-removed-crash-expected.txt: Added.
  • fast/images/crossfade-client-not-removed-crash.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r136557 r136558  
     12012-12-04  Abhishek Arya  <inferno@chromium.org>
     2
     3        Crash in CachedResource::checkNotify due to -webkit-crossfade.
     4        https://bugs.webkit.org/show_bug.cgi?id=98068
     5
     6        Reviewed by Nate Chapin.
     7
     8        * fast/images/crossfade-client-not-removed-crash-expected.txt: Added.
     9        * fast/images/crossfade-client-not-removed-crash.html: Added.
     10
    1112012-12-04  Roger Fong  <roger_fong@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r136554 r136558  
     12012-12-04  Abhishek Arya  <inferno@chromium.org>
     2
     3        Crash in CachedResource::checkNotify due to -webkit-crossfade.
     4        https://bugs.webkit.org/show_bug.cgi?id=98068
     5
     6        Reviewed by Nate Chapin.
     7
     8        Make sure to not re-add the same client again for |m_cachedFromImage|
     9        and |m_cachedToImage|. This would otherwise cause the CSSCrossfadeValue
     10        client to not get removed from its cached image resource (when it is
     11        going away).
     12
     13        Test: fast/images/crossfade-client-not-removed-crash.html
     14
     15        * css/CSSCrossfadeValue.cpp:
     16        (WebCore::CSSCrossfadeValue::loadSubimages):
     17
    1182012-12-04  Julien Chaffraix  <jchaffraix@webkit.org>
    219
  • trunk/Source/WebCore/css/CSSCrossfadeValue.cpp

    r135629 r136558  
    147147void CSSCrossfadeValue::loadSubimages(CachedResourceLoader* cachedResourceLoader)
    148148{
     149    CachedResourceHandle<CachedImage> oldCachedFromImage = m_cachedFromImage;
     150    CachedResourceHandle<CachedImage> oldCachedToImage = m_cachedToImage;
     151
    149152    m_cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader);
    150153    m_cachedToImage = cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader);
    151154
    152     if (m_cachedFromImage)
    153         m_cachedFromImage->addClient(&m_crossfadeSubimageObserver);
    154     if (m_cachedToImage)
    155         m_cachedToImage->addClient(&m_crossfadeSubimageObserver);
     155    if (m_cachedFromImage != oldCachedFromImage) {
     156        if (oldCachedFromImage)
     157            oldCachedFromImage->removeClient(&m_crossfadeSubimageObserver);
     158        if (m_cachedFromImage)
     159            m_cachedFromImage->addClient(&m_crossfadeSubimageObserver);
     160    }
     161
     162    if (m_cachedToImage != oldCachedToImage) {
     163        if (oldCachedToImage)
     164            oldCachedToImage->removeClient(&m_crossfadeSubimageObserver);
     165        if (m_cachedToImage)
     166            m_cachedToImage->addClient(&m_crossfadeSubimageObserver);
     167    }
    156168
    157169    m_crossfadeSubimageObserver.setReady(true);
Note: See TracChangeset for help on using the changeset viewer.