Index: third_party/WebKit/Source/core/fetch/ImageResource.cpp |
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.cpp b/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
index 7e04c4e4b68bf074b032cf960663411322bf8ba8..861ca24e5593d5c717342eeda851d9ba20e75a74 100644 |
--- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
@@ -237,8 +237,7 @@ void ImageResource::didAddClient(ResourceClient* client) { |
} |
void ImageResource::destroyDecodedDataForFailedRevalidation() { |
- getContent()->updateImage(nullptr, ImageResourceContent::ClearExistingImage, |
- false); |
+ updateImage(nullptr, ImageResourceContent::ClearExistingImage, false); |
setDecodedSize(0); |
} |
@@ -290,8 +289,7 @@ void ImageResource::appendData(const char* data, size_t length) { |
if (!getContent()->isSizeAvailable() || |
(getContent()->hasImage() && |
getContent()->getImage()->maybeAnimated())) { |
- getContent()->updateImage(this->data(), |
- ImageResourceContent::KeepExistingImage, false); |
+ updateImage(this->data(), ImageResourceContent::KeepExistingImage, false); |
return; |
} |
@@ -319,8 +317,7 @@ void ImageResource::flushImageIfNeeded(TimerBase*) { |
// to call |updateImage()|. |
if (isLoading()) { |
m_lastFlushTime = WTF::monotonicallyIncreasingTime(); |
- getContent()->updateImage(this->data(), |
- ImageResourceContent::KeepExistingImage, false); |
+ updateImage(this->data(), ImageResourceContent::KeepExistingImage, false); |
} |
} |
@@ -345,8 +342,7 @@ void ImageResource::decodeError(bool allDataReceived) { |
} |
void ImageResource::updateImageAndClearBuffer() { |
- getContent()->updateImage(data(), ImageResourceContent::ClearExistingImage, |
- true); |
+ updateImage(data(), ImageResourceContent::ClearExistingImage, true); |
clearData(); |
} |
@@ -356,8 +352,7 @@ void ImageResource::finish(double loadFinishTime) { |
if (data()) |
updateImageAndClearBuffer(); |
} else { |
- getContent()->updateImage(data(), ImageResourceContent::KeepExistingImage, |
- true); |
+ updateImage(data(), ImageResourceContent::KeepExistingImage, true); |
// As encoded image data can be created from m_image (see |
// ImageResource::resourceBuffer(), we don't have to keep m_data. Let's |
// clear this. As for the lifetimes of m_image and m_data, see this |
@@ -373,8 +368,7 @@ void ImageResource::error(const ResourceError& error) { |
m_multipartParser->cancel(); |
clearData(); |
Resource::error(error); |
- getContent()->updateImage(nullptr, ImageResourceContent::ClearExistingImage, |
- true); |
+ updateImage(nullptr, ImageResourceContent::ClearExistingImage, true); |
} |
void ImageResource::responseReceived( |
@@ -440,8 +434,7 @@ void ImageResource::reloadIfLoFiOrPlaceholder( |
} else { |
clearData(); |
setEncodedSize(0); |
- getContent()->updateImage(nullptr, ImageResourceContent::ClearExistingImage, |
- false); |
+ updateImage(nullptr, ImageResourceContent::ClearExistingImage, false); |
} |
setStatus(NotStarted); |
@@ -463,6 +456,7 @@ void ImageResource::onePartInMultipartReceived( |
return; |
} |
updateImageAndClearBuffer(); |
+ m_isUpdateImageCalled = false; |
if (m_multipartParsingState == MultipartParsingState::ParsingFirstPart) { |
m_multipartParsingState = MultipartParsingState::FinishedParsingFirstPart; |
@@ -505,4 +499,15 @@ ResourcePriority ImageResource::priorityFromObservers() { |
return getContent()->priorityFromObservers(); |
} |
+void ImageResource::updateImage( |
+ PassRefPtr<SharedBuffer> sharedBuffer, |
+ ImageResourceContent::ClearImageOption clearImageOption, |
+ bool allDataReceived) { |
+ if (!m_isUpdateImageCalled) |
+ clearImageOption = ImageResourceContent::ClearExistingImage; |
+ m_isUpdateImageCalled = true; |
+ getContent()->updateImage(std::move(sharedBuffer), clearImageOption, |
+ allDataReceived); |
+} |
+ |
} // namespace blink |