Bug 1296275 - Be better about exposing to active js in AudioBuffer::StealJSArrayDataIntoSharedChannels(). r=karlt
MozReview-Commit-ID: GC8sncFJlPS
--- a/dom/media/webaudio/AudioBuffer.cpp
+++ b/dom/media/webaudio/AudioBuffer.cpp
@@ -366,22 +366,28 @@ AudioBuffer::StealJSArrayDataIntoSharedC
// "2. Detach all ArrayBuffers for arrays previously returned by
// getChannelData on this AudioBuffer."
// "3. Retain the underlying data buffers from those ArrayBuffers and return
// references to them to the invoker."
RefPtr<ThreadSharedFloatArrayBufferList> result =
new ThreadSharedFloatArrayBufferList(mJSChannels.Length());
for (uint32_t i = 0; i < mJSChannels.Length(); ++i) {
+ if (mJSChannels[i]) {
+ JS::ExposeObjectToActiveJS(mJSChannels[i]);
+ }
JS::Rooted<JSObject*> arrayBufferView(aJSContext, mJSChannels[i]);
bool isSharedMemory;
JS::Rooted<JSObject*> arrayBuffer(aJSContext,
JS_GetArrayBufferViewBuffer(aJSContext,
arrayBufferView,
&isSharedMemory));
+ if (arrayBuffer) {
+ JS::ExposeObjectToActiveJS(arrayBuffer);
+ }
// The channel data arrays should all have originated in
// RestoreJSChannelData, where they are created unshared.
MOZ_ASSERT(!isSharedMemory);
auto stolenData = arrayBuffer
? static_cast<float*>(JS_StealArrayBufferContents(aJSContext,
arrayBuffer))
: nullptr;
if (stolenData) {