Bug 991080. Add an overload of Promise::ArgumentToJSValue that lets callers pass in an nsTArray to MaybeResolve() a promise with a JS array. r=khuey

This commit is contained in:
Boris Zbarsky 2014-04-10 00:58:43 -04:00
Родитель e74e09a7f2
Коммит 7eca30f98c
1 изменённых файлов: 25 добавлений и 0 удалений

Просмотреть файл

@ -17,6 +17,7 @@
#include "nsWrapperCache.h"
#include "nsAutoPtr.h"
#include "js/TypeDecls.h"
#include "jsapi.h"
#include "mozilla/dom/workers/bindings/WorkerFeature.h"
@ -267,6 +268,30 @@ private:
return ArgumentToJSValue(*aArgument.get(), aCx, aValue);
}
// Accept arrays of other things we accept
template <typename T>
bool
ArgumentToJSValue(const nsTArray<T>& aArgument,
JSContext* aCx,
JS::MutableHandle<JS::Value> aValue)
{
JS::AutoValueVector v(aCx);
if (!v.resize(aArgument.Length())) {
return false;
}
for (uint32_t i = 0; i < aArgument.Length(); ++i) {
if (!ArgumentToJSValue(aArgument[i], aCx, v.handleAt(i))) {
return false;
}
}
JSObject* arrayObj = JS_NewArrayObject(aCx, v);
if (!arrayObj) {
return false;
}
aValue.setObject(*arrayObj);
return true;
}
template <typename T>
void MaybeSomething(T& aArgument, MaybeFunc aFunc) {
ThreadsafeAutoJSContext cx;