test_ScriptProcessorCollected1.html (2044B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test ScriptProcessorNode in cycle with no listener is collected</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 </head> 8 <body> 9 <script class="testbody" type="text/javascript"> 10 11 SimpleTest.waitForExplicitFinish(); 12 13 var observer = function(subject, topic, data) { 14 var id = parseInt(data); 15 var index = ids.indexOf(id); 16 if (index != -1) { 17 ok(true, "Collected AudioNode id " + id + " at index " + index); 18 ids.splice(index, 1); 19 } 20 } 21 22 SpecialPowers.addObserver(observer, "webaudio-node-demise"); 23 24 SimpleTest.registerCleanupFunction(function() { 25 if (observer) { 26 SpecialPowers.removeObserver(observer, "webaudio-node-demise"); 27 } 28 }); 29 30 var ac = new AudioContext(); 31 32 var testProcessor = ac.createScriptProcessor(256, 1, 0); 33 var delay = ac.createDelay(); 34 testProcessor.connect(delay); 35 delay.connect(testProcessor); 36 37 var referenceProcessor = ac.createScriptProcessor(256, 1, 0); 38 var gain = ac.createGain(); 39 gain.connect(referenceProcessor); 40 41 var processCount = 0; 42 testProcessor.onaudioprocess = function(event) { 43 ++processCount; 44 switch (processCount) { 45 case 1: 46 // Switch to listening to referenceProcessor; 47 referenceProcessor.onaudioprocess = event.target.onaudioprocess; 48 referenceProcessor = null; 49 event.target.onaudioprocess = null; 50 break; 51 case 2: 52 // There are no references to testProcessor and so GC can begin. 53 SpecialPowers.exactGC(function() { 54 SpecialPowers.removeObserver(observer, "webaudio-node-demise"); 55 observer = null; 56 event.target.onaudioprocess = null; 57 ok(!ids.length, "All expected nodes should be collected"); 58 SimpleTest.finish(); 59 }); 60 break; 61 } 62 }; 63 64 function id(node) { 65 return SpecialPowers.getPrivilegedProps(node, "id"); 66 } 67 68 // Nodes with these ids should be collected. 69 var ids = [ id(testProcessor), id(delay), id(gain) ]; 70 testProcessor = null; 71 delay = null; 72 gain = null; 73 74 </script> 75 </pre> 76 </body> 77 </html>