test_shutdownCheck.xhtml (1557B)
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 <window title="Worker shutdown check" 6 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 7 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> 8 9 <!-- test results are displayed in the html:body --> 10 <body xmlns="http://www.w3.org/1999/xhtml"> 11 </body> 12 13 <!-- test code goes here --> 14 <script type="application/javascript"> 15 <![CDATA[ 16 17 SimpleTest.waitForExplicitFinish() 18 19 const URL = "worker_shutdownCheck.js"; 20 21 function checkWorker() { 22 const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"]. 23 getService(Ci.nsIWorkerDebuggerManager); 24 25 let e = wdm.getWorkerDebuggerEnumerator(); 26 while (e.hasMoreElements()) { 27 let dbg = e.getNext().QueryInterface(Ci.nsIWorkerDebugger); 28 if (dbg.url == URL) { 29 return true; 30 } 31 } 32 33 return false; 34 } 35 36 new Promise(resolve => { 37 var w = new Worker(URL); 38 ok(checkWorker(), "We have the worker"); 39 w.onmessage = () => { resolve(); } 40 }).then(() => { 41 info("Waiting..."); 42 43 // We don't know if the worker thread is able to shutdown when calling 44 // CC/GC. Better to check again in case. 45 function checkGC() { 46 Cu.forceCC(); 47 Cu.forceGC(); 48 if (!checkWorker()) { 49 ok(true, "We don't have the worker"); 50 SimpleTest.finish(); 51 return; 52 } 53 setTimeout(checkGC, 200); 54 } 55 56 checkGC(); 57 }); 58 59 ]]> 60 </script> 61 </window>