tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>