blob: feeac480c48f89b8affa093a5f8b5c7f4716082f [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
Test AudioContext.close() closes many contexts
</title>
<script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit-util.js"></script>
<script src="../resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
let audit = Audit.createTaskRunner();
let context = null;
// The number of contexts we want to create and close.
let MAX_ITERATION = 100;
let counter = 0;
function createContextAndClose(task, should) {
// Bypass the first iteration.
if (context) {
should(context.state, 'context.state for closed context ' + counter)
.beEqualTo('closed');
context = null;
}
// Create new context and close.
context = new AudioContext();
if (counter++ < MAX_ITERATION) {
// Recursive promise resolution.
context.close().then(
function() {
createContextAndClose(task, should);
},
function() {
onFailure(should);
task.done();
});
} else {
context.close().then(function() {
// |counter| is one more than MAX_ITERATION if we
// succeeded.
should(
counter - 1,
'Number of contexts successfully created and closed')
.beEqualTo(MAX_ITERATION);
task.done();
});
}
}
function onFailure(should) {
should(context.state, 'Context ' + counter + 'failed to close')
.beEqualTo('closed');
}
audit.define(
{
label: 'test',
description:
'Test that closing a context releases the audio HW context'
},
function(task, should) {
createContextAndClose(task, should);
});
audit.run();
</script>
</body>
</html>