MediaStreamTrack-getCapabilities.https.html (6632B)
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 const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous']; 10 11 // This test verifies that MediaTrackCapabilities are returned upon 12 // MediaStreamTrack.getCapabilities(), with a mock Mojo service implementation. 13 // When PTZ permission is denied though, PTZ capabilities are not available. 14 15 function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) { 16 image_capture_test(async (t, imageCaptureTest) => { 17 const ptzPermission = hasPanTiltZoomPermissionGranted ? 'granted' : 'denied'; 18 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 19 ptzPermission); 20 21 let mockCapabilities = imageCaptureTest.mockImageCapture().state(); 22 23 // |stream| must be created _after_ |mock| is constructed to give the 24 // latter time to override the bindings. 25 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 26 assert_equals(stream.getAudioTracks().length, 0); 27 assert_equals(stream.getVideoTracks().length, 1); 28 29 let videoTrack = stream.getVideoTracks()[0]; 30 assert_equals(typeof videoTrack.getCapabilities, 'function'); 31 32 let capabilities = videoTrack.getCapabilities(); 33 assert_equals(typeof capabilities, 'object'); 34 35 assert_equals(capabilities.whiteBalanceMode.length, 36 mockCapabilities.supportedWhiteBalanceModes.length, 37 'whiteBalanceMode'); 38 for (i = 0; i < capabilities.whiteBalanceMode.length; ++i) { 39 assert_equals( 40 capabilities.whiteBalanceMode[i], 41 meteringModeNames[mockCapabilities 42 .supportedWhiteBalanceModes[i]], 43 'whiteBalanceMode'); 44 } 45 46 assert_equals(capabilities.exposureMode.length, 47 mockCapabilities.supportedExposureModes.length, 48 'exposureMode'); 49 for (i = 0; i < capabilities.exposureMode.length; ++i) { 50 assert_equals( 51 capabilities.exposureMode[i], 52 meteringModeNames[mockCapabilities.supportedExposureModes[i]], 53 'exposureMode'); 54 } 55 56 assert_equals(capabilities.focusMode.length, 57 mockCapabilities.supportedFocusModes.length, 58 'focusMode'); 59 for (i = 0; i < capabilities.focusMode.length; ++i) { 60 assert_equals( 61 capabilities.focusMode[i], 62 meteringModeNames[mockCapabilities.supportedFocusModes[i]], 63 'focusMode'); 64 } 65 66 assert_equals(capabilities.exposureCompensation.max, 67 mockCapabilities.exposureCompensation.max); 68 assert_equals(capabilities.exposureCompensation.min, 69 mockCapabilities.exposureCompensation.min); 70 assert_equals(capabilities.exposureCompensation.step, 71 mockCapabilities.exposureCompensation.step); 72 73 assert_equals(capabilities.exposureTime.max, 74 mockCapabilities.exposureTime.max); 75 assert_equals(capabilities.exposureTime.min, 76 mockCapabilities.exposureTime.min); 77 assert_equals(capabilities.exposureTime.step, 78 mockCapabilities.exposureTime.step); 79 80 assert_equals(capabilities.colorTemperature.max, 81 mockCapabilities.colorTemperature.max); 82 assert_equals(capabilities.colorTemperature.min, 83 mockCapabilities.colorTemperature.min); 84 assert_equals(capabilities.colorTemperature.step, 85 mockCapabilities.colorTemperature.step); 86 87 assert_equals(capabilities.iso.max, mockCapabilities.iso.max); 88 assert_equals(capabilities.iso.min, mockCapabilities.iso.min); 89 assert_equals(capabilities.iso.step, mockCapabilities.iso.step); 90 91 assert_equals(capabilities.brightness.max, 92 mockCapabilities.brightness.max); 93 assert_equals(capabilities.brightness.min, 94 mockCapabilities.brightness.min); 95 assert_equals(capabilities.brightness.step, 96 mockCapabilities.brightness.step); 97 98 assert_equals(capabilities.contrast.max, 99 mockCapabilities.contrast.max); 100 assert_equals(capabilities.contrast.min, 101 mockCapabilities.contrast.min); 102 assert_equals(capabilities.contrast.step, 103 mockCapabilities.contrast.step); 104 105 assert_equals(capabilities.saturation.max, 106 mockCapabilities.saturation.max); 107 assert_equals(capabilities.saturation.min, 108 mockCapabilities.saturation.min); 109 assert_equals(capabilities.saturation.step, 110 mockCapabilities.saturation.step); 111 112 assert_equals(capabilities.sharpness.max, 113 mockCapabilities.sharpness.max); 114 assert_equals(capabilities.sharpness.min, 115 mockCapabilities.sharpness.min); 116 assert_equals(capabilities.sharpness.step, 117 mockCapabilities.sharpness.step); 118 119 assert_equals(capabilities.focusDistance.max, 120 mockCapabilities.focusDistance.max); 121 assert_equals(capabilities.focusDistance.min, 122 mockCapabilities.focusDistance.min); 123 assert_equals(capabilities.focusDistance.step, 124 mockCapabilities.focusDistance.step); 125 126 if (ptzPermission === 'granted') { 127 assert_equals(capabilities.pan.max, mockCapabilities.pan.max); 128 assert_equals(capabilities.pan.min, mockCapabilities.pan.min); 129 assert_equals(capabilities.pan.step, mockCapabilities.pan.step); 130 131 assert_equals(capabilities.tilt.max, mockCapabilities.tilt.max); 132 assert_equals(capabilities.tilt.min, mockCapabilities.tilt.min); 133 assert_equals(capabilities.tilt.step, mockCapabilities.tilt.step); 134 135 assert_equals(capabilities.zoom.max, mockCapabilities.zoom.max); 136 assert_equals(capabilities.zoom.min, mockCapabilities.zoom.min); 137 assert_equals(capabilities.zoom.step, mockCapabilities.zoom.step); 138 } else if (ptzPermission === 'denied') { 139 assert_false('pan' in capabilities); 140 assert_false('tilt' in capabilities); 141 assert_false('zoom' in capabilities); 142 } 143 144 assert_equals(capabilities.torch, mockCapabilities.supportsTorch, 145 'torch'); 146 }); 147 } 148 149 generate_tests(makeImageCaptureTest, [ 150 [ 151 "exercises MediaStreamTrack.getCapabilities() with PTZ permission denied", 152 false, 153 ], 154 [ 155 "exercises MediaStreamTrack.getCapabilities() with PTZ permission granted", 156 true, 157 ], 158 ]); 159 </script>