84 lines
3.4 KiB
HTML
84 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Mute screen capture, make sure page state updates correctly.</title>
|
|
<script src="../../resources/testharness.js"></script>
|
|
<script src="../../resources/testharnessreport.js"></script>
|
|
<script>
|
|
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
|
|
function callGetDisplayMedia(options)
|
|
{
|
|
let promise;
|
|
window.internals.withUserGesture(() => {
|
|
promise = navigator.mediaDevices.getDisplayMedia(options);
|
|
});
|
|
return promise;
|
|
}
|
|
|
|
async function waitForPageStateChange(numberOfTries, originalState)
|
|
{
|
|
return new Promise(async (resolve) => {
|
|
while (numberOfTries) {
|
|
if (internals.pageMediaState() != originalState) {
|
|
resolve(true);
|
|
return;
|
|
}
|
|
|
|
await new Promise(resolve => { setTimeout(resolve, 10) });
|
|
--numberOfTries;
|
|
}
|
|
|
|
resolve(false);
|
|
});
|
|
}
|
|
|
|
promise_test(async (test) => {
|
|
await new Promise(async (resolve, reject) => {
|
|
let stream = await callGetDisplayMedia({ video: true });
|
|
let pageMediaState = internals.pageMediaState();
|
|
|
|
assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
|
|
assert_false(pageMediaState.includes('HasMutedVideoCaptureDevice'), 'page state does not include HasMutedVideoCaptureDevice');
|
|
assert_false(pageMediaState.includes('HasMutedAudioCaptureDevice'), 'page state does not include HasMutedAudioCaptureDevice');
|
|
|
|
let track = stream.getVideoTracks()[0];
|
|
track.onunmute = () => { assert_unreached("Got 'unmute' event unexpectedly!") };
|
|
|
|
track.onmute = async (evt) => {
|
|
|
|
if (!await waitForPageStateChange(10, pageMediaState))
|
|
assert_unreached(`Page state did not change from ${pageMediaState}`);
|
|
|
|
track.onunmute = async (evt) => {
|
|
if (!await waitForPageStateChange(10, pageMediaState))
|
|
assert_unreached(`Page state did not change from ${pageMediaState}`);
|
|
|
|
pageMediaState = internals.pageMediaState();
|
|
assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
|
|
assert_true(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state includes HasActiveDisplayCaptureDevice');
|
|
resolve()
|
|
}
|
|
|
|
pageMediaState = internals.pageMediaState();
|
|
assert_true(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state includes HasMutedDisplayCaptureDevice');
|
|
assert_false(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state does not include HasActiveDisplayCaptureDevice');
|
|
internals.setMediaStreamTrackMuted(track, false)
|
|
}
|
|
|
|
pageMediaState = internals.pageMediaState();
|
|
internals.setMediaStreamTrackMuted(track, true);
|
|
|
|
setTimeout(() => reject("Muted state did not change in .5 second"), 500);
|
|
});
|
|
}, "Mute video track during screen capture");
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
</body>
|
|
</html>
|