MediaStreamTrack-getSettings.https.html (3595B)
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 the settings defined in the mock Mojo service 12 // implementation are the same as those returned by the corresponding 13 // MediaStreamTrack.getSettings(), except for PTZ settings when PTZ 14 // permission is denied. 15 16 function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) { 17 image_capture_test(async (t, imageCaptureTest) => { 18 const ptzPermission = hasPanTiltZoomPermissionGranted ? 'granted' : 'denied'; 19 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 20 ptzPermission); 21 22 let mockSettings = imageCaptureTest.mockImageCapture().state(); 23 24 // |stream| must be created _after_ |mock| is constructed to give the 25 // latter time to override the bindings. 26 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 27 let videoTrack = stream.getVideoTracks()[0]; 28 29 // |videoTrack|s settings retrieval, just like the actual capture, is a 30 // process kicked right after creation, we introduce a small delay to 31 // allow for those to be collected. 32 await new Promise(resolve => step_timeout(resolve, 100)); 33 34 let settings = videoTrack.getSettings(); 35 assert_equals(typeof settings, 'object'); 36 37 assert_equals(settings.whiteBalanceMode, 38 meteringModeNames[mockSettings.currentWhiteBalanceMode], 39 'whiteBalanceMode'); 40 assert_equals(settings.exposureMode, 41 meteringModeNames[mockSettings.currentExposureMode], 42 'exposureMode;'); 43 assert_equals(settings.focusMode, 44 meteringModeNames[mockSettings.currentFocusMode], 45 'focusMode'); 46 47 assert_point2d_array_approx_equals( 48 settings.pointsOfInterest, mockSettings.pointsOfInterest, 0.01); 49 50 assert_equals(settings.exposureCompensation, 51 mockSettings.exposureCompensation.current); 52 assert_equals(settings.exposureTime, 53 mockSettings.exposureTime.current); 54 assert_equals(settings.colorTemperature, 55 mockSettings.colorTemperature.current); 56 assert_equals(settings.iso, mockSettings.iso.current); 57 58 assert_equals(settings.brightness, mockSettings.brightness.current); 59 assert_equals(settings.contrast, mockSettings.contrast.current); 60 assert_equals(settings.saturation, mockSettings.saturation.current); 61 assert_equals(settings.sharpness, mockSettings.sharpness.current); 62 63 assert_equals(settings.focusDistance, mockSettings.focusDistance.current); 64 65 if (ptzPermission === 'granted') { 66 assert_equals(settings.pan, mockSettings.pan.current); 67 assert_equals(settings.tilt, mockSettings.tilt.current); 68 assert_equals(settings.zoom, mockSettings.zoom.current); 69 } else if (ptzPermission === 'denied') { 70 assert_false('pan' in settings); 71 assert_false('tilt' in settings); 72 assert_false('zoom' in settings); 73 } 74 75 assert_equals(settings.torch, mockSettings.torch, 'torch'); 76 }); 77 } 78 79 generate_tests(makeImageCaptureTest, [ 80 [ 81 "exercises MediaStreamTrack.getSettings() with PTZ permission denied", 82 false, 83 ], 84 [ 85 "exercises MediaStreamTrack.getSettings() with PTZ permission granted", 86 true, 87 ], 88 ]); 89 </script>