Changeset 93441 in webkit


Ignore:
Timestamp:
Aug 19, 2011 2:50:10 PM (13 years ago)
Author:
jamesr@google.com
Message:

REGRESSION(r91628): 3 canvas tests crash on Chromium Linux and one test fail on Chromium Mac
https://bugs.webkit.org/show_bug.cgi?id=65063

Reviewed by Darin Fisher.

Fixes crashes due to a bad cast from Image to BitmapImage on skia ports
that use BitmapImageSingleFrameSkia. In the skia port
Image::isBitmapImage() returning true does not necessarily mean that
Image is of type BitmapImage.

Covered by fast/canvas/canvas-as-image.html and many other canvas
tests.

Patch originally by Tom Hudson.

  • platform/graphics/BitmapImage.h:

(WebCore::BitmapImage::currentFrameHasAlpha):
(WebCore::BitmapImage::notSolidColor):

  • platform/graphics/Image.cpp:

(WebCore::Image::drawTiled):

  • platform/graphics/Image.h:

(WebCore::Image::currentFrameHasAlpha):
(WebCore::Image::notSolidColor):

  • platform/graphics/skia/BitmapImageSingleFrameSkia.h:

(WebCore::BitmapImageSingleFrameSkia::currentFrameHasAlpha):
(WebCore::BitmapImageSingleFrameSkia::notSolidColor):

  • rendering/RenderImage.cpp:

(WebCore::RenderImage::backgroundIsObscured):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r93440 r93441  
     12011-08-19  James Robinson  <jamesr@chromium.org>
     2
     3        REGRESSION(r91628): 3 canvas tests crash on Chromium Linux and one test fail on Chromium Mac
     4        https://bugs.webkit.org/show_bug.cgi?id=65063
     5
     6        Reviewed by Darin Fisher.
     7
     8        Fixes crashes due to a bad cast from Image to BitmapImage on skia ports
     9        that use BitmapImageSingleFrameSkia. In the skia port
     10        Image::isBitmapImage() returning true does not necessarily mean that
     11        Image is of type BitmapImage.
     12
     13        Covered by fast/canvas/canvas-as-image.html and many other canvas
     14        tests.
     15
     16        Patch originally by Tom Hudson.
     17
     18        * platform/graphics/BitmapImage.h:
     19        (WebCore::BitmapImage::currentFrameHasAlpha):
     20        (WebCore::BitmapImage::notSolidColor):
     21        * platform/graphics/Image.cpp:
     22        (WebCore::Image::drawTiled):
     23        * platform/graphics/Image.h:
     24        (WebCore::Image::currentFrameHasAlpha):
     25        (WebCore::Image::notSolidColor):
     26        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
     27        (WebCore::BitmapImageSingleFrameSkia::currentFrameHasAlpha):
     28        (WebCore::BitmapImageSingleFrameSkia::notSolidColor):
     29        * rendering/RenderImage.cpp:
     30        (WebCore::RenderImage::backgroundIsObscured):
     31
    1322011-08-19  Emil A Eklund  <eae@chromium.org>
    233
  • trunk/Source/WebCore/platform/graphics/BitmapImage.h

    r91628 r93441  
    160160    virtual NativeImagePtr nativeImageForCurrentFrame() { return frameAtIndex(currentFrame()); }
    161161    bool frameHasAlphaAtIndex(size_t);
    162     bool currentFrameHasAlpha() { return frameHasAlphaAtIndex(currentFrame()); }
     162    virtual bool currentFrameHasAlpha() { return frameHasAlphaAtIndex(currentFrame()); }
    163163
    164164#if !ASSERT_DISABLED
    165     bool notSolidColor()
     165    virtual bool notSolidColor()
    166166    {
    167167        return size().width() != 1 || size().height() != 1 || frameCount() > 1;
  • trunk/Source/WebCore/platform/graphics/Image.cpp

    r92068 r93441  
    116116    // See <https://webkit.org/b/59043>.
    117117#if !PLATFORM(WX)
    118     ASSERT(!isBitmapImage() || static_cast<BitmapImage*>(this)->notSolidColor());
     118    ASSERT(!isBitmapImage() || notSolidColor());
    119119#endif
    120120
  • trunk/Source/WebCore/platform/graphics/Image.h

    r91496 r93441  
    8989
    9090    virtual bool isBitmapImage() const { return false; }
     91    virtual bool currentFrameHasAlpha() { return false; }
    9192
    9293    // Derived classes should override this if they can assure that
     
    158159                             const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& destRect);
    159160
     161#if !ASSERT_DISABLED
     162    virtual bool notSolidColor() { return true; }
     163#endif
     164
    160165protected:
    161166    Image(ImageObserver* = 0);
  • trunk/Source/WebCore/platform/graphics/skia/BitmapImageSingleFrameSkia.h

    r75469 r93441  
    5454    virtual bool isBitmapImage() const { return true; }
    5555
     56    virtual bool currentFrameHasAlpha() { return !m_nativeImage.isOpaque(); }
     57
    5658    virtual IntSize size() const
    5759    {
     
    7375    }
    7476
     77#if !ASSERT_DISABLED
     78    virtual bool notSolidColor()
     79    {
     80        return m_nativeImage.width() != 1 || m_nativeImage.height() != 1;
     81    }
     82#endif
     83
    7584protected:
    7685    virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator);
  • trunk/Source/WebCore/rendering/RenderImage.cpp

    r93279 r93441  
    409409    // Check for bitmap image with alpha.
    410410    Image* image = m_imageResource->image().get();
    411     if (!image || !image->isBitmapImage())
     411    if (!image || !image->isBitmapImage() || image->currentFrameHasAlpha())
    412412        return false;
    413413       
    414     BitmapImage* bitmapImage = static_cast<BitmapImage*>(image);
    415     if (bitmapImage->currentFrameHasAlpha())
    416         return false;
    417 
    418414    return true;
    419415}
Note: See TracChangeset for help on using the changeset viewer.