117 lines
4.7 KiB
HTML
117 lines
4.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script>
|
|
let mediaStream;
|
|
let eventCount = 0;
|
|
let muteChangedEvent;
|
|
|
|
function nextStep()
|
|
{
|
|
if (muteChangedEvent.type == "unmute") {
|
|
finishJSTest();
|
|
return;
|
|
}
|
|
|
|
debug("<br>*** Unmuting capture devices");
|
|
eventCount = 0;
|
|
internals.setPageMuted("");
|
|
}
|
|
|
|
function muteChanged(ev)
|
|
{
|
|
muteChangedEvent = ev;
|
|
debug(`EVENT: ${muteChangedEvent.type}`);
|
|
shouldBe('muteChangedEvent.target.muted', (muteChangedEvent.type == "mute").toString());
|
|
|
|
if (++eventCount == 2) {
|
|
debug("");
|
|
|
|
let activeState = muteChangedEvent.type == "mute" ? "Muted" : "Active";
|
|
let inactiveState = muteChangedEvent.type == "mute" ? "Active" : "Muted";
|
|
let retryCount = 0;
|
|
let retryInterval = 100;
|
|
let maximumRetryCount = 20 * 1000 / retryInterval;
|
|
let test = () => {
|
|
|
|
if (window.internals.pageMediaState().includes(`Has${activeState}AudioCaptureDevice`)
|
|
&& window.internals.pageMediaState().includes(`Has${activeState}VideoCaptureDevice`)
|
|
&& !window.internals.pageMediaState().includes(`Has${inactiveState}VideoCaptureDevice`)
|
|
&& !window.internals.pageMediaState().includes(`Has${inactiveState}VideoCaptureDevice`)) {
|
|
|
|
testPassed(`window.internals.pageMediaState().includes(Has${activeState}AudioCaptureDevice) became true`);
|
|
testPassed(`window.internals.pageMediaState().includes(Has${activeState}VideoCaptureDevice) became true`);
|
|
testPassed(`window.internals.pageMediaState().includes(Has${inactiveState}AudioCaptureDevice) became false`);
|
|
testPassed(`window.internals.pageMediaState().includes(Has${inactiveState}VideoCaptureDevice) became false`);
|
|
|
|
nextStep()
|
|
return;
|
|
}
|
|
|
|
if (++retryCount > maximumRetryCount) {
|
|
testFailed(`Page muted state failed to change after ${maximumRetryCount / 1000} seconds`);
|
|
return;
|
|
}
|
|
|
|
setTimeout(test, retryInterval);
|
|
}
|
|
|
|
setTimeout(test, 0);
|
|
}
|
|
}
|
|
|
|
function muteCaptureDevices()
|
|
{
|
|
debug("<br>*** Muting capture devices");
|
|
internals.setPageMuted("capturedevices");
|
|
}
|
|
|
|
function testWhenEnabled()
|
|
{
|
|
navigator.mediaDevices
|
|
.getUserMedia({audio:{}, video:{}})
|
|
.then(stream => {
|
|
mediaStream = stream;
|
|
shouldBeType("mediaStream", "Object");
|
|
shouldBe("mediaStream.getTracks().length", "2");
|
|
|
|
var tracks = mediaStream.getTracks();
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
tracks[i].onmute = muteChanged;
|
|
tracks[i].onunmute = muteChanged;
|
|
}
|
|
|
|
shouldBecomeEqual("window.internals.pageMediaState().includes('HasActiveAudioCaptureDevice') && window.internals.pageMediaState().includes('HasActiveVideoCaptureDevice')", "true", muteCaptureDevices);
|
|
})
|
|
.catch((err) => {
|
|
testFailed(`mediaDevices.getUserMedia() failed with ${err.name}`);
|
|
finishJSTest();
|
|
});
|
|
}
|
|
|
|
function start()
|
|
{
|
|
debug(`<br>*** Mock capture devices should be enabled by default`);
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
|
|
testWhenEnabled();
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
|
|
<body onload="start()">
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<script>
|
|
description("Test enabling/disabling mock media capture devices");
|
|
window.jsTestIsAsync = true;
|
|
|
|
window.successfullyParsed = true;
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|