tor-browser

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

MediaStreamTrack-clone.https.html (15530B)


      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 we can set some nondefault constraints, then clone a
     10 // MediaStreamTrack and check that the cloned constraints are the same as the
     11 // original, with a mock Mojo service implementation.
     12 image_capture_test(async (t, imageCaptureTest) => {
     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                                      exposureTime         : 10000,
     25                                      colorTemperature     : 6000,
     26                                      iso                  : 120.0,
     27 
     28                                      brightness           : 3,
     29                                      contrast             : 4,
     30                                      saturation           : 5,
     31                                      sharpness            : 6,
     32                                      focusDistance        : 7,
     33 
     34                                      pan                  : 8,
     35                                      tilt                 : 9,
     36                                      zoom                 : 3.141592,
     37 
     38                                      torch                : true
     39                                    }]};
     40    for (const [key, value] of Object.entries(constraints.advanced[0])) {
     41      constraints[key] = {exact: value};
     42    }
     43 
     44    let stream = await navigator.mediaDevices.getUserMedia({video: true});
     45    let originalVideoTrack = stream.getVideoTracks()[0];
     46 
     47    await originalVideoTrack.applyConstraints(constraints);
     48 
     49    let appliedConstraints = originalVideoTrack.getConstraints();
     50 
     51    let clonedVideoTrack = originalVideoTrack.clone();
     52    let appliedClonedConstraints = clonedVideoTrack.getConstraints();
     53    assert_true('advanced' in appliedClonedConstraints);
     54    assert_equals(appliedClonedConstraints.advanced.length, 1);
     55    const appliedClonedAdvancedConstraints = appliedClonedConstraints.advanced[0];
     56 
     57    // Check that |appliedClonedConstraints| and |appliedConstraints| are equal.
     58    const appliedAdvancedConstraints = appliedConstraints.advanced[0];
     59    assert_equals(appliedAdvancedConstraints.length, appliedClonedAdvancedConstraints.length);
     60    Object.keys(appliedClonedAdvancedConstraints).forEach(key => {
     61      assert_not_equals(appliedClonedConstraints[key], undefined, 'key ' + key);
     62      assert_not_equals(appliedConstraints[key], undefined, 'key ' + key);
     63      assert_not_equals(appliedConstraints[key].exact, undefined, 'key ' + key);
     64      assert_not_equals(appliedAdvancedConstraints[key], undefined, 'key ' + key);
     65      if (key != 'pointsOfInterest') {
     66        assert_equals(appliedConstraints[key].exact, appliedClonedConstraints[key].exact, key);
     67        assert_equals(appliedAdvancedConstraints[key], appliedClonedAdvancedConstraints[key], key);
     68      } else {
     69        assert_point2d_array_approx_equals(appliedConstraints[key].exact,
     70                                           appliedClonedConstraints[key].exact, 0.01);
     71        assert_point2d_array_approx_equals(appliedAdvancedConstraints[key],
     72                                           appliedClonedAdvancedConstraints[key], 0.01);
     73      }
     74    });
     75 
     76    assert_equals(appliedAdvancedConstraints.whiteBalanceMode,
     77                  appliedClonedAdvancedConstraints.whiteBalanceMode,
     78                  'whiteBalanceMode');
     79    assert_equals(appliedAdvancedConstraints.exposureMode,
     80                  appliedClonedAdvancedConstraints.exposureMode,
     81                  'exposureMode');
     82    assert_equals(appliedAdvancedConstraints.focusMode,
     83                  appliedClonedAdvancedConstraints.focusMode,
     84                  'focusMode');
     85 
     86    assert_point2d_array_approx_equals(
     87        appliedAdvancedConstraints.pointsOfInterest,
     88        appliedClonedAdvancedConstraints.pointsOfInterest,
     89        0.01);
     90 
     91    assert_equals(appliedAdvancedConstraints.exposureCompensation,
     92                  appliedClonedAdvancedConstraints.exposureCompensation,
     93                  'exposureCompensation');
     94    assert_equals(appliedAdvancedConstraints.exposureTime,
     95                  appliedClonedAdvancedConstraints.exposureTime,
     96                  'exposureTime');
     97    assert_equals(appliedAdvancedConstraints.colorTemperature,
     98                  appliedClonedAdvancedConstraints.colorTemperature,
     99                  'colorTemperature');
    100    assert_equals(appliedAdvancedConstraints.iso,
    101                  appliedClonedAdvancedConstraints.iso,
    102                  'iso');
    103    assert_equals(appliedAdvancedConstraints.brightness,
    104                  appliedClonedAdvancedConstraints.brightness,
    105                  'brightness');
    106    assert_equals(appliedAdvancedConstraints.contrast,
    107                  appliedClonedAdvancedConstraints.contrast,
    108                  'constrast');
    109    assert_equals(appliedAdvancedConstraints.saturation,
    110                  appliedClonedAdvancedConstraints.saturation,
    111                  'saturation');
    112    assert_equals(appliedAdvancedConstraints.sharpness,
    113                  appliedClonedAdvancedConstraints.sharpness,
    114                  'sharpness');
    115    assert_equals(appliedAdvancedConstraints.focusDistance,
    116                  appliedClonedAdvancedConstraints.focusDistance,
    117                  'focusDistance');
    118 
    119    assert_equals(appliedAdvancedConstraints.pan,
    120                  appliedClonedAdvancedConstraints.pan,
    121                  'pan');
    122    assert_equals(appliedAdvancedConstraints.tilt,
    123                  appliedClonedAdvancedConstraints.tilt,
    124                  'tilt');
    125    assert_equals(appliedAdvancedConstraints.zoom,
    126                  appliedClonedAdvancedConstraints.zoom,
    127                  'zoom');
    128 
    129    assert_equals(appliedAdvancedConstraints.torch,
    130                  appliedClonedAdvancedConstraints.torch,
    131                  'torch');
    132 }, 'checks MediaStreamTrack.clone() gets same applied constraints');
    133 
    134 // This test verifies that MediaStreamTrack ImageCapture settings are copied
    135 // when cloning a MediaStreamTrack.
    136 image_capture_test(async (t, imageCaptureTest) => {
    137  await test_driver.set_permission({name: 'camera', panTiltZoom: true},
    138        'granted');
    139 
    140  let stream = await navigator.mediaDevices.getUserMedia({video: true});
    141  let originalVideoTrack = stream.getVideoTracks()[0];
    142  let clonedVideoTrack = originalVideoTrack.clone();
    143 
    144  let settings = originalVideoTrack.getSettings();
    145  let clonedSettings = clonedVideoTrack.getSettings();
    146 
    147  assert_equals(settings.whiteBalanceMode,
    148                clonedSettings.whiteBalanceMode,
    149                'whiteBalanceMode');
    150  assert_equals(settings.exposureMode,
    151                clonedSettings.exposureMode,
    152                'exposureMode;');
    153  assert_equals(settings.focusMode,
    154                clonedSettings.focusMode,
    155                'focusMode');
    156 
    157  assert_point2d_array_approx_equals(
    158      settings.pointsOfInterest,
    159      clonedSettings.pointsOfInterest,
    160      0.01);
    161 
    162  assert_equals(settings.exposureCompensation,
    163                clonedSettings.exposureCompensation,
    164                'exposureCompensation');
    165  assert_equals(settings.exposureTime,
    166                clonedSettings.exposureTime,
    167                'exposureTime');
    168  assert_equals(settings.colorTemperature,
    169                clonedSettings.colorTemperature,
    170                'colorTemperature');
    171  assert_equals(settings.iso,
    172                clonedSettings.iso,
    173                'iso');
    174 
    175  assert_equals(settings.brightness,
    176                clonedSettings.brightness,
    177                'brightness');
    178  assert_equals(settings.contrast,
    179                clonedSettings.contrast,
    180                'contrast');
    181  assert_equals(settings.saturation,
    182                clonedSettings.saturation,
    183                'saturation');
    184  assert_equals(settings.sharpness,
    185                clonedSettings.sharpness,
    186                'sharpness');
    187 
    188  assert_equals(settings.focusDistance,
    189                clonedSettings.focusDistance,
    190                'focusDistance');
    191 
    192  assert_equals(settings.pan,
    193                clonedSettings.pan,
    194                'pan');
    195  assert_equals(settings.tilt,
    196                clonedSettings.tilt,
    197                'tilt');
    198  assert_equals(settings.zoom,
    199                clonedSettings.zoom,
    200                'zoom');
    201 
    202  assert_equals(settings.torch,
    203                clonedSettings.torch,
    204                'torch');
    205 }, 'checks MediaStreamTrack.clone() gets same settings');
    206 
    207 // This test verifies that MediaStreamTrack ImageCapture capabilities are copied
    208 // when cloning a MediaStreamTrack.
    209 image_capture_test(async (t, imageCaptureTest) => {
    210  await test_driver.set_permission({name: 'camera', panTiltZoom: true},
    211      'granted');
    212 
    213  let stream = await navigator.mediaDevices.getUserMedia({video: true});
    214  let originalVideoTrack = stream.getVideoTracks()[0];
    215  let clonedVideoTrack = originalVideoTrack.clone();
    216 
    217  let capabilities = originalVideoTrack.getCapabilities();
    218  let clonedCapabilities = clonedVideoTrack.getCapabilities();
    219 
    220  assert_equals(capabilities.whiteBalanceMode.length,
    221                clonedCapabilities.whiteBalanceMode.length,
    222                'whiteBalanceMode length');
    223  for (i = 0; i < capabilities.whiteBalanceMode.length; ++i) {
    224    assert_equals(capabilities.whiteBalanceMode[i],
    225                  clonedCapabilities.whiteBalanceMode[i],
    226                  'whiteBalanceMode');
    227  }
    228 
    229  assert_equals(capabilities.exposureMode.length,
    230                clonedCapabilities.exposureMode.length,
    231                'exposureMode length');
    232  for (i = 0; i < capabilities.exposureMode.length; ++i) {
    233    assert_equals(capabilities.exposureMode[i],
    234                  clonedCapabilities.exposureMode[i],
    235                  'exposureMode');
    236  }
    237 
    238  assert_equals(capabilities.focusMode.length,
    239                clonedCapabilities.focusMode.length,
    240                'focusMode length');
    241  for (i = 0; i < capabilities.focusMode.length; ++i) {
    242    assert_equals(capabilities.focusMode[i],
    243                  clonedCapabilities.focusMode[i],
    244                  'focusMode');
    245  }
    246 
    247  assert_equals(capabilities.exposureCompensation.max,
    248                clonedCapabilities.exposureCompensation.max,
    249                'exposureCompensation max');
    250  assert_equals(capabilities.exposureCompensation.min,
    251                clonedCapabilities.exposureCompensation.min,
    252                'exposureCompensation min');
    253  assert_equals(capabilities.exposureCompensation.step,
    254                clonedCapabilities.exposureCompensation.step,
    255                'exposureCompensation step');
    256 
    257  assert_equals(capabilities.exposureTime.max,
    258                clonedCapabilities.exposureTime.max,
    259                'exposureTime max');
    260  assert_equals(capabilities.exposureTime.min,
    261                clonedCapabilities.exposureTime.min,
    262                'exposureTime min');
    263  assert_equals(capabilities.exposureTime.step,
    264                clonedCapabilities.exposureTime.step,
    265                'exposureTime step');
    266 
    267  assert_equals(capabilities.colorTemperature.max,
    268                clonedCapabilities.colorTemperature.max,
    269                'colorTemperature max');
    270  assert_equals(capabilities.colorTemperature.min,
    271                clonedCapabilities.colorTemperature.min,
    272                'colorTemperature min');
    273  assert_equals(capabilities.colorTemperature.step,
    274                clonedCapabilities.colorTemperature.step,
    275                'colorTemperature step');
    276 
    277  assert_equals(capabilities.iso.max,
    278                clonedCapabilities.iso.max,
    279                'iso max');
    280  assert_equals(capabilities.iso.min,
    281                clonedCapabilities.iso.min,
    282                'iso min');
    283  assert_equals(capabilities.iso.step,
    284                clonedCapabilities.iso.step,
    285                'iso step');
    286 
    287  assert_equals(capabilities.brightness.max,
    288                clonedCapabilities.brightness.max,
    289                'brightness max');
    290  assert_equals(capabilities.brightness.min,
    291                clonedCapabilities.brightness.min,
    292                'brightness min');
    293  assert_equals(capabilities.brightness.step,
    294                clonedCapabilities.brightness.step,
    295                'brightness step');
    296 
    297  assert_equals(capabilities.contrast.max,
    298                clonedCapabilities.contrast.max,
    299                'contrast max');
    300  assert_equals(capabilities.contrast.min,
    301                clonedCapabilities.contrast.min,
    302                'contrast min');
    303  assert_equals(capabilities.contrast.step,
    304                clonedCapabilities.contrast.step,
    305                'contrast step');
    306 
    307  assert_equals(capabilities.saturation.max,
    308                clonedCapabilities.saturation.max,
    309                'saturation max');
    310  assert_equals(capabilities.saturation.min,
    311                clonedCapabilities.saturation.min,
    312                'saturation min');
    313  assert_equals(capabilities.saturation.step,
    314                clonedCapabilities.saturation.step,
    315                'saturation step');
    316 
    317  assert_equals(capabilities.sharpness.max,
    318                clonedCapabilities.sharpness.max,
    319                'sharpness max');
    320  assert_equals(capabilities.sharpness.min,
    321                clonedCapabilities.sharpness.min,
    322                'sharpness min');
    323  assert_equals(capabilities.sharpness.step,
    324                clonedCapabilities.sharpness.step,
    325                'sharpness step');
    326 
    327  assert_equals(capabilities.focusDistance.max,
    328                clonedCapabilities.focusDistance.max,
    329                'focusDistance max');
    330  assert_equals(capabilities.focusDistance.min,
    331                clonedCapabilities.focusDistance.min,
    332                'focusDistance min');
    333  assert_equals(capabilities.focusDistance.step,
    334                clonedCapabilities.focusDistance.step,
    335                'focusDistance step');
    336 
    337  assert_equals(capabilities.pan.max,
    338                clonedCapabilities.pan.max,
    339                'pan max');
    340  assert_equals(capabilities.pan.min,
    341                clonedCapabilities.pan.min,
    342                'pan min');
    343  assert_equals(capabilities.pan.step,
    344                clonedCapabilities.pan.step,
    345                'pan step');
    346 
    347  assert_equals(capabilities.tilt.max,
    348                clonedCapabilities.tilt.max,
    349                'tilt max');
    350  assert_equals(capabilities.tilt.min,
    351                clonedCapabilities.tilt.min,
    352                'tilt min');
    353  assert_equals(capabilities.tilt.step,
    354                clonedCapabilities.tilt.step,
    355                'tilt step');
    356 
    357  assert_equals(capabilities.zoom.max,
    358                clonedCapabilities.zoom.max,
    359                'zoom max');
    360  assert_equals(capabilities.zoom.min,
    361                clonedCapabilities.zoom.min,
    362                'zoom min');
    363  assert_equals(capabilities.zoom.step,
    364                clonedCapabilities.zoom.step,
    365                'zoom step');
    366 
    367  assert_equals(capabilities.torch,
    368                clonedCapabilities.torch,
    369                'torch');
    370 }, 'checks MediaStreamTrack.clone() gets same capabilities');
    371 </script>