| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| offlineaudiocontext-detached-no-crash.html |
| </title> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../resources/audit-util.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| description( |
| 'Tests document-detached use of OfflineAudioContext, pass if no crash.'); |
| |
| window.jsTestIsAsync = true; |
| |
| function errorCallback(error) { |
| testPassed( |
| 'OfflineAudioContext.startRendering() on a closed context threw an exception.'); |
| finishJSTest(); |
| } |
| |
| function successCallback() { |
| testFailed( |
| 'OfflineAudioContext.startRendering() on a closed context did not throw an exception.'); |
| finishJSTest(); |
| } |
| |
| let context; |
| function runTest() { |
| context.startRendering().then(successCallback, errorCallback); |
| } |
| |
| function createOfflineContext() { |
| let sampleRate = 44100.0; |
| let renderLengthInFrames = 512; |
| let bufferSize = 512; |
| |
| context = |
| new w.OfflineAudioContext(1, renderLengthInFrames, sampleRate); |
| let node = context.createScriptProcessor(bufferSize, 0, 1); |
| let source = context.createBufferSource(); |
| source.buffer = createImpulseBuffer(context, bufferSize); |
| node.onaudioprocess = function(e) {}; |
| source.connect(node); |
| node.connect(context.destination); |
| source.start(0); |
| } |
| |
| let w; |
| function processMessage(event) { |
| if (event.data == 'opened') { |
| createOfflineContext(); |
| w.close(); |
| } else if (event.data == 'closed') { |
| setTimeout(runTest, 100); |
| } |
| } |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| testRunner.setCanOpenWindows(); |
| } |
| |
| w = window.open('../../resources/window-postmessage-open-close.html'); |
| window.addEventListener('message', processMessage, false); |
| </script> |
| </body> |
| </html> |