Index: third_party/WebKit/Source/core/loader/ImageLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
index 42fff6565f793abb14e45eb71458d878e0a6195c..86f65618292a28c53500d98bb06686c25897ba40 100644 |
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
@@ -217,38 +217,6 @@ |
imageResource->resetAnimation(); |
} |
-void ImageLoader::setImagePending(ImageResource* newImage) |
-{ |
- ImageResource* oldImage = m_image.get(); |
- if (m_hasPendingLoadEvent) { |
- loadEventSender().cancelEvent(this); |
- m_hasPendingLoadEvent = false; |
- } |
- |
- // Cancel error events that belong to the previous load, which is now cancelled by changing the src attribute. |
- // If newImage is null and m_hasPendingErrorEvent is true, we know the error event has been just posted by |
- // this load and we should not cancel the event. |
- // FIXME: If both previous load and this one got blocked with an error, we can receive one error event instead of two. |
- if (m_hasPendingErrorEvent && newImage) { |
- errorEventSender().cancelEvent(this); |
- m_hasPendingErrorEvent = false; |
- } |
- |
- m_image = newImage; |
- m_hasPendingLoadEvent = newImage; |
- m_imageComplete = !newImage; |
- |
- updateLayoutObject(); |
- // If newImage exists and is cached, addObserver() will result in the load event |
- // being queued to fire. Ensure this happens after beforeload is dispatched. |
- if (newImage) { |
- newImage->addObserver(this); |
- } |
- if (oldImage) { |
- oldImage->removeObserver(this); |
- } |
-} |
- |
static void configureRequest(FetchRequest& request, ImageLoader::BypassMainWorldBehavior bypassBehavior, Element& element, const ClientHintsPreferences& clientHintsPreferences) |
{ |
if (bypassBehavior == ImageLoader::BypassMainWorldCSP) |
@@ -344,7 +312,33 @@ |
if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_element->layoutObject()->isImage() && newImage == oldImage) { |
toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); |
} else { |
- setImagePending(newImage); |
+ if (m_hasPendingLoadEvent) { |
+ loadEventSender().cancelEvent(this); |
+ m_hasPendingLoadEvent = false; |
+ } |
+ |
+ // Cancel error events that belong to the previous load, which is now cancelled by changing the src attribute. |
+ // If newImage is null and m_hasPendingErrorEvent is true, we know the error event has been just posted by |
+ // this load and we should not cancel the event. |
+ // FIXME: If both previous load and this one got blocked with an error, we can receive one error event instead of two. |
+ if (m_hasPendingErrorEvent && newImage) { |
+ errorEventSender().cancelEvent(this); |
+ m_hasPendingErrorEvent = false; |
+ } |
+ |
+ m_image = newImage; |
+ m_hasPendingLoadEvent = newImage; |
+ m_imageComplete = !newImage; |
+ |
+ updateLayoutObject(); |
+ // If newImage exists and is cached, addObserver() will result in the load event |
+ // being queued to fire. Ensure this happens after beforeload is dispatched. |
+ if (newImage) { |
+ newImage->addObserver(this); |
+ } |
+ if (oldImage) { |
+ oldImage->removeObserver(this); |
+ } |
} |
if (LayoutImageResource* imageResource = layoutImageResource()) |
@@ -372,11 +366,8 @@ |
// funneling the main resource bytes into m_image, so just create an ImageResource |
// to be populated later. |
if (m_loadingImageDocument && updateBehavior != UpdateForcedReload) { |
- setImagePending(ImageResource::create(imageSourceToKURL(m_element->imageSourceURL()))); |
+ setImage(ImageResource::create(imageSourceToKURL(m_element->imageSourceURL()))); |
m_image->setStatus(Resource::Pending); |
- // Only consider updating the protection ref-count of the Element immediately before returning |
- // from this function as doing so might result in the destruction of this ImageLoader. |
- updatedHasPendingEvent(); |
return; |
} |