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 60957a197799bcf24886ad87c304cef6a9bc4276..9d8d36f27317c9b98e4e0c498318c5eda3caa4f4 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -4848,6 +4848,7 @@ void WebGLRenderingContextBase::texImage2D(GLenum target, |
} |
void WebGLRenderingContextBase::TexImageHelperHTMLImageElement( |
+ SecurityOrigin* security_origin, |
TexImageFunctionID function_id, |
GLenum target, |
GLint level, |
@@ -4865,7 +4866,9 @@ void WebGLRenderingContextBase::TexImageHelperHTMLImageElement( |
const char* func_name = GetTexImageFunctionName(function_id); |
if (isContextLost()) |
return; |
- if (!ValidateHTMLImageElement(func_name, image, exception_state)) |
+ |
+ if (!ValidateHTMLImageElement(security_origin, func_name, image, |
+ exception_state)) |
return; |
if (!ValidateTexImageBinding(func_name, function_id, target)) |
return; |
@@ -4898,14 +4901,16 @@ void WebGLRenderingContextBase::TexImageHelperHTMLImageElement( |
unpack_image_height); |
} |
-void WebGLRenderingContextBase::texImage2D(GLenum target, |
+void WebGLRenderingContextBase::texImage2D(ExecutionContext* execution_context, |
+ GLenum target, |
GLint level, |
GLint internalformat, |
GLenum format, |
GLenum type, |
HTMLImageElement* image, |
ExceptionState& exception_state) { |
- TexImageHelperHTMLImageElement(kTexImage2D, target, level, internalformat, |
+ TexImageHelperHTMLImageElement(execution_context->GetSecurityOrigin(), |
+ kTexImage2D, target, level, internalformat, |
format, type, 0, 0, 0, image, |
SentinelEmptyRect(), 1, 0, exception_state); |
} |
@@ -5062,6 +5067,7 @@ void WebGLRenderingContextBase::TexImageByGPU( |
} |
void WebGLRenderingContextBase::TexImageHelperHTMLCanvasElement( |
+ SecurityOrigin* security_origin, |
TexImageFunctionID function_id, |
GLenum target, |
GLint level, |
@@ -5079,7 +5085,9 @@ void WebGLRenderingContextBase::TexImageHelperHTMLCanvasElement( |
const char* func_name = GetTexImageFunctionName(function_id); |
if (isContextLost()) |
return; |
- if (!ValidateHTMLCanvasElement(func_name, canvas, exception_state)) |
+ |
+ if (!ValidateHTMLCanvasElement(security_origin, func_name, canvas, |
+ exception_state)) |
return; |
WebGLTexture* texture = |
ValidateTexImageBinding(func_name, function_id, target); |
@@ -5159,7 +5167,8 @@ void WebGLRenderingContextBase::TexImageHelperHTMLCanvasElement( |
} |
} |
-void WebGLRenderingContextBase::texImage2D(GLenum target, |
+void WebGLRenderingContextBase::texImage2D(ExecutionContext* execution_context, |
+ GLenum target, |
GLint level, |
GLint internalformat, |
GLenum format, |
@@ -5167,7 +5176,8 @@ void WebGLRenderingContextBase::texImage2D(GLenum target, |
HTMLCanvasElement* canvas, |
ExceptionState& exception_state) { |
TexImageHelperHTMLCanvasElement( |
- kTexImage2D, target, level, internalformat, format, type, 0, 0, 0, canvas, |
+ execution_context->GetSecurityOrigin(), kTexImage2D, target, level, |
+ internalformat, format, type, 0, 0, 0, canvas, |
GetTextureSourceSize(canvas), 1, 0, exception_state); |
} |
@@ -5185,6 +5195,7 @@ PassRefPtr<Image> WebGLRenderingContextBase::VideoFrameToImage( |
} |
void WebGLRenderingContextBase::TexImageHelperHTMLVideoElement( |
+ SecurityOrigin* security_origin, |
TexImageFunctionID function_id, |
GLenum target, |
GLint level, |
@@ -5202,7 +5213,9 @@ void WebGLRenderingContextBase::TexImageHelperHTMLVideoElement( |
const char* func_name = GetTexImageFunctionName(function_id); |
if (isContextLost()) |
return; |
- if (!ValidateHTMLVideoElement(func_name, video, exception_state)) |
+ |
+ if (!ValidateHTMLVideoElement(security_origin, func_name, video, |
+ exception_state)) |
return; |
WebGLTexture* texture = |
ValidateTexImageBinding(func_name, function_id, target); |
@@ -5328,14 +5341,16 @@ void WebGLRenderingContextBase::TexImageBitmapByGPU( |
IntPoint(xoffset, yoffset), source_sub_rect); |
} |
-void WebGLRenderingContextBase::texImage2D(GLenum target, |
+void WebGLRenderingContextBase::texImage2D(ExecutionContext* execution_context, |
+ GLenum target, |
GLint level, |
GLint internalformat, |
GLenum format, |
GLenum type, |
HTMLVideoElement* video, |
ExceptionState& exception_state) { |
- TexImageHelperHTMLVideoElement(kTexImage2D, target, level, internalformat, |
+ TexImageHelperHTMLVideoElement(execution_context->GetSecurityOrigin(), |
+ kTexImage2D, target, level, internalformat, |
format, type, 0, 0, 0, video, |
SentinelEmptyRect(), 1, 0, exception_state); |
} |
@@ -5580,41 +5595,50 @@ void WebGLRenderingContextBase::texSubImage2D(GLenum target, |
0); |
} |
-void WebGLRenderingContextBase::texSubImage2D(GLenum target, |
- GLint level, |
- GLint xoffset, |
- GLint yoffset, |
- GLenum format, |
- GLenum type, |
- HTMLImageElement* image, |
- ExceptionState& exception_state) { |
- TexImageHelperHTMLImageElement(kTexSubImage2D, target, level, 0, format, type, |
+void WebGLRenderingContextBase::texSubImage2D( |
+ ExecutionContext* execution_context, |
+ GLenum target, |
+ GLint level, |
+ GLint xoffset, |
+ GLint yoffset, |
+ GLenum format, |
+ GLenum type, |
+ HTMLImageElement* image, |
+ ExceptionState& exception_state) { |
+ TexImageHelperHTMLImageElement(execution_context->GetSecurityOrigin(), |
+ kTexSubImage2D, target, level, 0, format, type, |
xoffset, yoffset, 0, image, |
SentinelEmptyRect(), 1, 0, exception_state); |
} |
-void WebGLRenderingContextBase::texSubImage2D(GLenum target, |
- GLint level, |
- GLint xoffset, |
- GLint yoffset, |
- GLenum format, |
- GLenum type, |
- HTMLCanvasElement* canvas, |
- ExceptionState& exception_state) { |
+void WebGLRenderingContextBase::texSubImage2D( |
+ ExecutionContext* execution_context, |
+ GLenum target, |
+ GLint level, |
+ GLint xoffset, |
+ GLint yoffset, |
+ GLenum format, |
+ GLenum type, |
+ HTMLCanvasElement* canvas, |
+ ExceptionState& exception_state) { |
TexImageHelperHTMLCanvasElement( |
- kTexSubImage2D, target, level, 0, format, type, xoffset, yoffset, 0, |
- canvas, GetTextureSourceSize(canvas), 1, 0, exception_state); |
+ execution_context->GetSecurityOrigin(), kTexSubImage2D, target, level, 0, |
+ format, type, xoffset, yoffset, 0, canvas, GetTextureSourceSize(canvas), |
+ 1, 0, exception_state); |
} |
-void WebGLRenderingContextBase::texSubImage2D(GLenum target, |
- GLint level, |
- GLint xoffset, |
- GLint yoffset, |
- GLenum format, |
- GLenum type, |
- HTMLVideoElement* video, |
- ExceptionState& exception_state) { |
- TexImageHelperHTMLVideoElement(kTexSubImage2D, target, level, 0, format, type, |
+void WebGLRenderingContextBase::texSubImage2D( |
+ ExecutionContext* execution_context, |
+ GLenum target, |
+ GLint level, |
+ GLint xoffset, |
+ GLint yoffset, |
+ GLenum format, |
+ GLenum type, |
+ HTMLVideoElement* video, |
+ ExceptionState& exception_state) { |
+ TexImageHelperHTMLVideoElement(execution_context->GetSecurityOrigin(), |
+ kTexSubImage2D, target, level, 0, format, type, |
xoffset, yoffset, 0, video, |
SentinelEmptyRect(), 1, 0, exception_state); |
} |
@@ -7287,6 +7311,7 @@ void WebGLRenderingContextBase::RemoveBoundBuffer(WebGLBuffer* buffer) { |
} |
bool WebGLRenderingContextBase::ValidateHTMLImageElement( |
+ SecurityOrigin* security_origin, |
const char* function_name, |
HTMLImageElement* image, |
ExceptionState& exception_state) { |
@@ -7300,7 +7325,7 @@ bool WebGLRenderingContextBase::ValidateHTMLImageElement( |
return false; |
} |
- if (WouldTaintOrigin(image)) { |
+ if (WouldTaintOrigin(image, security_origin)) { |
exception_state.ThrowSecurityError("The cross-origin image at " + |
url.ElidedString() + |
" may not be loaded."); |
@@ -7310,6 +7335,7 @@ bool WebGLRenderingContextBase::ValidateHTMLImageElement( |
} |
bool WebGLRenderingContextBase::ValidateHTMLCanvasElement( |
+ SecurityOrigin* security_origin, |
const char* function_name, |
HTMLCanvasElement* canvas, |
ExceptionState& exception_state) { |
@@ -7317,7 +7343,8 @@ bool WebGLRenderingContextBase::ValidateHTMLCanvasElement( |
SynthesizeGLError(GL_INVALID_VALUE, function_name, "no canvas"); |
return false; |
} |
- if (WouldTaintOrigin(canvas)) { |
+ |
+ if (WouldTaintOrigin(canvas, security_origin)) { |
exception_state.ThrowSecurityError("Tainted canvases may not be loaded."); |
return false; |
} |
@@ -7325,6 +7352,7 @@ bool WebGLRenderingContextBase::ValidateHTMLCanvasElement( |
} |
bool WebGLRenderingContextBase::ValidateHTMLVideoElement( |
+ SecurityOrigin* security_origin, |
const char* function_name, |
HTMLVideoElement* video, |
ExceptionState& exception_state) { |
@@ -7333,7 +7361,7 @@ bool WebGLRenderingContextBase::ValidateHTMLVideoElement( |
return false; |
} |
- if (WouldTaintOrigin(video)) { |
+ if (WouldTaintOrigin(video, security_origin)) { |
exception_state.ThrowSecurityError( |
"The video element contains cross-origin data, and may not be loaded."); |
return false; |