nukedCCW.js (1017B)
1 function testNuke() { 2 var wrapper = evaluate("({a: 15, b: {c: 42}})", 3 {global: newGlobal({newCompartment: true, sameZoneAs: this})}); 4 5 var i, error; 6 try { 7 for (i = 0; i < 150; i++) { 8 assertEq(wrapper.b.c, 42); 9 assertEq(wrapper.a, 15); 10 11 if (i == 142) { 12 // Next access to wrapper.b should throw. 13 nukeCCW(wrapper); 14 } 15 } 16 } catch (e) { 17 error = e; 18 } 19 20 assertEq(error.message.includes("dead object"), true); 21 assertEq(i, 143); 22 } 23 24 function testSweep() { 25 var wrapper = evaluate("({a: 15, b: {c: 42}})", 26 {global: newGlobal({newCompartment: true})}); 27 var error; 28 nukeCCW(wrapper); 29 gczeal(8, 1); // Sweep zones separately 30 try { 31 // Next access to wrapper.b should throw. 32 wrapper.x = 4; 33 } catch (e) { 34 error = e; 35 } 36 assertEq(error.message.includes("dead object"), true); 37 } 38 39 testNuke(); 40 testSweep();