blob: aecb5c471b6c3cf7e077c3cb92d648957b036eb0 [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Tests getUserMedia (Promise-based version on navigator.mediaDevices)");
function setUserMediaPermission(isGranted) {
if (window.testRunner)
testRunner.setUserMediaPermission(isGranted);
else
debug("This test can not be run without the testRunner");
}
var stream;
var errorArg;
let audioConstraints;
let videoConstraints;
function invalidGotStream() {
testFailed("Stream generated when an error should have occurred.");
finishJSTest();
}
function error1(e) {
testFailed(`Error callback called, error = ${e}`);
finishJSTest();
}
function errorWithConstraints2(e) {
testPassed("Error callback called.");
errorArg = e;
shouldBeEqualToString("errorArg.name", "OverconstrainedError");
finishJSTest();
}
function errorWithConstraints1() {
testPassed("Error callback called.");
videoConstraints = {
width: {
max: -1,
ideal: 2
},
height: 11
};
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:false, video:videoConstraints}).then(invalidGotStream).catch(errorWithConstraints2)");
}
function gotStreamWithConstraints3(s) {
stream = s;
testPassed("Stream 7 generated.");
shouldBeEqualToString("stream.getVideoTracks()[0].getSettings().facingMode", "user");
shouldBe("stream.getAudioTracks().length", "0");
audioConstraints = {
sampleRate: {
min: .6,
max: .5,
ideal: 1.0
},
sampleRate: {
exact: 88000
}
};
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:audioConstraints, video:false}).then(invalidGotStream).catch(errorWithConstraints1)");
}
function gotStreamWithConstraints2(s) {
stream = s;
testPassed("Stream 6 generated.");
shouldBe("stream.getAudioTracks().length", "0");
shouldBe("stream.getVideoTracks().length", "1");
videoConstraints = {
facingMode: {
exact: ['user']
},
};
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({video:videoConstraints}).then(gotStreamWithConstraints3).catch(error1)");
}
function gotStreamWithConstraints1(s) {
stream = s;
testPassed("Stream 5 generated.");
shouldBe("stream.getAudioTracks().length", "1");
shouldBe("stream.getVideoTracks().length", "0");
videoConstraints = {
width: {
min: 160,
max: 960,
ideal: 320
},
height: 240,
facingMode: {
exact: ['environment']
}
};
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({video:videoConstraints}).then(gotStreamWithConstraints2)");
}
function gotStream4(s) {
stream = s;
testPassed("Stream 4 generated.");
shouldBe("stream.getAudioTracks().length", "1");
shouldBe("stream.getVideoTracks().length", "1");
audioConstraints = {
sampleRate: {
min: 44100,
exact: 44100,
max: 48000,
ideal: 44100
},
sampleSize: 11
};
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:audioConstraints}).then(gotStreamWithConstraints1)");
}
function gotStream3(s) {
stream = s;
testPassed("Stream 3 generated.");
shouldBe("stream.getAudioTracks().length", "1");
shouldBe("stream.getVideoTracks().length", "1");
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:{}, video:{}}).then(gotStream4);");
}
function gotStream2(s) {
stream = s;
testPassed("Stream 2 generated.");
shouldBe("stream.getAudioTracks().length", "0");
shouldBe("stream.getVideoTracks().length", "1");
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(gotStream3);");
}
function gotStream1(s) {
stream = s;
testPassed("Stream 1 generated.");
shouldBe("stream.getAudioTracks().length", "1");
shouldBe("stream.getVideoTracks().length", "0");
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({video:true}).then(gotStream2);")
}
navigator.mediaDevices.getUserMedia().then(invalidGotStream, function(error) {
testPassed("navigator.mediaDevices.getUserMedia() rejected with error: " + error);
});
navigator.mediaDevices.getUserMedia({}).then(invalidGotStream, function(error) {
testPassed("navigator.mediaDevices.getUserMedia({}) rejected with error: " + error);
});
shouldBe("typeof navigator.mediaDevices.webkitGetUserMedia", "'undefined'");
setUserMediaPermission(true);
debug("");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream1);");
navigator.mediaDevices.getUserMedia.apply(undefined, {audio:true}).then(invalidGotStream, function(error) {
testPassed("navigator.mediaDevices.getUserMedia.apply(undefined) rejected with error: " + error);
});
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>