<!DOCTYPE HTML> <html> <head> <title>Test AudioBufferSourceNode when an AudioBuffer's getChanneData buffer is detached</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="webaudio.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> function createGarbage() { var s = []; for (var i = 0; i < 10000000; ++i) { s.push(i); } var sum = 0; for (var i = 0; i < s.length; ++i) { sum += s[i]; } return sum; } var worker = new Worker("audioBufferSourceNodeDetached_worker.js"); var gTest = { length: 2048, numberOfChannels: 1, createGraph: function(context) { var buffer = context.createBuffer(1, 10000000, context.sampleRate); var data = buffer.getChannelData(0); for (var i = 0; i < data.length; ++i) { data[i] = (i%100)/100 - 0.5; } // Detach the buffer now var data = buffer.getChannelData(0).buffer; worker.postMessage(data, [data]); // Create garbage and GC to replace the buffer data with garbage SpecialPowers.gc(); createGarbage(); SpecialPowers.gc(); var source = context.createBufferSource(); source.buffer = buffer; source.start(); // This should play silence return source; }, }; runTest(); </script> </pre> </body> </html>