blob: 41f830089d09d00e6f4d16e399d2c7fd042076b5 [file] [log] [blame]
<body>
<video id="localVideo" autoplay playsInline></video>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
promise_test(async() => {
if (!window.internals)
return Promise.reject("Test requires internals API");
if (!window.internals.supportsAudioSession)
return;
internals.settings.setShouldManageAudioSessionCategory(true);
const defaultCategory = internals.audioSessionCategory();
let stream = await navigator.mediaDevices.getUserMedia({audio : true});
localVideo.srcObject = stream;
await localVideo.play();
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
stream.getAudioTracks()[0].enabled = false;
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
const audioTrack = stream.getAudioTracks()[0];
stream.removeTrack(audioTrack);
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
audioTrack.stop();
const maxTries = 100;
let counter = 0;
while (++counter < maxTries) {
if (internals.audioSessionCategory() != "PlayAndRecord")
break;
await new Promise(resolve => setTimeout(resolve, 10));
}
assert_less_than(counter, maxTries);
assert_equals(internals.audioSessionCategory(), defaultCategory);
}, "Check audio session state in case of disabled and stopped audio tracks");
</script>
</body>