Bug 1316829 - DataViews are part of ArrayBufferView. - r=waldo
MozReview-Commit-ID: L0Xauoo2nJh
--- a/dom/canvas/WebGLContext.cpp
+++ b/dom/canvas/WebGLContext.cpp
@@ -2508,28 +2508,37 @@ WebGLContext::StartVRPresentation()
TextureFlags::ORIGIN_BOTTOM_LEFT);
screen->Morph(Move(factory));
return true;
}
////////////////////////////////////////////////////////////////////////////////
+static inline size_t
+SizeOfViewElem(const dom::ArrayBufferView& view)
+{
+ const auto& elemType = view.Type();
+ if (elemType == js::Scalar::MaxTypedArrayViewType) // DataViews.
+ return 1;
+
+ return js::Scalar::byteSize(elemType);
+}
+
bool
WebGLContext::ValidateArrayBufferView(const char* funcName,
const dom::ArrayBufferView& view, GLuint elemOffset,
GLuint elemCountOverride, uint8_t** const out_bytes,
size_t* const out_byteLen)
{
view.ComputeLengthAndData();
uint8_t* const bytes = view.DataAllowShared();
const size_t byteLen = view.LengthAllowShared();
- const auto& elemType = view.Type();
- const auto& elemSize = js::Scalar::byteSize(elemType);
+ const auto& elemSize = SizeOfViewElem(view);
size_t elemCount = byteLen / elemSize;
if (elemOffset > elemCount) {
ErrorInvalidValue("%s: Invalid offset into ArrayBufferView.", funcName);
return false;
}
elemCount -= elemOffset;