| 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 490377410ba0ff4f4e74b179e9bbc9350a0aff91..6009426ade2710d17bf7552ab58d6ac0692e1096 100644 | 
| --- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp | 
| +++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp | 
| @@ -177,6 +177,7 @@ void ImageLoader::Dispose() { | 
| if (image_) { | 
| image_->RemoveObserver(this); | 
| image_ = nullptr; | 
| +    delay_until_image_notify_finished_ = nullptr; | 
| } | 
| } | 
|  | 
| @@ -201,6 +202,7 @@ void ImageLoader::SetImageWithoutConsideringPendingLoadEvent( | 
| ImageResourceContent* old_image = image_.Get(); | 
| if (new_image != old_image) { | 
| image_ = new_image; | 
| +    delay_until_image_notify_finished_ = nullptr; | 
| if (has_pending_load_event_) { | 
| LoadEventSender().CancelEvent(this); | 
| has_pending_load_event_ = false; | 
| @@ -264,7 +266,7 @@ inline void ImageLoader::EnqueueImageLoadingMicroTask( | 
| pending_task_ = task->CreateWeakPtr(); | 
| Microtask::EnqueueMicrotask( | 
| WTF::Bind(&Task::Run, WTF::Passed(std::move(task)))); | 
| -  load_delay_counter_ = | 
| +  delay_until_do_update_from_element_ = | 
| IncrementLoadEventDelayCount::Create(element_->GetDocument()); | 
| } | 
|  | 
| @@ -283,7 +285,7 @@ void ImageLoader::DoUpdateFromElement(BypassMainWorldBehavior bypass_behavior, | 
| pending_task_.reset(); | 
| // Make sure to only decrement the count when we exit this function | 
| std::unique_ptr<IncrementLoadEventDelayCount> load_delay_counter; | 
| -  load_delay_counter.swap(load_delay_counter_); | 
| +  load_delay_counter.swap(delay_until_do_update_from_element_); | 
|  | 
| Document& document = element_->GetDocument(); | 
| if (!document.IsActive()) | 
| @@ -359,6 +361,7 @@ void ImageLoader::DoUpdateFromElement(BypassMainWorldBehavior bypass_behavior, | 
| image_ = new_image; | 
| has_pending_load_event_ = new_image; | 
| image_complete_ = !new_image; | 
| +    delay_until_image_notify_finished_ = nullptr; | 
|  | 
| UpdateLayoutObject(); | 
| // If newImage exists and is cached, addObserver() will result in the load | 
| @@ -428,6 +431,7 @@ void ImageLoader::UpdateFromElement(UpdateFromElementBehavior update_behavior, | 
| image->RemoveObserver(this); | 
| } | 
| image_ = nullptr; | 
| +    delay_until_image_notify_finished_ = nullptr; | 
| } | 
|  | 
| // Don't load images for inactive documents. We don't want to slow down the | 
| @@ -470,6 +474,20 @@ bool ImageLoader::ShouldLoadImmediately(const KURL& url) const { | 
| return (isHTMLObjectElement(element_) || isHTMLEmbedElement(element_)); | 
| } | 
|  | 
| +void ImageLoader::ImageChanged(ImageResourceContent* content, const IntRect*) { | 
| +  DCHECK_EQ(content, image_.Get()); | 
| +  if (image_complete_ || !content->IsLoading() || | 
| +      delay_until_image_notify_finished_) | 
| +    return; | 
| + | 
| +  Document& document = element_->GetDocument(); | 
| +  if (!document.IsActive()) | 
| +    return; | 
| + | 
| +  delay_until_image_notify_finished_ = | 
| +      IncrementLoadEventDelayCount::Create(document); | 
| +} | 
| + | 
| void ImageLoader::ImageNotifyFinished(ImageResourceContent* resource) { | 
| RESOURCE_LOADING_DVLOG(1) | 
| << "ImageLoader::imageNotifyFinished " << this | 
| @@ -479,6 +497,7 @@ void ImageLoader::ImageNotifyFinished(ImageResourceContent* resource) { | 
| DCHECK_EQ(resource, image_.Get()); | 
|  | 
| image_complete_ = true; | 
| +  delay_until_image_notify_finished_ = nullptr; | 
|  | 
| // Update ImageAnimationPolicy for m_image. | 
| if (image_) | 
| @@ -636,8 +655,14 @@ void ImageLoader::DispatchPendingErrorEvents() { | 
| } | 
|  | 
| void ImageLoader::ElementDidMoveToNewDocument() { | 
| -  if (load_delay_counter_) | 
| -    load_delay_counter_->DocumentChanged(element_->GetDocument()); | 
| +  if (delay_until_do_update_from_element_) { | 
| +    delay_until_do_update_from_element_->DocumentChanged( | 
| +        element_->GetDocument()); | 
| +  } | 
| +  if (delay_until_image_notify_finished_) { | 
| +    delay_until_image_notify_finished_->DocumentChanged( | 
| +        element_->GetDocument()); | 
| +  } | 
| ClearFailedLoadURL(); | 
| SetImage(0); | 
| } | 
|  |