cross-realm-iterator-suppression.js (668B)
1 function foo(o) { 2 // Ensure a NativeIterator exists for o. 3 for (var s in o) {} 4 5 // Loop over the keys, deleting y. 6 // If y is correctly suppressed, then result should 7 // be the name of the first property. 8 var result = ""; 9 for (var s in o) { 10 delete o.y; 11 result += s; 12 } 13 assertEq(o[result], 42); 14 } 15 16 with ({}) {} 17 for (var i = 0; i < 100; i++) { 18 var o = {}; 19 o["x" + i] = 42; 20 o.y = 1; 21 foo(o); 22 } 23 24 // Cross-realm, same-compartment 25 var g = newGlobal({newCompartment: false}); 26 g.eval("var o = {x: 42, y: 1}"); 27 foo(g.o); 28 29 // Cross-realm, cross-compartment 30 var g2 = newGlobal({newCompartment: true}); 31 g2.eval("var o = {x: 42, y: 1}"); 32 foo(g2.o);