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 514c3cb1d162769484baba16c9488dcc0624f467..9888df1b42c0ef336dfdfd9e3860938bfb7f40fb 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -5952,13 +5952,14 @@ void WebGLRenderingContextBase::uniform4iv(const WebGLUniformLocation* location, |
void WebGLRenderingContextBase::uniformMatrix2fv( |
const WebGLUniformLocation* location, |
GLboolean transpose, |
- DOMFloat32Array* v) { |
+ const MaybeShared<DOMFloat32Array>& v) { |
if (isContextLost() || |
!validateUniformMatrixParameters("uniformMatrix2fv", location, transpose, |
v, 4, 0, v->length())) |
return; |
- contextGL()->UniformMatrix2fv(location->location(), v->length() >> 2, |
- transpose, v->data()); |
+ contextGL()->UniformMatrix2fv(location->location(), |
+ v.viewNotShared()->length() >> 2, transpose, |
+ v.viewNotShared()->data()); |
} |
void WebGLRenderingContextBase::uniformMatrix2fv( |
@@ -5976,13 +5977,14 @@ void WebGLRenderingContextBase::uniformMatrix2fv( |
void WebGLRenderingContextBase::uniformMatrix3fv( |
const WebGLUniformLocation* location, |
GLboolean transpose, |
- DOMFloat32Array* v) { |
+ const MaybeShared<DOMFloat32Array>& v) { |
if (isContextLost() || |
!validateUniformMatrixParameters("uniformMatrix3fv", location, transpose, |
v, 9, 0, v->length())) |
return; |
- contextGL()->UniformMatrix3fv(location->location(), v->length() / 9, |
- transpose, v->data()); |
+ contextGL()->UniformMatrix3fv(location->location(), |
+ v.viewNotShared()->length() / 9, transpose, |
+ v.viewNotShared()->data()); |
} |
void WebGLRenderingContextBase::uniformMatrix3fv( |
@@ -6000,13 +6002,14 @@ void WebGLRenderingContextBase::uniformMatrix3fv( |
void WebGLRenderingContextBase::uniformMatrix4fv( |
const WebGLUniformLocation* location, |
GLboolean transpose, |
- DOMFloat32Array* v) { |
+ const MaybeShared<DOMFloat32Array>& v) { |
if (isContextLost() || |
!validateUniformMatrixParameters("uniformMatrix4fv", location, transpose, |
v, 16, 0, v->length())) |
return; |
- contextGL()->UniformMatrix4fv(location->location(), v->length() >> 4, |
- transpose, v->data()); |
+ contextGL()->UniformMatrix4fv(location->location(), |
+ v.viewNotShared()->length() >> 4, transpose, |
+ v.viewNotShared()->data()); |
} |
void WebGLRenderingContextBase::uniformMatrix4fv( |
@@ -6062,15 +6065,16 @@ void WebGLRenderingContextBase::vertexAttrib1f(GLuint index, GLfloat v0) { |
setVertexAttribType(index, Float32ArrayType); |
} |
-void WebGLRenderingContextBase::vertexAttrib1fv(GLuint index, |
- const DOMFloat32Array* v) { |
- if (isContextLost()) |
+void WebGLRenderingContextBase::vertexAttrib1fv( |
+ GLuint index, |
+ const MaybeShared<const DOMFloat32Array>& v) { |
+ if (isContextLost() || !validateNotSharedArrayBuffer("vertexAttrib1fv", v)) |
return; |
- if (!v || v->length() < 1) { |
+ if (!v || v.viewNotShared()->length() < 1) { |
synthesizeGLError(GL_INVALID_VALUE, "vertexAttrib1fv", "invalid array"); |
return; |
} |
- contextGL()->VertexAttrib1fv(index, v->data()); |
+ contextGL()->VertexAttrib1fv(index, v.viewNotShared()->data()); |
setVertexAttribType(index, Float32ArrayType); |
} |
@@ -6095,15 +6099,16 @@ void WebGLRenderingContextBase::vertexAttrib2f(GLuint index, |
setVertexAttribType(index, Float32ArrayType); |
} |
-void WebGLRenderingContextBase::vertexAttrib2fv(GLuint index, |
- const DOMFloat32Array* v) { |
- if (isContextLost()) |
+void WebGLRenderingContextBase::vertexAttrib2fv( |
+ GLuint index, |
+ const MaybeShared<const DOMFloat32Array>& v) { |
+ if (isContextLost() || !validateNotSharedArrayBuffer("vertexAttrib2fv", v)) |
return; |
- if (!v || v->length() < 2) { |
+ if (!v || v.viewNotShared()->length() < 2) { |
synthesizeGLError(GL_INVALID_VALUE, "vertexAttrib2fv", "invalid array"); |
return; |
} |
- contextGL()->VertexAttrib2fv(index, v->data()); |
+ contextGL()->VertexAttrib2fv(index, v.viewNotShared()->data()); |
setVertexAttribType(index, Float32ArrayType); |
} |
@@ -6129,15 +6134,16 @@ void WebGLRenderingContextBase::vertexAttrib3f(GLuint index, |
setVertexAttribType(index, Float32ArrayType); |
} |
-void WebGLRenderingContextBase::vertexAttrib3fv(GLuint index, |
- const DOMFloat32Array* v) { |
- if (isContextLost()) |
+void WebGLRenderingContextBase::vertexAttrib3fv( |
+ GLuint index, |
+ const MaybeShared<const DOMFloat32Array>& v) { |
+ if (isContextLost() || !validateNotSharedArrayBuffer("vertexAttrib3fv", v)) |
return; |
- if (!v || v->length() < 3) { |
+ if (!v || v.viewNotShared()->length() < 3) { |
synthesizeGLError(GL_INVALID_VALUE, "vertexAttrib3fv", "invalid array"); |
return; |
} |
- contextGL()->VertexAttrib3fv(index, v->data()); |
+ contextGL()->VertexAttrib3fv(index, v.viewNotShared()->data()); |
setVertexAttribType(index, Float32ArrayType); |
} |
@@ -6164,15 +6170,16 @@ void WebGLRenderingContextBase::vertexAttrib4f(GLuint index, |
setVertexAttribType(index, Float32ArrayType); |
} |
-void WebGLRenderingContextBase::vertexAttrib4fv(GLuint index, |
- const DOMFloat32Array* v) { |
- if (isContextLost()) |
+void WebGLRenderingContextBase::vertexAttrib4fv( |
+ GLuint index, |
+ const MaybeShared<const DOMFloat32Array>& v) { |
+ if (isContextLost() || !validateNotSharedArrayBuffer("vertexAttrib4fv", v)) |
return; |
- if (!v || v->length() < 4) { |
+ if (!v || v.viewNotShared()->length() < 4) { |
synthesizeGLError(GL_INVALID_VALUE, "vertexAttrib4fv", "invalid array"); |
return; |
} |
- contextGL()->VertexAttrib4fv(index, v->data()); |
+ contextGL()->VertexAttrib4fv(index, v.viewNotShared()->data()); |
setVertexAttribType(index, Float32ArrayType); |
} |
@@ -7213,7 +7220,7 @@ bool WebGLRenderingContextBase::validateUniformMatrixParameters( |
const char* functionName, |
const WebGLUniformLocation* location, |
GLboolean transpose, |
- DOMFloat32Array* v, |
+ const MaybeShared<DOMFloat32Array>& v, |
GLsizei requiredMinSize, |
GLuint srcOffset, |
GLuint srcLength) { |
@@ -7221,8 +7228,10 @@ bool WebGLRenderingContextBase::validateUniformMatrixParameters( |
synthesizeGLError(GL_INVALID_VALUE, functionName, "no array"); |
return false; |
} |
- return validateUniformMatrixParameters(functionName, location, transpose, |
- v->data(), v->length(), |
+ return validateNotSharedArrayBuffer(functionName, v) && |
+ validateUniformMatrixParameters(functionName, location, transpose, |
+ v.viewNotShared()->data(), |
+ v.viewNotShared()->length(), |
requiredMinSize, srcOffset, srcLength); |
} |