js/xpconnect/tests/chrome/test_watchpoints.xul

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:96ef68dc0115
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=693527
6 -->
7 <window title="Mozilla Bug "
8 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
9 <script type="application/javascript" 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 href="https://bugzilla.mozilla.org/show_bug.cgi?id="
14 target="_blank">Mozilla Bug 693527</a>
15 </body>
16
17 <!-- test code goes here -->
18 <script type="application/javascript">
19 <![CDATA[
20 /** Test for Bug 693527 **/
21
22 let Cu = Components.utils;
23 let Ci = Components.interfaces;
24
25 /* Create a weak reference, with a single-element weak map. */
26 let make_weak_ref = function (obj) {
27 let m = new WeakMap;
28 m.set(obj, {});
29 return m;
30 };
31
32 /* Check to see if a weak reference is dead. */
33 let weak_ref_dead = function (r) {
34 return Cu.nondeterministicGetWeakMapKeys(r).length == 0;
35 }
36
37
38 let make_cycle = function () {
39 var p = document.createElement("p");
40 p.children.x = p;
41 var f = function() { };
42 p.watch("y", f);
43 var d = document.createElement("div");
44 d.appendChild(p);
45 f.loop = d;
46 f.bar = {}; // observing f directly makes the leak go away even without the CC somehow
47 return make_weak_ref(f.bar);
48 };
49
50 var cycle_ref = make_cycle();
51
52
53 /* set up for running precise GC/CC then checking the results */
54
55 SimpleTest.waitForExplicitFinish();
56
57 Cu.schedulePreciseGC(function () {
58 window.QueryInterface(Ci.nsIInterfaceRequestor)
59 .getInterface(Ci.nsIDOMWindowUtils)
60 .cycleCollect();
61 window.QueryInterface(Ci.nsIInterfaceRequestor)
62 .getInterface(Ci.nsIDOMWindowUtils)
63 .garbageCollect();
64 window.QueryInterface(Ci.nsIInterfaceRequestor)
65 .getInterface(Ci.nsIDOMWindowUtils)
66 .garbageCollect();
67
68 ok(weak_ref_dead(cycle_ref), "Garbage gray watchpoint cycle should be collected.");
69
70 SimpleTest.finish();
71 });
72
73 ]]>
74 </script>
75 </window>

mercurial