PromiseResolverTask(Promise* aPromise, JS::Handle<JS::Value> aValue, Promise::PromiseState aState) : mPromise(aPromise) , mValue(aValue) , mState(aState) { MOZ_ASSERT(aPromise); MOZ_ASSERT(mState != Promise::Pending); MOZ_COUNT_CTOR(PromiseResolverTask); JSContext* cx = nsContentUtils::GetSafeJSContext(); /* It's safe to use unsafeGet() here: the unsafeness comes from the * possibility of updating the value of mJSObject without triggering the * barriers. However if the value will always be marked, post barriers * unnecessary. */ JS_AddNamedValueRootRT(JS_GetRuntime(cx), mValue.unsafeGet(), "PromiseResolverTask.mValue"); }
NS_IMETHODIMP ArrayBufferInputStream::SetData(const JS::Value& aBuffer, uint32_t aByteOffset, uint32_t aLength, JSContext* aCx) { if (!aBuffer.isObject()) { return NS_ERROR_FAILURE; } JS::RootedObject arrayBuffer(aCx, &aBuffer.toObject()); if (!JS_IsArrayBufferObject(arrayBuffer)) { return NS_ERROR_FAILURE; } mRt = JS_GetRuntime(aCx); mArrayBuffer = aBuffer; JS_AddNamedValueRootRT(mRt, &mArrayBuffer, "mArrayBuffer"); uint32_t buflen = JS_GetArrayBufferByteLength(arrayBuffer); mOffset = std::min(buflen, aByteOffset); mBufferLength = std::min(buflen - mOffset, aLength); mBuffer = JS_GetArrayBufferData(arrayBuffer); return NS_OK; }