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 81db13640f8150ed4554bcf6542607cb4925b564..956fc6db413a3f5e040b309bc22dc98338aad73a 100644 |
--- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp |
@@ -206,10 +206,23 @@ void ImageResource::destroyDecodedDataIfPossible() |
} |
} |
-void ImageResource::allClientsAndObserversRemoved() |
+void ImageResource::doResetAnimation() |
{ |
- if (m_image && !errorOccurred()) |
+ if (m_image) |
m_image->resetAnimation(); |
+} |
+ |
+void ImageResource::allClientsAndObserversRemoved() |
+{ |
+ if (m_image && !errorOccurred()) { |
+ // If possible, delay the resetting until back at the event loop. |
+ // Doing so after a conservative GC prevents resetAnimation() from |
+ // upsetting ongoing animation updates (crbug.com/613709) |
+ if (!ThreadHeap::willObjectBeLazilySwept(this)) |
haraken
2016/05/24 15:40:54
Hmm, I'm not really happy about using ThreadHeap::
sof
2016/05/24 15:47:20
As this method will be called by another object's
|
+ Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&ImageResource::doResetAnimation, CrossThreadWeakPersistentThisPointer<ImageResource>(this))); |
+ else |
+ m_image->resetAnimation(); |
+ } |
if (m_multipartParser) |
m_multipartParser->cancel(); |
Resource::allClientsAndObserversRemoved(); |