MediaStreamTrack-applyConstraints-getSettings.https.html (6521B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-vendor.js"></script> 6 <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> 7 <script> 8 9 // This test verifies that the |constraints| configured in the mock Mojo 10 // service implementation, are returned by MediaStreamTrack.getSettings(). 11 12 image_capture_test(async t => { 13 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 14 'granted'); 15 16 const constraints = { advanced : [{ whiteBalanceMode : 'single-shot', 17 exposureMode : 'manual', 18 focusMode : 'single-shot', 19 20 pointsOfInterest : [{x : 0.1, y : 0.2}, 21 {x : 0.3, y : 0.4}], 22 23 exposureCompensation : 133.77, 24 // in nano-seconds. 25 exposureTime : 10000, 26 colorTemperature : 6000, 27 iso : 120.0, 28 29 brightness : 3, 30 contrast : 4, 31 saturation : 5, 32 sharpness : 6, 33 focusDistance : 7, 34 35 pan : 8, 36 tilt : 9, 37 zoom : 3.141592, 38 39 torch : true 40 }]}; 41 42 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 43 let videoTrack = stream.getVideoTracks()[0]; 44 45 try { 46 await videoTrack.applyConstraints(constraints); 47 } catch (error) { 48 assert_unreached('Error applying constraints: ' + error.message); 49 } 50 51 let settings = videoTrack.getSettings(); 52 assert_equals(typeof settings, 'object'); 53 54 assert_equals(constraints.advanced[0].whiteBalanceMode, 55 settings.whiteBalanceMode, 'whiteBalanceMode'); 56 assert_equals(constraints.advanced[0].exposureMode, settings.exposureMode, 57 'exposureMode'); 58 assert_equals(constraints.advanced[0].focusMode, settings.focusMode, 59 'focusMode'); 60 61 assert_point2d_array_approx_equals( 62 constraints.advanced[0].pointsOfInterest, settings.pointsOfInterest, 63 0.01); 64 65 assert_equals(constraints.advanced[0].exposureCompensation, 66 settings.exposureCompensation, 'exposureCompensation'); 67 assert_equals(constraints.advanced[0].exposureTime, 68 settings.exposureTime, 'exposureTime'); 69 assert_equals(constraints.advanced[0].colorTemperature, 70 settings.colorTemperature, 'colorTemperature'); 71 assert_equals(constraints.advanced[0].iso, settings.iso, 'iso'); 72 73 assert_equals(constraints.advanced[0].brightness, settings.brightness, 74 'brightness'); 75 assert_equals(constraints.advanced[0].contrast, settings.contrast, 76 'contrast'); 77 assert_equals(constraints.advanced[0].saturation, settings.saturation, 78 'saturation'); 79 assert_equals(constraints.advanced[0].sharpness, settings.sharpness, 80 'sharpness'); 81 82 assert_equals(constraints.advanced[0].focusDistance, settings.focusDistance, 83 'focusDistance'); 84 85 assert_equals(constraints.advanced[0].pan, settings.pan, 'pan'); 86 assert_equals(constraints.advanced[0].tilt, settings.tilt, 'tilt'); 87 assert_equals(constraints.advanced[0].zoom, settings.zoom, 'zoom'); 88 89 assert_equals(constraints.advanced[0].torch, settings.torch, 'torch'); 90 91 }, 'exercises an applyConstraints() - getSettings() cycle with PTZ permission granted'); 92 93 94 // This test verifies that the PTZ |constraints| configured in the mock Mojo 95 // service implementation can't be applied if PTZ permission is denied. 96 97 image_capture_test(async t => { 98 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 99 'denied'); 100 101 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 102 let videoTrack = stream.getVideoTracks()[0]; 103 104 const constraints = [{ pan: { exact: 8 } }, { tilt: { exact: 9 } }]; 105 await Promise.all(constraints.map(async constraint => { 106 try { 107 await videoTrack.applyConstraints(constraint); 108 } catch (error) { 109 assert_equals(error.name, 'OverconstrainedError'); 110 assert_equals(error.constraint, Object.keys(constraint)[0]); 111 return; 112 } 113 assert_unreached( 114 "applyConstraints should throw an OverconstrainedError for " + 115 JSON.stringify(constraint)); 116 })); 117 118 }, 'exercises an applyConstraints() with required constraints with PTZ permission denied'); 119 120 image_capture_test(async t => { 121 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 122 'denied'); 123 124 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 125 let videoTrack = stream.getVideoTracks()[0]; 126 127 const constraints = [{ pan: { ideal: 8 } }, { tilt: { ideal: 9 } }]; 128 await Promise.all(constraints.map(async constraint => { 129 try { 130 await videoTrack.applyConstraints(constraint); 131 } catch (error) { 132 assert_unreached( 133 `applyConstraints should not throw an ${error.name} for ` + 134 JSON.stringify(constraint)); 135 } 136 })); 137 138 }, 'exercises an applyConstraints() with ideal constraints with PTZ permission denied'); 139 140 image_capture_test(async t => { 141 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 142 'denied'); 143 144 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 145 let videoTrack = stream.getVideoTracks()[0]; 146 147 const advanced_constraints = [{ pan: 8 }, { tilt: 9 }]; 148 await Promise.all(advanced_constraints.map(async advanced_constraint => { 149 const constraint = { advanced: [advanced_constraint] }; 150 try { 151 await videoTrack.applyConstraints(constraint); 152 } catch (error) { 153 assert_unreached( 154 `applyConstraints should not throw an ${error.name} for ` + 155 JSON.stringify(constraint)); 156 } 157 })); 158 159 }, 'exercises an applyConstraints() with advances constraints with PTZ permission denied'); 160 161 </script>