| Index: Source/core/platform/image-decoders/ImageDecoder.cpp
 | 
| diff --git a/Source/core/platform/image-decoders/ImageDecoder.cpp b/Source/core/platform/image-decoders/ImageDecoder.cpp
 | 
| index 917161f10527eb91c1636fd73868dfe04515499f..db18ed09280479e0719b72675ecee755b285321d 100644
 | 
| --- a/Source/core/platform/image-decoders/ImageDecoder.cpp
 | 
| +++ b/Source/core/platform/image-decoders/ImageDecoder.cpp
 | 
| @@ -152,7 +152,7 @@ void ImageDecoder::clearFrameBuffer(size_t frameIndex)
 | 
|      m_frameBufferCache[frameIndex].clearPixelData();
 | 
|  }
 | 
|  
 | 
| -size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex)
 | 
| +size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex, bool frameRectIsOpaque)
 | 
|  {
 | 
|      ASSERT(frameIndex <= m_frameBufferCache.size());
 | 
|      if (!frameIndex) {
 | 
| @@ -160,6 +160,11 @@ size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex)
 | 
|          return notFound;
 | 
|      }
 | 
|  
 | 
| +    const ImageFrame* currBuffer = &m_frameBufferCache[frameIndex];
 | 
| +    if ((frameRectIsOpaque || currBuffer->alphaBlendSource() == ImageFrame::BlendAtopBgcolor)
 | 
| +        && currBuffer->originalFrameRect().contains(IntRect(IntPoint(), size())))
 | 
| +        return notFound;
 | 
| +
 | 
|      // The starting state for this frame depends on the previous frame's
 | 
|      // disposal method.
 | 
|      size_t prevFrame = frameIndex - 1;
 | 
| 
 |