Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Unified Diff: third_party/WebKit/Source/core/fetch/ImageResource.cpp

Issue 2552653002: Explicitly clear the image in the first updateImage() call (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698