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..7e17e141211ca98ff7786ec50caa4d3e455f6b32 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, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) |
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()) |