<!DOCTYPE HTML> <html> <head> <title>Test the devtool AudioNode API</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); function id(node) { return SpecialPowers.getPrivilegedProps(node, "id"); } var ac = new AudioContext(); var ids; var weak; (function() { var src1 = ac.createBufferSource(); var src2 = ac.createBufferSource(); ok(id(src2) > id(src1), "The ID should be monotonic"); ok(id(src1) > id(ac.destination), "The ID of the destination node should be the lowest"); ids = [id(src1), id(src2)]; weak = SpecialPowers.Cu.getWeakReference(src1); is(SpecialPowers.unwrap(weak.get()), src1, "The node should support a weak reference"); })(); function observer(subject, topic, data) { var id = parseInt(data); var index = ids.indexOf(id); if (index != -1) { info("Dropping id " + id + " at index " + index); ids.splice(index, 1); if (!ids.length) { SimpleTest.executeSoon(function() { is(weak.get(), null, "The weak reference must be dropped now"); SpecialPowers.removeObserver(observer, "webaudio-node-demise"); SimpleTest.finish(); }); } } } SpecialPowers.addObserver(observer, "webaudio-node-demise"); forceCC(); forceCC(); function forceCC() { SpecialPowers.DOMWindowUtils.cycleCollect(); SpecialPowers.DOMWindowUtils.garbageCollect(); SpecialPowers.DOMWindowUtils.garbageCollect(); } </script> </pre> </body> </html>