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

Unified Diff: third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp

Issue 2642823005: Phase II Step 1: Remove updateImage() reentrancy around decodeError() (Closed)
Patch Set: Rebase Created 3 years, 10 months 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/loader/resource/ImageResourceContent.cpp
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
index 41b7249eb06963856bd7dcd436aabdaf55e86301..7d4ac899ceb9986ab55c24013cc90172739118c6 100644
--- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
+++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
@@ -52,7 +52,6 @@ class NullImageResourceInfo final
bool hasCacheControlNoStoreHeader() const override { return false; }
const ResourceError& resourceError() const override { return m_error; }
- void decodeError(bool allDataReceived) override {}
void setDecodedSize(size_t) override {}
void setIsPlaceholder(bool) override {}
void willAddClientOrObserver() override {}
@@ -329,11 +328,17 @@ static bool shouldShowFullImageInsteadOfPlaceholder(
return response.httpStatusCode() < 400 || response.httpStatusCode() >= 600;
}
-void ImageResourceContent::updateImage(PassRefPtr<SharedBuffer> data,
- UpdateImageOption updateImageOption,
- bool allDataReceived) {
+ImageResourceContent::UpdateImageResult ImageResourceContent::updateImage(
+ PassRefPtr<SharedBuffer> data,
+ UpdateImageOption updateImageOption,
+ bool allDataReceived) {
TRACE_EVENT0("blink", "ImageResourceContent::updateImage");
+#if DCHECK_IS_ON()
+ DCHECK(!m_isUpdateImageBeingCalled);
+ AutoReset<bool> scope(&m_isUpdateImageBeingCalled, true);
+#endif
+
// Clears the existing image, if instructed by |updateImageOption|.
switch (updateImageOption) {
case ClearAndUpdateImage:
@@ -366,7 +371,7 @@ void ImageResourceContent::updateImage(PassRefPtr<SharedBuffer> data,
// received all the data or the size is known. Each chunk from the network
// causes observers to repaint, which will force that chunk to decode.
if (m_sizeAvailable == Image::SizeUnavailable && !allDataReceived)
- return;
+ return UpdateImageResult::NoDecodeError;
if (m_info->isPlaceholder() && allDataReceived) {
if (shouldShowFullImageInsteadOfPlaceholder(response(),
@@ -381,7 +386,7 @@ void ImageResourceContent::updateImage(PassRefPtr<SharedBuffer> data,
if (!m_image || m_image->isNull()) {
clearImage();
- m_info->decodeError(allDataReceived);
+ return UpdateImageResult::ShouldDecodeError;
}
break;
}
@@ -390,6 +395,7 @@ void ImageResourceContent::updateImage(PassRefPtr<SharedBuffer> data,
// It would be nice to only redraw the decoded band of the image, but with the
// current design (decoding delayed until painting) that seems hard.
notifyObservers(allDataReceived ? ShouldNotifyFinish : DoNotNotifyFinish);
+ return UpdateImageResult::NoDecodeError;
}
void ImageResourceContent::decodedSizeChangedTo(const blink::Image* image,

Powered by Google App Engine
This is Rietveld 408576698