| Index: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
|
| index a252a41ee1fde222e4a7d2ec4fa3f8a7a163b898..0a2f2b85b8baba243ecbe0706c4bb1be3943ecd1 100644
|
| --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
|
| @@ -32,6 +32,7 @@
|
|
|
| #include "platform/SharedBuffer.h"
|
| #include "platform/image-decoders/ImageDecoderTestHelpers.h"
|
| +#include "platform/image-decoders/SharedBufferSegmentReader.h"
|
| #include "public/platform/WebData.h"
|
| #include "public/platform/WebSize.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -64,7 +65,8 @@ void testRandomFrameDecode(const char* dir, const char* gifFile)
|
|
|
| // Random decoding should get the same results as sequential decoding.
|
| OwnPtr<ImageDecoder> decoder = createDecoder();
|
| - decoder->setData(fullData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(fullData));
|
| + decoder->setData(segmentReader.get(), true);
|
| const size_t skippingStep = 5;
|
| for (size_t i = 0; i < skippingStep; ++i) {
|
| for (size_t j = i; j < frameCount; j += skippingStep) {
|
| @@ -76,7 +78,7 @@ void testRandomFrameDecode(const char* dir, const char* gifFile)
|
|
|
| // Decoding in reverse order.
|
| decoder = createDecoder();
|
| - decoder->setData(fullData.get(), true);
|
| + decoder->setData(segmentReader.get(), true);
|
| for (size_t i = frameCount; i; --i) {
|
| SCOPED_TRACE(testing::Message() << "Reverse i:" << i);
|
| ImageFrame* frame = decoder->frameBufferAtIndex(i - 1);
|
| @@ -95,7 +97,8 @@ void testRandomDecodeAfterClearFrameBufferCache(const char* dir, const char* gif
|
| size_t frameCount = baselineHashes.size();
|
|
|
| OwnPtr<ImageDecoder> decoder = createDecoder();
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
| for (size_t clearExceptFrame = 0; clearExceptFrame < frameCount; ++clearExceptFrame) {
|
| decoder->clearCacheExceptFrame(clearExceptFrame);
|
| const size_t skippingStep = 5;
|
| @@ -117,7 +120,8 @@ TEST(GIFImageDecoderTest, decodeTwoFrames)
|
|
|
| RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
|
| ASSERT_TRUE(data.get());
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
|
|
|
| ImageFrame* frame = decoder->frameBufferAtIndex(0);
|
| @@ -143,7 +147,8 @@ TEST(GIFImageDecoderTest, parseAndDecode)
|
|
|
| RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
|
| ASSERT_TRUE(data.get());
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
|
|
|
| // This call will parse the entire file.
|
| @@ -161,6 +166,7 @@ TEST(GIFImageDecoderTest, parseAndDecode)
|
| EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount());
|
| }
|
|
|
| +// FIXME: Call ImageDecoderTestHelpers' testByteByByteDecode
|
| TEST(GIFImageDecoderTest, parseByteByByte)
|
| {
|
| OwnPtr<ImageDecoder> decoder = createDecoder();
|
| @@ -173,7 +179,8 @@ TEST(GIFImageDecoderTest, parseByteByByte)
|
| // Pass data to decoder byte by byte.
|
| for (size_t length = 1; length <= data->size(); ++length) {
|
| RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length);
|
| - decoder->setData(tempData.get(), length == data->size());
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(tempData));
|
| + decoder->setData(segmentReader.get(), length == data->size());
|
|
|
| EXPECT_LE(frameCount, decoder->frameCount());
|
| frameCount = decoder->frameCount();
|
| @@ -199,7 +206,8 @@ TEST(GIFImageDecoderTest, parseAndDecodeByteByByte)
|
| // Pass data to decoder byte by byte.
|
| for (size_t length = 1; length <= data->size(); ++length) {
|
| RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length);
|
| - decoder->setData(tempData.get(), length == data->size());
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), length == data->size());
|
|
|
| EXPECT_LE(frameCount, decoder->frameCount());
|
| frameCount = decoder->frameCount();
|
| @@ -220,7 +228,8 @@ TEST(GIFImageDecoderTest, brokenSecondFrame)
|
|
|
| RefPtr<SharedBuffer> data = readFile(webTestsDataDir, "broken.gif");
|
| ASSERT_TRUE(data.get());
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
|
|
| // One frame is detected but cannot be decoded.
|
| EXPECT_EQ(1u, decoder->frameCount());
|
| @@ -245,7 +254,8 @@ TEST(GIFImageDecoderTest, progressiveDecode)
|
| for (size_t i = 1; i <= fullLength; i += increment) {
|
| decoder = createDecoder();
|
| RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), i);
|
| - decoder->setData(data.get(), i == fullLength);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), i == fullLength);
|
| frame = decoder->frameBufferAtIndex(0);
|
| if (!frame) {
|
| truncatedHashes.append(0);
|
| @@ -259,7 +269,8 @@ TEST(GIFImageDecoderTest, progressiveDecode)
|
| EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
|
| for (size_t i = 1; i <= fullLength; i += increment) {
|
| RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), i);
|
| - decoder->setData(data.get(), i == fullLength);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), i == fullLength);
|
| frame = decoder->frameBufferAtIndex(0);
|
| if (!frame) {
|
| progressiveHashes.append(0);
|
| @@ -288,7 +299,8 @@ TEST(GIFImageDecoderTest, allDataReceivedTruncation)
|
|
|
| ASSERT_GE(data->size(), 10u);
|
| RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), data->size() - 10);
|
| - decoder->setData(tempData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(tempData));
|
| + decoder->setData(segmentReader.get(), true);
|
|
|
| EXPECT_EQ(2u, decoder->frameCount());
|
| EXPECT_FALSE(decoder->failed());
|
| @@ -305,7 +317,8 @@ TEST(GIFImageDecoderTest, frameIsComplete)
|
|
|
| RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
|
| ASSERT_TRUE(data.get());
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
|
|
| EXPECT_EQ(2u, decoder->frameCount());
|
| EXPECT_FALSE(decoder->failed());
|
| @@ -323,14 +336,16 @@ TEST(GIFImageDecoderTest, frameIsCompleteLoading)
|
|
|
| ASSERT_GE(data->size(), 10u);
|
| RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), data->size() - 10);
|
| - decoder->setData(tempData.get(), false);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(tempData));
|
| + decoder->setData(segmentReader.get(), false);
|
|
|
| EXPECT_EQ(2u, decoder->frameCount());
|
| EXPECT_FALSE(decoder->failed());
|
| EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0));
|
| EXPECT_FALSE(decoder->frameIsCompleteAtIndex(1));
|
|
|
| - decoder->setData(data.get(), true);
|
| + segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(2u, decoder->frameCount());
|
| EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0));
|
| EXPECT_TRUE(decoder->frameIsCompleteAtIndex(1));
|
| @@ -344,13 +359,15 @@ TEST(GIFImageDecoderTest, badTerminator)
|
| ASSERT_TRUE(testData.get());
|
|
|
| OwnPtr<ImageDecoder> referenceDecoder = createDecoder();
|
| - referenceDecoder->setData(referenceData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> referenceSharedBufferSegmentReader = adoptRef(new SharedBufferSegmentReader(referenceData));
|
| + referenceDecoder->setData(referenceSharedBufferSegmentReader.get(), true);
|
| EXPECT_EQ(1u, referenceDecoder->frameCount());
|
| ImageFrame* referenceFrame = referenceDecoder->frameBufferAtIndex(0);
|
| ASSERT(referenceFrame);
|
|
|
| OwnPtr<ImageDecoder> testDecoder = createDecoder();
|
| - testDecoder->setData(testData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(testData));
|
| + testDecoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(1u, testDecoder->frameCount());
|
| ImageFrame* testFrame = testDecoder->frameBufferAtIndex(0);
|
| ASSERT(testFrame);
|
| @@ -370,7 +387,8 @@ TEST(GIFImageDecoderTest, updateRequiredPreviousFrameAfterFirstDecode)
|
| size_t partialSize = 1;
|
| do {
|
| RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), partialSize);
|
| - decoder->setData(data.get(), false);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), false);
|
| ++partialSize;
|
| } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->status() == ImageFrame::FrameEmpty);
|
|
|
| @@ -379,7 +397,8 @@ TEST(GIFImageDecoderTest, updateRequiredPreviousFrameAfterFirstDecode)
|
| for (size_t i = 1; i < frameCount; ++i)
|
| EXPECT_EQ(i - 1, decoder->frameBufferAtIndex(i)->requiredPreviousFrameIndex());
|
|
|
| - decoder->setData(fullData.get(), true);
|
| + RefPtr<SegmentReader> fullSegmentReader = adoptRef(new SharedBufferSegmentReader(fullData));
|
| + decoder->setData(fullSegmentReader.get(), true);
|
| for (size_t i = 0; i < frameCount; ++i)
|
| EXPECT_EQ(kNotFound, decoder->frameBufferAtIndex(i)->requiredPreviousFrameIndex());
|
| }
|
| @@ -416,12 +435,14 @@ TEST(GIFImageDecoderTest, resumePartialDecodeAfterClearFrameBufferCache)
|
| size_t partialSize = 1;
|
| do {
|
| RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), partialSize);
|
| - decoder->setData(data.get(), false);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), false);
|
| ++partialSize;
|
| } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->status() == ImageFrame::FrameEmpty);
|
|
|
| // Skip to the last frame and clear.
|
| - decoder->setData(fullData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(fullData));
|
| + decoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(frameCount, decoder->frameCount());
|
| ImageFrame* lastFrame = decoder->frameBufferAtIndex(frameCount - 1);
|
| EXPECT_EQ(baselineHashes[frameCount - 1], hashBitmap(lastFrame->getSkBitmap()));
|
| @@ -441,7 +462,8 @@ TEST(GIFImageDecoderTest, badInitialCode)
|
| ASSERT_TRUE(testData.get());
|
|
|
| OwnPtr<ImageDecoder> testDecoder = createDecoder();
|
| - testDecoder->setData(testData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(testData));
|
| + testDecoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(1u, testDecoder->frameCount());
|
| ASSERT_TRUE(testDecoder->frameBufferAtIndex(0));
|
| EXPECT_TRUE(testDecoder->failed());
|
| @@ -454,7 +476,8 @@ TEST(GIFImageDecoderTest, badCode)
|
| ASSERT_TRUE(testData.get());
|
|
|
| OwnPtr<ImageDecoder> testDecoder = createDecoder();
|
| - testDecoder->setData(testData.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(testData));
|
| + testDecoder->setData(segmentReader.get(), true);
|
| EXPECT_EQ(1u, testDecoder->frameCount());
|
| ASSERT_TRUE(testDecoder->frameBufferAtIndex(0));
|
| EXPECT_TRUE(testDecoder->failed());
|
| @@ -467,7 +490,8 @@ TEST(GIFImageDecoderTest, invalidDisposalMethod)
|
| // The image has 2 frames, with disposal method 4 and 5, respectively.
|
| RefPtr<SharedBuffer> data = readFile(webTestsDataDir, "invalid-disposal-method.gif");
|
| ASSERT_TRUE(data.get());
|
| - decoder->setData(data.get(), true);
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), true);
|
|
|
| EXPECT_EQ(2u, decoder->frameCount());
|
| // Disposal method 4 is converted to ImageFrame::DisposeOverwritePrevious.
|
| @@ -488,7 +512,8 @@ TEST(GIFImageDecoderTest, firstFrameHasGreaterSizeThanScreenSize)
|
| for (size_t i = 1; i <= fullData->size(); ++i) {
|
| decoder = createDecoder();
|
| RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), i);
|
| - decoder->setData(data.get(), i == fullData->size());
|
| + RefPtr<SharedBufferSegmentReader> segmentReader = adoptRef(new SharedBufferSegmentReader(data));
|
| + decoder->setData(segmentReader.get(), i == fullData->size());
|
|
|
| if (decoder->isSizeAvailable() && !frameSize.width() && !frameSize.height()) {
|
| frameSize = decoder->decodedSize();
|
|
|