| Index: Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
|
| diff --git a/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp b/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
|
| index 6c1e9a7e9b4177bee277a8466958dae592ed77c9..033d97029ddb752257f95b05e7f1aa5b3d8a1439 100644
|
| --- a/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
|
| +++ b/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
|
| @@ -182,13 +182,14 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersTransparentImage)
|
| const int canvasHeight = 29;
|
| const struct AnimParam {
|
| int xOffset, yOffset, width, height;
|
| - ImageFrame::FrameDisposalMethod dispose;
|
| + ImageFrame::DisposalMethod disposalMethod;
|
| + ImageFrame::AlphaBlendSource alphaBlendSource;
|
| unsigned duration;
|
| bool hasAlpha;
|
| } frameParameters[] = {
|
| - { 0, 0, 11, 29, ImageFrame::DisposeKeep, 1000u, true },
|
| - { 2, 10, 7, 17, ImageFrame::DisposeKeep, 500u, true },
|
| - { 2, 2, 7, 16, ImageFrame::DisposeKeep, 1000u, true },
|
| + { 0, 0, 11, 29, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| + { 2, 10, 7, 17, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 500u, true },
|
| + { 2, 2, 7, 16, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| };
|
|
|
| for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
|
| @@ -200,7 +201,8 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersTransparentImage)
|
| EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
|
| EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
|
| EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
|
| - EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod());
|
| + EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
|
| + EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
|
| EXPECT_EQ(frameParameters[i].duration, frame->duration());
|
| EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
|
| }
|
| @@ -222,14 +224,15 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
|
| const int canvasHeight = 87;
|
| const struct AnimParam {
|
| int xOffset, yOffset, width, height;
|
| - ImageFrame::FrameDisposalMethod dispose;
|
| + ImageFrame::DisposalMethod disposalMethod;
|
| + ImageFrame::AlphaBlendSource alphaBlendSource;
|
| unsigned duration;
|
| bool hasAlpha;
|
| } frameParameters[] = {
|
| - { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
|
| - { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
|
| - { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
|
| - { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
|
| + { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| + { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| + { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| + { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
|
| };
|
|
|
| for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
|
| @@ -241,7 +244,51 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
|
| EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
|
| EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
|
| EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
|
| - EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod());
|
| + EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
|
| + EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
|
| + EXPECT_EQ(frameParameters[i].duration, frame->duration());
|
| + EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
|
| + }
|
| +
|
| + EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount());
|
| + EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount());
|
| +}
|
| +
|
| +TEST_F(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite)
|
| +{
|
| + OwnPtr<WEBPImageDecoder> decoder = createDecoder();
|
| + EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
|
| +
|
| + RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated-no-blend.webp");
|
| + ASSERT_TRUE(data.get());
|
| + decoder->setData(data.get(), true);
|
| +
|
| + const int canvasWidth = 94;
|
| + const int canvasHeight = 87;
|
| + const struct AnimParam {
|
| + int xOffset, yOffset, width, height;
|
| + ImageFrame::DisposalMethod disposalMethod;
|
| + ImageFrame::AlphaBlendSource alphaBlendSource;
|
| + unsigned duration;
|
| + bool hasAlpha;
|
| + } frameParameters[] = {
|
| + { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
|
| + { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
|
| + { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
|
| + { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
|
| + };
|
| +
|
| + for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
|
| + const ImageFrame* const frame = decoder->frameBufferAtIndex(i);
|
| + EXPECT_EQ(ImageFrame::FrameComplete, frame->status());
|
| + EXPECT_EQ(canvasWidth, frame->getSkBitmap().width());
|
| + EXPECT_EQ(canvasHeight, frame->getSkBitmap().height());
|
| + EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x());
|
| + EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
|
| + EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
|
| + EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
|
| + EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
|
| + EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
|
| EXPECT_EQ(frameParameters[i].duration, frame->duration());
|
| EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
|
| }
|
|
|