Chromium Code Reviews| 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 324450bc7340d13d7a713c69f3de9b8adb00b591..e50eab33df740345825c5fd2c94421a53eb0ee5b 100644 |
| --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
| @@ -4506,14 +4506,10 @@ void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint int |
| } |
| void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint internalformat, |
| - GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap) |
| + GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap, ExceptionState& exceptionState) |
| { |
| ASSERT(bitmap->bitmapImage()); |
| - if (bitmap->isNeutered()) { |
| - synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "The source data has been neutered."); |
| - return; |
| - } |
| - if (isContextLost() || !validateTexFunc("texImage2D", TexImage, SourceImageBitmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) |
| + if (isContextLost() || !validateImageBitmap("texImage2D", bitmap.get(), exceptionState) || !validateTexFunc("texImage2D", TexImage, SourceImageBitmap, target, level, internalformat, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) |
|
xidachen
2016/01/12 20:26:02
This is where the problem was, it should pass inte
|
| return; |
| StaticBitmapImage* imageForRender = bitmap->bitmapImage(); |
| texImage2DImpl(target, level, internalformat, format, type, imageForRender, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha); |
| @@ -4732,14 +4728,10 @@ void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint |
| } |
| void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, |
| - GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap) |
| + GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap, ExceptionState& exceptionState) |
| { |
| ASSERT(bitmap->bitmapImage()); |
| - if (bitmap->isNeutered()) { |
| - synthesizeGLError(GL_INVALID_VALUE, "texSubImage2D", "The source data has been neutered."); |
| - return; |
| - } |
| - if (isContextLost() || !validateTexFunc("texSubImage2D", TexSubImage, SourceImageBitmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) |
| + if (isContextLost() || !validateImageBitmap("texSubImage2D", bitmap.get(), exceptionState) || !validateTexFunc("texSubImage2D", TexSubImage, SourceImageBitmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) |
| return; |
| StaticBitmapImage* imageForRender = bitmap->bitmapImage(); |
| texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRender, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha); |
| @@ -6504,6 +6496,19 @@ bool WebGLRenderingContextBase::validateHTMLVideoElement(const char* functionNam |
| return true; |
| } |
| +bool WebGLRenderingContextBase::validateImageBitmap(const char* functionName, ImageBitmap* bitmap, ExceptionState& exceptionState) |
| +{ |
| + if (bitmap->isNeutered()) { |
| + synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "The source data has been neutered."); |
| + return false; |
| + } |
| + if (!bitmap->originClean()) { |
| + exceptionState.throwSecurityError("The ImageBitmap contains cross-origin data, and may not be loaded."); |
| + return false; |
| + } |
| + return true; |
| +} |
| + |
| bool WebGLRenderingContextBase::validateDrawArrays(const char* functionName, GLenum mode, GLint first, GLsizei count) |
| { |
| if (isContextLost()) |