Bug 929786 - Add shell function to neutering (r=sfink)

--HG--
extra : rebase_source : 3134a925596555755908f11017bd4203fc663eb1
This commit is contained in:
Luke Wagner 2013-10-24 08:59:59 -05:00
Родитель f0e9488c78
Коммит db439a9bf3
2 изменённых файлов: 45 добавлений и 0 удалений

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

@ -1318,6 +1318,24 @@ Deserialize(JSContext *cx, unsigned argc, jsval *vp)
return true; return true;
} }
static bool
Neuter(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
RootedObject obj(cx);
if (!JS_ValueToObject(cx, args.get(0), &obj))
return false;
void *contents;
uint8_t *data;
if (!JS_StealArrayBufferContents(cx, obj, &contents, &data))
return false;
js_free(contents);
return true;
}
static const JSFunctionSpecWithHelp TestingFunctions[] = { static const JSFunctionSpecWithHelp TestingFunctions[] = {
JS_FN_HELP("gc", ::GC, 0, 0, JS_FN_HELP("gc", ::GC, 0, 0,
"gc([obj] | 'compartment')", "gc([obj] | 'compartment')",
@ -1532,6 +1550,10 @@ static const JSFunctionSpecWithHelp TestingFunctions[] = {
"deserialize(clonebuffer)", "deserialize(clonebuffer)",
" Deserialize data generated by serialize."), " Deserialize data generated by serialize."),
JS_FN_HELP("neuter", Neuter, 1, 0,
"neuter(buffer)",
" Neuter the given ArrayBuffer object as if it had been transferred to a WebWorker."),
JS_FS_HELP_END JS_FS_HELP_END
}; };

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

@ -0,0 +1,23 @@
var ab = new ArrayBuffer(4);
var i32 = new Int32Array(ab);
i32[0] = 42;
neuter(ab);
assertEq(i32.length, 0);
assertEq(ab.byteLength, 0);
assertEq(i32[0], undefined);
var ab = new ArrayBuffer(12);
var i32 = new Int32Array(ab);
i32[0] = 42;
neuter(ab);
assertEq(i32.length, 0);
assertEq(ab.byteLength, 0);
assertEq(i32[0], undefined);
var ab = new ArrayBuffer(4096);
var i32 = new Int32Array(ab);
i32[0] = 42;
neuter(ab);
assertEq(i32.length, 0);
assertEq(ab.byteLength, 0);
assertEq(i32[0], undefined);