Index: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
index 70de78249db332997998e3edd75e1cd5195529e1..c8383a0fa48e37c0d07b2644c18460b9280b4bb9 100644 |
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
@@ -114,6 +114,9 @@ PassOwnPtr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOp |
size_t ImageDecoder::frameCount() |
{ |
+ if (m_haveUpdatedFrameCount) |
+ return m_frameBufferCache.size(); |
+ |
const size_t oldSize = m_frameBufferCache.size(); |
const size_t newSize = decodeFrameCount(); |
if (oldSize != newSize) { |
@@ -123,6 +126,7 @@ size_t ImageDecoder::frameCount() |
initializeNewFrame(i); |
} |
} |
+ m_haveUpdatedFrameCount = true; |
return newSize; |
} |
@@ -142,15 +146,11 @@ ImageFrame* ImageDecoder::frameBufferAtIndex(size_t index) |
return frame; |
} |
-bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const |
-{ |
- return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
-} |
- |
-bool ImageDecoder::frameIsCompleteAtIndex(size_t index) const |
+bool ImageDecoder::frameIsFullyReceivedAtIndex(size_t index) const |
{ |
- return (index < m_frameBufferCache.size()) && |
- (m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete); |
+ ASSERT(m_haveUpdatedFrameCount); |
+ return (index < m_frameBufferCache.size()) |
+ && (m_isAllDataReceived || failed() || m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete); |
} |
size_t ImageDecoder::frameBytesAtIndex(size_t index) const |
@@ -171,6 +171,14 @@ size_t ImageDecoder::frameBytesAtIndex(size_t index) const |
return ImageSize(frameSizeAtIndex(index)).area * sizeof(ImageFrame::PixelData); |
} |
+bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const |
+{ |
+ ASSERT(m_haveUpdatedFrameCount); |
+ if (m_frameBufferCache.size() == 1) |
+ return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
+ return !frameIsFullyReceivedAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
+} |
+ |
bool ImageDecoder::deferredImageDecodingEnabled() |
{ |
return DeferredImageDecoder::enabled(); |