Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(539)

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1573173002: Make WebGL's texImage2D and texSubImage2D handle cross-origin ImageBitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add validateImageBitmap helper function & a layout test Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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())

Powered by Google App Engine
This is Rietveld 408576698