test_weakmap_keys_preserved2.xhtml (2745B)
1 <?xml version="1.0"?> 2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?> 3 <?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> 4 <!-- 5 https://bugzilla.mozilla.org/show_bug.cgi?id=673468 6 --> 7 <window title="Mozilla Bug " 8 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 9 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> 10 11 <!-- test results are displayed in the html:body --> 12 <body xmlns="http://www.w3.org/1999/xhtml"> 13 <a id="testelem" href="https://bugzilla.mozilla.org/show_bug.cgi?id=" 14 target="_blank">Mozilla Bug 673468</a> 15 </body> 16 17 <!-- test code goes here --> 18 <script type="application/javascript"> 19 <![CDATA[ 20 /** Test for Bug 673468 */ 21 SimpleTest.waitForExplicitFinish(); 22 SpecialPowers.DOMWindowUtils.garbageCollect(); 23 24 let get_live_dom = function () { 25 return document.getElementById("testelem"); 26 }; 27 28 let wrappers_as_keys_test = function () { 29 let e = new MessageEvent("foo", { bubbles: false, cancellable: false, 30 data: { dummy: document.createXULElement("foo") }}); 31 window.eeeevent = e; 32 33 let live_dom = e.data.dummy; 34 let dead_dom = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); 35 let dead_child = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); 36 dead_dom.appendChild(dead_child); 37 is(dead_dom.children.length, 1, "children have wrong length"); 38 let wrappee = {}; 39 40 dead_dom.abcxyz = wrappee; 41 42 let system = Cc["@mozilla.org/systemprincipal;1"].createInstance(); 43 let sandbox = Cu.Sandbox(system); 44 45 sandbox.wrapper = wrappee; 46 sandbox.value = dead_dom; 47 let map = Cu.evalInSandbox("wm = new WeakMap(); wm.set(wrapper, value); wm", sandbox); 48 sandbox.wrapper = null; 49 sandbox.value = null; 50 51 live_dom.xyzabc = {wrappee, m: map, sb: sandbox}; 52 53 let key = ChromeUtils.nondeterministicGetWeakMapKeys(map)[0]; 54 let value = map.get(key); 55 is(value.children.length, 1, "children have wrong length"); 56 } 57 58 wrappers_as_keys_test(); 59 60 let check_wrappers_as_keys = function () { 61 let live_dom = window.eeeevent.data.dummy; 62 let live_map = live_dom.xyzabc.m; 63 is(ChromeUtils.nondeterministicGetWeakMapKeys(live_map).length, 1, 64 "Map should not be empty."); 65 let key = ChromeUtils.nondeterministicGetWeakMapKeys(live_map)[0]; 66 let value = live_map.get(key); 67 is(value.children.length, 1, "children have wrong length"); 68 } 69 70 Cu.schedulePreciseGC(function () { 71 SpecialPowers.DOMWindowUtils.cycleCollect(); 72 SpecialPowers.DOMWindowUtils.garbageCollect(); 73 74 check_wrappers_as_keys(); 75 SimpleTest.finish(); 76 }); 77 78 ]]> 79 </script> 80 </window>