test_objectgrips-property-value-03.js (1621B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true); 7 registerCleanupFunction(() => { 8 Services.prefs.clearUserPref("security.allow_eval_with_system_principal"); 9 }); 10 11 add_task( 12 threadFrontTest(async ({ threadFront, debuggee }) => { 13 const packet = await executeOnNextTickAndWaitForPause( 14 () => evalCode(debuggee), 15 threadFront 16 ); 17 18 const { frame } = packet; 19 try { 20 const grips = frame.arguments; 21 const objClient = threadFront.pauseGrip(grips[0]); 22 const classes = [ 23 "Object", 24 "Object", 25 "Array", 26 "Boolean", 27 "Number", 28 "String", 29 ]; 30 for (const [i, grip] of grips.entries()) { 31 Assert.equal(grip.class, classes[i]); 32 await check_getter(objClient, grip.actor, i); 33 } 34 await check_getter(objClient, null, 0); 35 await check_getter(objClient, "invalid receiver actorId", 0); 36 } finally { 37 await threadFront.resume(); 38 } 39 }) 40 ); 41 42 function evalCode(debuggee) { 43 debuggee.eval( 44 function stopMe() { 45 debugger; 46 }.toString() 47 ); 48 49 debuggee.eval(` 50 var obj = { 51 get getter() { 52 return objects.indexOf(this); 53 }, 54 }; 55 var objects = [obj, {}, [], new Boolean(), new Number(), new String()]; 56 stopMe(...objects); 57 `); 58 } 59 60 async function check_getter(objClient, receiverId, expected) { 61 const { value } = await objClient.getPropertyValue("getter", receiverId); 62 Assert.equal(value.return, expected); 63 }