Index: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
index 007947c366e67c3bd4d36e2f8cf99ac28c9aa18f..01136649524082b8b79b83dda662a2a4852c957e 100644 |
--- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
@@ -256,12 +256,20 @@ |
ASSERT(isMainThread()); |
Blob* resultBlob = Blob::create(m_encodedImage->data(), m_encodedImage->size(), convertMimeTypeEnumToString(m_mimeType)); |
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, resultBlob)); |
+ // Since toBlob is done, timeout events are no longer needed. So we clear |
+ // non-GC members to allow teardown of CanvasAsyncBlobCreator. |
+ m_data.clear(); |
+ m_callback.clear(); |
} |
void CanvasAsyncBlobCreator::createNullAndInvokeCallback() |
{ |
ASSERT(isMainThread()); |
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, nullptr)); |
+ // Since toBlob is done (failed), timeout events are no longer needed. So we |
+ // clear non-GC members to allow teardown of CanvasAsyncBlobCreator. |
+ m_data.clear(); |
+ m_callback.clear(); |
} |
void CanvasAsyncBlobCreator::encodeImageOnEncoderThread(double quality) |