diff options
Diffstat (limited to '')
-rw-r--r-- | dom/media/webaudio/test/test_AudioNodeDevtoolsAPI.html | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/dom/media/webaudio/test/test_AudioNodeDevtoolsAPI.html b/dom/media/webaudio/test/test_AudioNodeDevtoolsAPI.html new file mode 100644 index 0000000000..f032ed88f0 --- /dev/null +++ b/dom/media/webaudio/test/test_AudioNodeDevtoolsAPI.html @@ -0,0 +1,59 @@ +<!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> |