| Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| index ebed1a63bf97b77e8b8df2cf6e7183f5125193fd..8faf5def0aba08d2d4bbc928b2e9445fabf3c429 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| @@ -642,7 +642,15 @@ ImageBitmap* WebGLRenderingContextBase::transferToImageBitmapBase()
|
| return nullptr;
|
| WebExternalTextureMailbox mailbox;
|
| drawingBuffer()->prepareMailbox(&mailbox, 0);
|
| - ImageBitmap* imageBitmap = ImageBitmap::create(mailbox);
|
| + ImageBitmap* imageBitmap;
|
| + // If the mailbox is invalid, return an transparent black ImageBitmap.
|
| + // The only situation this could happen is when two or more calls to transferToImageBitmap are made back-to-back.
|
| + if (mailbox.textureSize.width == 0 && mailbox.textureSize.height == 0) {
|
| + sk_sp<SkSurface>surface = SkSurface::MakeRasterN32Premul(drawingBuffer()->size().width(), drawingBuffer()->size().height());
|
| + imageBitmap = ImageBitmap::create(StaticBitmapImage::create(fromSkSp(surface->makeImageSnapshot())));
|
| + } else {
|
| + imageBitmap = ImageBitmap::create(mailbox);
|
| + }
|
| // TODO(xidachen): Create a small pool of recycled textures from ImageBitmapRenderingContext's
|
| // transferFromImageBitmap, and try to use them in DrawingBuffer.
|
| return imageBitmap;
|
|
|