| <!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> |
| 'use strict' |
| |
| // https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-applyconstraints |
| |
| promise_test(t => { |
| 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(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> |