blob: eb9a9bfeb74abfbf318867b5da44fa53be8896f1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Capture source interruption.</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
promise_test(async (test) => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getVideoTracks()[0];
if (!window.testRunner)
return;
let promise = new Promise((resolve, reject) => { track.onmute = resolve; setTimeout(() => reject("no mute"), 5000) });
testRunner.setMockCameraIsInterrupted(true);
await promise;
assert_true(track.muted, "track is muted");
promise = new Promise((resolve, reject) => { track.onunmute = resolve; setTimeout(() => reject("no unmute"), 5000) });
testRunner.setMockCameraIsInterrupted(false);
await promise;
assert_false(track.muted, "track is not muted");
track.stop();
}, "Interrupt/resume video track");
promise_test(async (test) => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getVideoTracks()[0];
if (!window.testRunner || !window.internals)
return;
internals.observeMediaStreamTrack(track);
// video frames should flow.
let current = internals.trackVideoSampleCount;
let counter = 0;
while (internals.trackVideoSampleCount === current && ++counter < 50)
await new Promise(resolve => setTimeout(resolve, 50));
assert_less_than(counter, 50, "first live check");
// getting an interruption, track should be muted.
let promise = new Promise((resolve, reject) => { track.onmute = resolve; setTimeout(() => reject("no mute"), 5000) });
testRunner.setMockCameraIsInterrupted(true);
await promise;
assert_true(track.muted, "track is muted");
// video frames should not flow.
counter = 0;
while (internals.trackVideoSampleCount !== current && ++counter < 50) {
current = internals.trackVideoSampleCount;
await new Promise(resolve => setTimeout(resolve, 200));
}
assert_less_than(counter, 50, "first muted check");
// Unmuting page should restart capture.
promise = new Promise((resolve, reject) => { track.onunmute = resolve; setTimeout(() => reject("no unmute"), 5000) });
internals.setPageMuted('');
await promise;
assert_false(track.muted, "track is not muted");
current = internals.trackVideoSampleCount;
counter = 0;
while (internals.trackVideoSampleCount === current && ++counter < 50)
await new Promise(resolve => setTimeout(resolve, 50));
assert_less_than(counter, 50, "second live check");
track.stop();
}, "Interrupt video track then uninterrupt it using page unmuting");
</script>
</body>
</html>