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 67abfc4a4ef71e2e5d06b0d7d1415ca037439650..3aa08806351920f2d015c432164ba8c87a718188 100644 |
--- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
@@ -367,7 +367,9 @@ void ImageResource::updateImage(bool allDataReceived) |
// to decode. |
if (sizeAvailable || allDataReceived) { |
if (!m_image || m_image->isNull()) { |
- error(errorOccurred() ? getStatus() : DecodeError); |
+ if (!errorOccurred()) |
+ setStatus(DecodeError); |
+ clear(); |
if (memoryCache()->contains(this)) |
memoryCache()->remove(this); |
return; |
@@ -379,27 +381,31 @@ void ImageResource::updateImage(bool allDataReceived) |
} |
} |
-void ImageResource::finish() |
+void ImageResource::updateImageAndClearBuffer() |
+{ |
+ clearImage(); |
+ updateImage(true); |
+ m_data.clear(); |
+} |
+ |
+void ImageResource::finish(double loadFinishTime) |
{ |
if (m_multipartParser) { |
m_multipartParser->finish(); |
- if (m_data) { |
- clearImage(); |
- updateImage(true); |
- m_data.clear(); |
- } |
+ if (m_data) |
+ updateImageAndClearBuffer(); |
} else { |
updateImage(true); |
} |
- Resource::finish(); |
+ Resource::finish(loadFinishTime); |
} |
-void ImageResource::error(Resource::Status status) |
+void ImageResource::error(const ResourceError& error) |
{ |
if (m_multipartParser) |
m_multipartParser->cancel(); |
clear(); |
- Resource::error(status); |
+ Resource::error(error); |
notifyObservers(); |
} |
@@ -498,7 +504,10 @@ void ImageResource::reloadIfLoFi(ResourceFetcher* fetcher) |
return; |
m_resourceRequest.setCachePolicy(WebCachePolicy::BypassingCache); |
m_resourceRequest.setLoFiState(WebURLRequest::LoFiOff); |
- error(Resource::LoadError); |
+ if (isLoading()) |
+ m_loader->cancel(); |
+ else |
+ updateImageAndClearBuffer(); |
setStatus(NotStarted); |
load(fetcher); |
} |
@@ -520,9 +529,7 @@ void ImageResource::onePartInMultipartReceived(const ResourceResponse& response) |
m_multipartParsingState = MultipartParsingState::ParsingFirstPart; |
return; |
} |
- clear(); |
- updateImage(true); |
- m_data.clear(); |
+ updateImageAndClearBuffer(); |
if (m_multipartParsingState == MultipartParsingState::ParsingFirstPart) { |
m_multipartParsingState = MultipartParsingState::FinishedParsingFirstPart; |