Bug 1316829 - DataViews are part of ArrayBufferView. - r=waldo draft
authorJeff Gilbert (:jgilbert) <jgilbert@mozilla.com>
Fri, 11 Nov 2016 17:43:53 -0800
changeset 437976 581776e3e20b36022a7c7e9221cea5a4d6698c4c
parent 431993 4b00f0d87c029a4f971b5b7ba71bf550ac449645
child 536785 c974ffb1f0c1861e04430d935b06b8c848cc1ba3
push id35577
push userbmo:jgilbert@mozilla.com
push dateSat, 12 Nov 2016 02:53:10 +0000
reviewerswaldo
bugs1316829
milestone52.0a1
Bug 1316829 - DataViews are part of ArrayBufferView. - r=waldo MozReview-Commit-ID: L0Xauoo2nJh
dom/canvas/WebGLContext.cpp
--- 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;