Index: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp |
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp |
index ef0c5333c102ac1d544e5b2587524fa2dc292cf5..1d968f9c1af2cc00e4cdd4a61754f114e2bd1be8 100644 |
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp |
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp |
@@ -53,7 +53,8 @@ void OffscreenCanvasRenderingContext2D::commit(ExceptionState& exceptionState) |
exceptionState.throwDOMException(InvalidStateError, "Commit() was called on a context whose OffscreenCanvas is not associated with a canvas element."); |
return; |
} |
- getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(nullptr); |
+ RefPtr<StaticBitmapImage> image = this->transferToStaticBitmapImage(); |
+ getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(std::move(image)); |
} |
// BaseRenderingContext2D implementation |
@@ -124,16 +125,24 @@ ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const |
return m_imageBuffer.get(); |
} |
-ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState) |
+RefPtr<StaticBitmapImage> OffscreenCanvasRenderingContext2D::transferToStaticBitmapImage() |
{ |
if (!imageBuffer()) |
return nullptr; |
sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(PreferAcceleration, SnapshotReasonTransferToImageBitmap); |
RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(std::move(skImage)); |
image->setOriginClean(this->originClean()); |
+ return image; |
+} |
+ |
+ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState) |
+{ |
+ RefPtr<StaticBitmapImage> image = transferToStaticBitmapImage(); |
+ if (!image) |
+ return nullptr; |
m_imageBuffer.reset(); // "Transfer" means no retained buffer |
m_needsMatrixClipRestore = true; |
- return ImageBitmap::create(image.release()); |
+ return ImageBitmap::create(std::move(image)); |
} |
PassRefPtr<Image> OffscreenCanvasRenderingContext2D::getImage(AccelerationHint hint, SnapshotReason reason) const |