summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html')
-rw-r--r--testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html124
1 files changed, 124 insertions, 0 deletions
diff --git a/testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html b/testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html
new file mode 100644
index 0000000000..da27b3c357
--- /dev/null
+++ b/testing/web-platform/tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<title>MediaStreamTrack applyConstraints</title>
+<p class="instructions">When prompted, accept to share your video stream.</p>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=permission-helper.js></script>
+<script>
+ 'use strict'
+
+ // https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-applyconstraints
+
+ promise_test(async t => {
+ await setMediaPermission("granted", ["camera"]);
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ return stream.getVideoTracks()[0].applyConstraints(
+ { groupId: { exact: "INVALID" } }).then(
+ t.unreached_func('Accepted invalid groupID'),
+ t.step_func(e => {
+ assert_equals(e.name, 'OverconstrainedError');
+ assert_equals(e.constraint, 'groupId');
+ }));
+ }));
+ }, 'applyConstraints rejects invalid groupID');
+
+ promise_test(async t => {
+ let long_string_groupId = "2".padStart(501);
+ await setMediaPermission("granted", ["camera"]);
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ return stream.getVideoTracks()[0].applyConstraints(
+ { groupId: { ideal: long_string_groupId } }).then(
+ t.unreached_func('Accepted ideal long string groupID'),
+ t.step_func(e => {
+ assert_equals(e.name, 'OverconstrainedError');
+ }));
+ }));
+ }, 'applyConstraints rejects long string ideal groupID');
+
+ promise_test(async t => {
+ let long_string_groupId = "2".padStart(501);
+ await setMediaPermission("granted", ["camera"]);
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ return stream.getVideoTracks()[0].applyConstraints(
+ { groupId: { exact: long_string_groupId } }).then(
+ t.unreached_func('Accepted exact long string groupID'),
+ t.step_func(e => {
+ assert_equals(e.name, 'OverconstrainedError');
+ }));
+ }));
+ }, 'applyConstraints rejects long string groupID');
+
+ promise_test(async t => {
+ await setMediaPermission("granted", ["camera"]);
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ return stream.getVideoTracks()[0].applyConstraints(
+ { mandatory: { groupId: "INVALID" }, groupId: { exact: "INVALID" } }).then(
+ t.unreached_func('Accepted exact long string groupID'),
+ t.step_func(e => {
+ assert_equals(e.name, 'OverconstrainedError');
+ }));
+ }));
+ }, 'applyConstraints rejects using both mandatory and specific constraints');
+
+ promise_test(t => {
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ var track = stream.getVideoTracks()[0];
+ var groupId = track.getSettings().groupId;
+ return track.applyConstraints({ groupId: "INVALID" }).then(
+ t.step_func(() => {
+ assert_equals(track.getSettings().groupId, groupId);
+ }));
+ }));
+ }, 'applyConstraints accepts invalid ideal groupID, does not change setting');
+
+ promise_test(t => {
+ return navigator.mediaDevices.getUserMedia({ video: true })
+ .then(t.step_func(stream => {
+ var track = stream.getVideoTracks()[0];
+ var groupId = track.getSettings().groupId;
+ return navigator.mediaDevices.enumerateDevices().then(devices => {
+ var anotherDevice = devices.find(device => {
+ return device.kind == "videoinput" && device.groupId != groupId;
+ });
+ if (anotherDevice !== undefined) {
+ return track.applyConstraints(
+ { groupId: { exact: anotherDevice.groupId } }).then(
+ t.unreached_func(),
+ t.step_func(e => {
+ assert_equals(e.name, 'OverconstrainedError');
+ assert_equals(e.constraint, 'groupId');
+ }));
+ }
+ });
+ }));
+ }, 'applyConstraints rejects attempt to switch device using groupId');
+
+ promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+ const [track] = stream.getVideoTracks();
+ t.add_cleanup(() => track.stop());
+ try {
+ await track.applyConstraints({ resizeMode: { exact: "INVALID" } });
+ t.unreached_func('applyConstraints() must fail with invalid resizeMode')();
+ } catch (e) {
+ assert_equals(e.name, 'OverconstrainedError');
+ assert_equals(e.constraint, 'resizeMode');
+ }
+ }, 'applyConstraints rejects invalid resizeMode');
+
+ promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+ const [track] = stream.getVideoTracks();
+ t.add_cleanup(() => track.stop());
+ const resizeMode = track.getSettings().resizeMode;
+ await track.applyConstraints({ resizeMode: "INVALID" });
+ assert_equals(track.getSettings().resizeMode, resizeMode);
+ }, 'applyConstraints accepts invalid ideal resizeMode, does not change setting');
+</script>