blob: 29a0322e08a40c4204d45980dedbcc3168f7e267 [file] [log] [blame]
<!DOCTYPE html>
<body><span>click me</span></body>
<script>
// Setup the flags before the test is run.
internals.settings.setAutoplayPolicy('document-user-activation-required');
internals.runtimeFlags.autoplayIgnoresWebAudioEnabled = false;
function synthesizeClick(callback) {
const elementBoundingRect = document.body.getBoundingClientRect();
const xPos = elementBoundingRect.left + elementBoundingRect.width / 2;
const yPos = elementBoundingRect.top + elementBoundingRect.height / 2;
const leftButton = 0;
chrome.gpuBenchmarking.pointerActionSequence([
{
source: 'mouse',
actions: [
{ name: 'pointerMove', x: xPos, y: yPos },
{ name: 'pointerDown', x: xPos, y: yPos, button: leftButton },
{ name: 'pointerUp', button: leftButton }
]
}
], callback);
}
// AudioContext will start as suspended when lacking a user gesture.
var audioContext = new AudioContext();
window.parent.postMessage({ msg: 'initialState', value: audioContext.state },
'*');
// OfflineAudioContext has no user gesture requirement but is always suspended.
var offlineAudioContext = new OfflineAudioContext(1, 512, 3000);
window.parent.postMessage({ msg: 'initialOfflineState',
value: offlineAudioContext.state }, '*');
// Calling 'resume()' will fail to start the AudioContext.
audioContext.resume();
window.parent.postMessage({ msg: 'afterResume', value: audioContext.state },
'*');
// Calling 'start()' will fail to start the AudioContext associated.
var oscillator = audioContext.createOscillator();
oscillator.type = 'square';
oscillator.frequency.value = 2000;
oscillator.connect(audioContext.destination);
oscillator.start();
window.parent.postMessage({ msg: 'afterOscillator', value: audioContext.state },
'*');
var otherAudioContext = new AudioContext();
synthesizeClick(async _ => {
// Calling 'resume()' from a click event will start the audio context.
await audioContext.resume();
window.parent.postMessage({ msg: 'stateAfterClick',
value: audioContext.state }, '*');
window.parent.postMessage({ msg: 'stateOtherContextAfterClick',
value: otherAudioContext.state }, '*');
synthesizeClick(_ => {
var oscillator = otherAudioContext.createOscillator();
oscillator.type = 'square';
oscillator.frequency.value = 2000;
oscillator.connect(otherAudioContext.destination);
// Creating an AudioContext from a click event will start it.
var lastAudioContext = new AudioContext();
window.parent.postMessage({ msg: 'stateCreatedAfterClick',
value: lastAudioContext.state }, '*');
window.parent.postMessage({ msg: 'done' }, '*');
});
});
</script>