| <!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> |