Changeset 202800 in webkit
- Timestamp:
- Jul 3, 2016 11:30:28 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r202779 r202800 1 2016-07-03 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [image-decoders] Make ImageDecoder::size() lazily decode the image if needed to return a valid size 4 https://bugs.webkit.org/show_bug.cgi?id=159297 5 6 Reviewed by Antonio Gomes. 7 8 It's otherwise confusing leading to bugs like #159089. 9 10 * platform/image-decoders/ImageDecoder.cpp: 11 (WebCore::ImageDecoder::createFrameImageAtIndex): Check the size at the beginning and return early if it's 12 empty. We no longer need to check the size after calling frameBufferAtIndex(). 13 * platform/image-decoders/ImageDecoder.h: 14 (WebCore::ImageDecoder::size): Check first is size is available, which lazily decodes the image. 15 (WebCore::ImageDecoder::scaledSize): Remove const. 16 (WebCore::ImageDecoder::frameSizeAtIndex): Ditto. 17 * platform/image-decoders/ico/ICOImageDecoder.cpp: 18 (WebCore::ICOImageDecoder::size): Ditto. 19 (WebCore::ICOImageDecoder::frameSizeAtIndex): Ditto. 20 * platform/image-decoders/ico/ICOImageDecoder.h: 21 1 22 2016-07-02 Youenn Fablet <youenn@apple.com> 2 23 -
trunk/Source/WebCore/platform/image-decoders/ImageDecoder.cpp
r202616 r202800 313 313 NativeImagePtr ImageDecoder::createFrameImageAtIndex(size_t index, SubsamplingLevel) 314 314 { 315 // Zero-height images can cause problems for some ports. If we have an empty image dimension, just bail. 316 if (size().isEmpty()) 317 return nullptr; 318 315 319 ImageFrame* buffer = frameBufferAtIndex(index); 316 // Zero-height images can cause problems for some ports. If we have an empty image dimension, just bail. 317 // It's important to check the size after calling frameBufferAtIndex() to ensure the decoder has updated the size. 318 // See https://bugs.webkit.org/show_bug.cgi?id=159089. 319 if (!buffer || buffer->status() == ImageFrame::FrameEmpty || size().isEmpty()) 320 if (!buffer || buffer->status() == ImageFrame::FrameEmpty) 320 321 return nullptr; 321 322 -
trunk/Source/WebCore/platform/image-decoders/ImageDecoder.h
r201441 r202800 272 272 } 273 273 274 virtual IntSize size() const { return m_size; }275 276 IntSize scaledSize() const274 virtual IntSize size() { return isSizeAvailable() ? m_size : IntSize(); } 275 276 IntSize scaledSize() 277 277 { 278 278 return m_scaled ? IntSize(m_scaledColumns.size(), m_scaledRows.size()) : size(); … … 284 284 // composites any smaller frames against previous frames to create full- 285 285 // size frames. 286 virtual IntSize frameSizeAtIndex(size_t, SubsamplingLevel) const286 virtual IntSize frameSizeAtIndex(size_t, SubsamplingLevel) 287 287 { 288 288 return size(); -
trunk/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
r202677 r202800 79 79 } 80 80 81 IntSize ICOImageDecoder::size() const81 IntSize ICOImageDecoder::size() 82 82 { 83 83 return m_frameSize.isEmpty() ? ImageDecoder::size() : m_frameSize; 84 84 } 85 85 86 IntSize ICOImageDecoder::frameSizeAtIndex(size_t index, SubsamplingLevel) const86 IntSize ICOImageDecoder::frameSizeAtIndex(size_t index, SubsamplingLevel) 87 87 { 88 88 return (index && (index < m_dirEntries.size())) ? m_dirEntries[index].m_size : size(); -
trunk/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h
r202677 r202800 48 48 void setData(SharedBuffer&, bool allDataReceived) override; 49 49 bool isSizeAvailable() override; 50 IntSize size() constoverride;51 IntSize frameSizeAtIndex(size_t, SubsamplingLevel) constoverride;50 IntSize size() override; 51 IntSize frameSizeAtIndex(size_t, SubsamplingLevel) override; 52 52 bool setSize(unsigned width, unsigned height) override; 53 53 size_t frameCount() override;
Note: See TracChangeset
for help on using the changeset viewer.