diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index 24360a8dcf73..09f224b935b4 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -1464,6 +1464,14 @@ extern JS_FRIEND_API(bool) JS_NeuterArrayBuffer(JSContext *cx, JS::HandleObject obj, NeuterDataDisposition changeData); +/* + * Check whether the obj is ArrayBufferObject and neutered. Note that this + * may return false if a security wrapper is encountered that denies the + * unwrapping. + */ +extern JS_FRIEND_API(bool) +JS_IsNeuteredArrayBufferObject(JSObject *obj); + /* * Check whether obj supports JS_GetDataView* APIs. */ diff --git a/js/src/vm/ArrayBufferObject.cpp b/js/src/vm/ArrayBufferObject.cpp index e0494733187f..ae6b26eb42fc 100644 --- a/js/src/vm/ArrayBufferObject.cpp +++ b/js/src/vm/ArrayBufferObject.cpp @@ -1042,6 +1042,18 @@ JS_NeuterArrayBuffer(JSContext *cx, HandleObject obj, return true; } +JS_FRIEND_API(bool) +JS_IsNeuteredArrayBufferObject(JSObject *obj) +{ + obj = CheckedUnwrap(obj); + if (!obj) + return false; + + return obj->is() + ? obj->as().isNeutered() + : false; +} + JS_FRIEND_API(JSObject *) JS_NewArrayBuffer(JSContext *cx, uint32_t nbytes) {