<!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.setPopupBlockingEnabled(false);
}
w = window.open('../../resources/window-postmessage-open-close.html');
window.addEventListener('message', processMessage, false);
</script>
</body>
</html>