tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>