| Index: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
|
| diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
|
| index b954a982e6fbc2decfe0c22117ab6573de011dc8..767f132341f36b4cdf99117e4836bde489b8d19e 100644
|
| --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
|
| +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
|
| @@ -159,7 +159,6 @@ bool GIFImageDecoder::HaveDecodedRow(size_t frame_index,
|
| *current_address = color_table_iter[source_value];
|
| } else {
|
| *current_address = 0;
|
| - current_buffer_saw_alpha_ = true;
|
| }
|
| }
|
| } else {
|
| @@ -168,8 +167,6 @@ bool GIFImageDecoder::HaveDecodedRow(size_t frame_index,
|
| if ((source_value != transparent_pixel) &&
|
| (source_value < color_table.size()))
|
| *current_address = color_table_iter[source_value];
|
| - else
|
| - current_buffer_saw_alpha_ = true;
|
| }
|
| }
|
|
|
| @@ -191,10 +188,17 @@ bool GIFImageDecoder::FrameComplete(size_t frame_index) {
|
| if (!InitFrameBuffer(frame_index))
|
| return SetFailed();
|
|
|
| - if (!current_buffer_saw_alpha_)
|
| - CorrectAlphaWhenFrameBufferSawNoAlpha(frame_index);
|
| + ImageFrame& buffer = frame_buffer_cache_[frame_index];
|
| +
|
| + const GIFFrameContext* frame_context = reader_->FrameContext(frame_index);
|
| + const size_t transparent_pixel = frame_context->TransparentPixel();
|
| + const GIFColorMap::Table& color_table =
|
| + frame_context->LocalColorMap().IsDefined()
|
| + ? frame_context->LocalColorMap().GetTable()
|
| + : reader_->GlobalColorMap().GetTable();
|
| + buffer.SetHasAlpha(transparent_pixel <= color_table.size());
|
|
|
| - frame_buffer_cache_[frame_index].SetStatus(ImageFrame::kFrameComplete);
|
| + buffer.SetStatus(ImageFrame::kFrameComplete);
|
|
|
| return true;
|
| }
|
| @@ -269,10 +273,6 @@ void GIFImageDecoder::Parse(GIFParseQuery query) {
|
| SetFailed();
|
| }
|
|
|
| -void GIFImageDecoder::OnInitFrameBuffer(size_t frame_index) {
|
| - current_buffer_saw_alpha_ = false;
|
| -}
|
| -
|
| bool GIFImageDecoder::CanReusePreviousFrameBuffer(size_t frame_index) const {
|
| DCHECK(frame_index < frame_buffer_cache_.size());
|
| return frame_buffer_cache_[frame_index].GetDisposalMethod() !=
|
|
|