blob: 37e36203385748606f1350c79d11ae3dfd05d8c8 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
Test if AudioContext state changes correctly after a source starts.
</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
const audit = new Audit.createTaskRunner();
let autoplayIgnoresWebAudioEnabled;
audit.define('autoplay-policy-setup', function(task) {
autoplayIgnoresWebAudioEnabled =
internals.runtimeFlags.autoplayIgnoresWebAudioEnabled;
internals.runtimeFlags.autoplayIgnoresWebAudioEnabled = false;
internals.settings.setAutoplayPolicy(
'document-user-activation-required');
task.done();
});
audit.define('test-context-state', function(task, should) {
const context = new AudioContext();
const osc = new OscillatorNode(context);
osc.connect(context.destination);
activateDocument().then(() => {
should(context.state, 'Context state').beEqualTo('suspended');
osc.start();
should(context.state, 'Context state').beEqualTo('running');
task.done();
});
});
audit.define('post-test-cleanup', function(task) {
internals.runtimeFlags.autoplayIgnoresWebAudioEnabled =
autoplayIgnoresWebAudioEnabled;
internals.settings.setAutoplayPolicy('no-user-gesture-required');
task.done();
});
function activateDocument() {
return new Promise((resolve, reject) => {
chrome.gpuBenchmarking.pointerActionSequence([
{
source: 'mouse',
actions: [
{ name: 'pointerDown', x: 1, y: 1 },
{ name: 'pointerUp' },
],
}
], resolve);
});
}
audit.run();
</script>
</body>
</html>