diff options
Diffstat (limited to '')
-rw-r--r-- | dom/media/webaudio/test/test_bug1027864.html | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/dom/media/webaudio/test/test_bug1027864.html b/dom/media/webaudio/test/test_bug1027864.html new file mode 100644 index 0000000000..847485ff88 --- /dev/null +++ b/dom/media/webaudio/test/test_bug1027864.html @@ -0,0 +1,74 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test bug 1027864</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 observer(subject, topic, data) { + var id = parseInt(data); + var index = ids.indexOf(id); + if (index != -1) { + ok(true, "Dropping id " + id + " at index " + index); + ids.splice(index, 1); + if (!ids.length) { + SimpleTest.executeSoon(function() { + SimpleTest.finish(); + }); + } + } +} + +function id(node) { + return SpecialPowers.getPrivilegedProps(node, "id"); +} + +SpecialPowers.addAsyncObserver(observer, "webaudio-node-demise", false); + +SimpleTest.registerCleanupFunction(function() { + SpecialPowers.removeAsyncObserver(observer, "webaudio-node-demise"); +}); + +var ac = new AudioContext(); +var ids; + +(function() { + var delay = ac.createDelay(); + delay.delayTime.value = 0.03; + + var gain = ac.createGain(); + gain.gain.value = 0.6; + + delay.connect(gain); + gain.connect(delay); + + gain.connect(ac.destination); + + var source = ac.createOscillator(); + + source.connect(gain); + source.start(ac.currentTime); + source.stop(ac.currentTime + 0.1); + + ids = [ id(delay), id(gain), id(source) ]; +})(); + +setInterval(function() { + forceCC(); +}, 200); + +function forceCC() { + SpecialPowers.DOMWindowUtils.cycleCollect(); + SpecialPowers.DOMWindowUtils.garbageCollect(); +} + +</script> +</pre> +</body> +</html> |