blob: bc3cd13ba5c06b9cbf75100f8709d756bf8fe735 [file] [log] [blame] [edit]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
function waitForStateChange()
{
return new Promise((resolve, reject) => {
navigator.audioSession.onstatechange = () => resolve(navigator.audioSession.state);
setTimeout(() => reject("no audio session state change, current audio session state is " + navigator.audioSession.state), 3000);
});
}
promise_test(async (test) => {
assert_equals(navigator.audioSession.type, "auto");
assert_equals(navigator.audioSession.state, "inactive");
let statePromise = waitForStateChange();
let localStream = await navigator.mediaDevices.getUserMedia({audio:true});
localStream.getTracks().forEach(track => track.stop());
assert_equals(await statePromise, "active");
navigator.audioSession.type = "playback";
await navigator.mediaDevices.getUserMedia({audio:true}).then(assert_unreached, () => { });
// Let's verify camera capture work even if audioSession type is playback.
localStream = await navigator.mediaDevices.getUserMedia({video:true});
localStream.getTracks().forEach(track => track.stop());
navigator.audioSession.type = "play-and-record";
localStream = await navigator.mediaDevices.getUserMedia({audio:true});
localStream.getTracks().forEach(track => track.stop());
}, "getUserMedia and AudioSession type");
</script>
</body>
</html>