Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 } | 179 } |
| 180 | 180 |
| 181 TEST(GIFImageDecoderTest, brokenSecondFrame) | 181 TEST(GIFImageDecoderTest, brokenSecondFrame) |
| 182 { | 182 { |
| 183 OwnPtr<GIFImageDecoder> decoder(createDecoder()); | 183 OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
| 184 | 184 |
| 185 RefPtr<SharedBuffer> data = readFile("/Source/WebKit/chromium/tests/data/bro ken.gif"); | 185 RefPtr<SharedBuffer> data = readFile("/Source/WebKit/chromium/tests/data/bro ken.gif"); |
| 186 ASSERT_TRUE(data.get()); | 186 ASSERT_TRUE(data.get()); |
| 187 decoder->setData(data.get(), true); | 187 decoder->setData(data.get(), true); |
| 188 | 188 |
| 189 EXPECT_EQ(0u, decoder->frameCount()); | 189 // One frame is detected but cannot be decoded. |
| 190 ImageFrame* frame = decoder->frameBufferAtIndex(0); | 190 EXPECT_EQ(1u, decoder->frameCount()); |
| 191 ImageFrame* frame = decoder->frameBufferAtIndex(1); | |
| 191 EXPECT_FALSE(frame); | 192 EXPECT_FALSE(frame); |
| 192 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); | |
| 193 } | 193 } |
| 194 | 194 |
| 195 TEST(GIFImageDecoderTest, progressiveDecode) | 195 TEST(GIFImageDecoderTest, progressiveDecode) |
| 196 { | 196 { |
| 197 RefPtr<SharedBuffer> fullData = readFile("/Source/WebKit/chromium/tests/data /radient.gif"); | 197 RefPtr<SharedBuffer> fullData = readFile("/Source/WebKit/chromium/tests/data /radient.gif"); |
| 198 ASSERT_TRUE(fullData.get()); | 198 ASSERT_TRUE(fullData.get()); |
| 199 const size_t fullLength = fullData->size(); | 199 const size_t fullLength = fullData->size(); |
| 200 | 200 |
| 201 OwnPtr<GIFImageDecoder> decoder; | 201 OwnPtr<GIFImageDecoder> decoder; |
| 202 ImageFrame* frame; | 202 ImageFrame* frame; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 290 EXPECT_FALSE(decoder->failed()); | 290 EXPECT_FALSE(decoder->failed()); |
| 291 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); | 291 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); |
| 292 EXPECT_FALSE(decoder->frameIsCompleteAtIndex(1)); | 292 EXPECT_FALSE(decoder->frameIsCompleteAtIndex(1)); |
| 293 | 293 |
| 294 decoder->setData(data.get(), true); | 294 decoder->setData(data.get(), true); |
| 295 EXPECT_EQ(2u, decoder->frameCount()); | 295 EXPECT_EQ(2u, decoder->frameCount()); |
| 296 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); | 296 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(0)); |
| 297 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(1)); | 297 EXPECT_TRUE(decoder->frameIsCompleteAtIndex(1)); |
| 298 } | 298 } |
| 299 | 299 |
| 300 TEST(GIFImageDecoderTest, badImageSeparator) | |
| 301 { | |
| 302 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources /animated.gif"); | |
| 303 ASSERT_TRUE(fullData.get()); | |
| 304 const size_t fullLength = fullData->size(); | |
| 305 | |
| 306 OwnPtr<GIFImageDecoder> decoder(createDecoder()); | |
| 307 decoder->setData(fullData.get(), true); | |
| 308 EXPECT_EQ(2u, decoder->frameCount()); | |
| 309 ImageFrame* frame = decoder->frameBufferAtIndex(0); | |
| 310 ASSERT_TRUE(frame); | |
| 311 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | |
| 312 const unsigned referenceHash = hashSkBitmap(frame->getSkBitmap()); | |
| 313 | |
| 314 // Replace the second image separator with an invalid character. | |
| 315 RefPtr<SharedBuffer> badData = SharedBuffer::create(); | |
| 316 int count = 0; | |
| 317 for (size_t i = 0; i < fullLength; ++i) { | |
| 318 if (fullData->data()[i] == ',') { | |
| 319 if (count++ == 1) { | |
|
Peter Kasting
2013/05/29 04:30:17
Nit: I think "if (++count == 2)" is slightly clear
Alpha Left Google
2013/05/29 19:38:58
Done. SharedBuffer return const char* so a copy is
Peter Kasting
2013/05/29 20:02:53
Why? A file to test this could be a few hundred b
| |
| 320 badData->append("=", 1); | |
| 321 continue; | |
| 322 } | |
| 323 } | |
| 324 badData->append(fullData->data() + i, 1); | |
| 325 } | |
| 326 | |
| 327 decoder = createDecoder(); | |
| 328 decoder->setData(badData.get(), true); | |
| 329 EXPECT_EQ(1u, decoder->frameCount()); | |
| 330 frame = decoder->frameBufferAtIndex(0); | |
| 331 ASSERT_TRUE(frame); | |
| 332 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | |
| 333 const unsigned hash = hashSkBitmap(frame->getSkBitmap()); | |
| 334 | |
| 335 EXPECT_EQ(referenceHash, hash); | |
| 336 } | |
| 337 | |
| 300 #endif | 338 #endif |
| 301 | 339 |
| 302 } // namespace | 340 } // namespace |
| OLD | NEW |