Object-proxy.js (1650B)
1 // Debugger.Object.prototype.isProxy recognizes (scripted) proxies. 2 // Debugger.Object.prototype.proxyTarget exposes the [[Proxytarget]] of a proxy. 3 // Debugger.Object.prototype.proxyHandler exposes the [[ProxyHandler]] of a proxy. 4 5 var g = newGlobal({newCompartment: true}); 6 var dbg = new Debugger; 7 var gDO = dbg.addDebuggee(g); 8 9 g.eval('var target = [1,2,3];'); 10 g.eval('var handler = {has: ()=>false};'); 11 g.eval('var proxy = new Proxy(target, handler);'); 12 g.eval('var proxyProxy = new Proxy(proxy, proxy);'); 13 g.eval('var revoker = Proxy.revocable(target, handler);'); 14 g.eval('var revocable = revoker.proxy;'); 15 16 var target = gDO.getOwnPropertyDescriptor('target').value; 17 var handler = gDO.getOwnPropertyDescriptor('handler').value; 18 var proxy = gDO.getOwnPropertyDescriptor('proxy').value; 19 var proxyProxy = gDO.getOwnPropertyDescriptor('proxyProxy').value; 20 var revocable = gDO.getOwnPropertyDescriptor('revocable').value; 21 22 assertEq(target.isProxy, false); 23 assertEq(target.proxyTarget, undefined); 24 assertEq(target.proxyHandler, undefined); 25 26 assertEq(handler.isProxy, false); 27 assertEq(handler.proxyTarget, undefined); 28 assertEq(handler.proxyHandler, undefined); 29 30 assertEq(proxy.isProxy, true); 31 assertEq(proxy.proxyTarget, target); 32 assertEq(proxy.proxyHandler, handler); 33 34 assertEq(proxyProxy.isProxy, true); 35 assertEq(proxyProxy.proxyTarget, proxy); 36 assertEq(proxyProxy.proxyHandler, proxy); 37 38 assertEq(revocable.isProxy, true); 39 assertEq(revocable.proxyTarget, target); 40 assertEq(revocable.proxyHandler, handler); 41 g.eval('revoker.revoke();'); 42 assertEq(revocable.isProxy, true); 43 assertEq(revocable.proxyTarget, null); 44 assertEq(revocable.proxyHandler, null);