tor-browser

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

getdisplaymedia-captured-surface-resolution.https.html (8343B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>getDisplayMedia CapturedurfaceResolution</title>
      4 <meta name="timeout" content="long">
      5 <button id="button">User gesture</button>
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/resources/testdriver.js"></script>
      9 <script src="/resources/testdriver-vendor.js"></script>
     10 <script src="/webrtc/RTCPeerConnection-helper.js"></script>
     11 <video id="display"></video>
     12 <script>
     13  'use strict';
     14 
     15  const stopTracks = stream => stream.getTracks().forEach(track => track.stop());
     16 
     17  async function getDisplayMedia(constraints) {
     18    const p = new Promise(r => button.onclick = r);
     19    await test_driver.click(button);
     20    await p;
     21    return navigator.mediaDevices.getDisplayMedia(constraints);
     22  }
     23 
     24  // On MacOS these tests need to be run with setTimeout for threading purposes.
     25  promise_test(async t => {
     26    var video = document.createElement("video");
     27    const stream = await getDisplayMedia({ displaySurface: "monitor" });
     28    await test_driver.set_permission({ name: 'window-management' }, 'granted');
     29    const screenDetails = await window.getScreenDetails();
     30    video.srcObject = stream;
     31    await video.play();
     32 
     33    const onFrame = (now, metadata) => {
     34      const track = video.srcObject.getVideoTracks()[0];
     35      assert_not_equals(video.srcObject, null);
     36      let settings = track.getSettings();
     37      let capabilities = track.getCapabilities();
     38      assert_greater_than(capabilities.width.max, 0);
     39      assert_greater_than(capabilities.height.max, 0);
     40      assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
     41    };
     42    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
     43  }, "getDisplayMedia() and screenPixelRatio for captured surface type monitor");
     44 
     45  promise_test(async t => {
     46    var video = document.createElement("video");
     47    const stream = await getDisplayMedia({ displaySurface: "window" });
     48    await test_driver.set_permission({ name: 'window-management' }, 'granted');
     49    const screenDetails = await window.getScreenDetails();
     50    video.srcObject = stream;
     51    await video.play();
     52    t.add_cleanup(() => stopTracks(stream));
     53 
     54    const onFrame = (now, metadata) => {
     55      const track = video.srcObject.getVideoTracks()[0];
     56      assert_not_equals(video.srcObject, null);
     57      let settings = track.getSettings();
     58      let capabilities = track.getCapabilities();
     59      assert_greater_than(capabilities.width.max, 0);
     60      assert_greater_than(capabilities.height.max, 0);
     61      assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
     62    };
     63    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
     64  }, "getDisplayMedia() and screenPixelRatio for captured surface type window");
     65 
     66  promise_test(async t => {
     67    var video = document.createElement("video");
     68    const stream = await getDisplayMedia({ displaySurface: "browser" });
     69    video.srcObject = stream;
     70    await video.play();
     71    t.add_cleanup(() => stopTracks(stream));
     72 
     73    const onFrame = (now, metadata) => {
     74      const track = video.srcObject.getVideoTracks()[0];
     75      assert_not_equals(video.srcObject, null);
     76      let settings = track.getSettings();
     77      let capabilities = track.getCapabilities();
     78      assert_greater_than(capabilities.width.max, 0);
     79      assert_greater_than(capabilities.height.max, 0);
     80      assert_equals(window.devicePixelRatio, settings.screenPixelRatio);
     81    };
     82    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
     83  }, "getDisplayMedia() and screenPixelRatio for captured surface type browser");
     84 
     85  promise_test(async t => {
     86    var video = document.createElement("video");
     87    const stream = await getDisplayMedia({ displaySurface: "monitor" });
     88    await test_driver.set_permission({ name: 'window-management' }, 'granted');
     89    const screenDetails = await window.getScreenDetails();
     90    video.srcObject = stream;
     91    await video.play();
     92    t.add_cleanup(() => stopTracks(stream));
     93 
     94    const onFrame = async (now, metadata) => {
     95      const track = video.srcObject.getVideoTracks()[0];
     96      assert_not_equals(video.srcObject, null);
     97      let settings = track.getSettings();
     98      let capabilities = track.getCapabilities();
     99      let oldWidth = settings.width;
    100      let oldHeight = settings.height;
    101      let oldCapbilitiesWidth = capabilities.width.max;
    102      let oldCapabilitiesHeight = capabilities.height.max;
    103      assert_greater_than(settings.width, 0);
    104      assert_greater_than(settings.height, 0);
    105 
    106      await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
    107      settings = track.getSettings();
    108      assert_less_than_equal(settings.width, oldWidth);
    109      assert_less_than_equal(settings.height, oldHeight);
    110      assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
    111      assert_equals(capabilities.width.max, oldCapbilitiesWidth);
    112      assert_equals(capabilities.height.max, oldCapabilitiesHeight);
    113    };
    114    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
    115  }, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type monitor");
    116 
    117  promise_test(async t => {
    118    var video = document.createElement("video");
    119    const stream = await getDisplayMedia({ displaySurface: "window" });
    120    await test_driver.set_permission({ name: 'window-management' }, 'granted');
    121    const screenDetails = await window.getScreenDetails();
    122    video.srcObject = stream;
    123    await video.play();
    124    t.add_cleanup(() => stopTracks(stream));
    125 
    126    const onFrame = async (now, metadata) => {
    127      const track = video.srcObject.getVideoTracks()[0];
    128      assert_not_equals(video.srcObject, null);
    129      let settings = track.getSettings();
    130      let capabilities = track.getCapabilities();
    131      let oldWidth = settings.width;
    132      let oldHeight = settings.height;
    133      let oldCapbilitiesWidth = capabilities.width.max;
    134      let oldCapabilitiesHeight = capabilities.height.max;
    135      assert_greater_than(settings.width, 0);
    136      assert_greater_than(settings.height, 0);
    137 
    138      await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
    139      settings = track.getSettings();
    140      assert_less_than_equal(settings.width, oldWidth);
    141      assert_less_than_equal(settings.height, oldHeight);
    142      assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
    143      assert_equals(capabilities.width.max, oldCapbilitiesWidth);
    144      assert_equals(capabilities.height.max, oldCapabilitiesHeight);
    145    };
    146    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
    147  }, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type window");
    148 
    149  promise_test(async t => {
    150    var video = document.createElement("video");
    151    const stream = await getDisplayMedia({ displaySurface: "browser" });
    152    video.srcObject = stream;
    153    await video.play();
    154    t.add_cleanup(() => stopTracks(stream));
    155 
    156    const onFrame = async (now, metadata) => {
    157      const track = video.srcObject.getVideoTracks()[0];
    158      assert_not_equals(video.srcObject, null);
    159      let settings = track.getSettings();
    160      let capabilities = track.getCapabilities();
    161      let oldWidth = settings.width;
    162      let oldHeight = settings.height;
    163      let oldCapbilitiesWidth = capabilities.width.max;
    164      let oldCapabilitiesHeight = capabilities.height.max;
    165      assert_greater_than(settings.width, 0);
    166      assert_greater_than(settings.height, 0);
    167 
    168      await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
    169      settings = track.getSettings();
    170      assert_less_than_equal(settings.width, oldWidth);
    171      assert_less_than_equal(settings.height, oldHeight);
    172      assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
    173      assert_equals(capabilities.width.max, oldCapbilitiesWidth);
    174      assert_equals(capabilities.height.max, oldCapabilitiesHeight);
    175    };
    176    setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
    177  }, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type browser");
    178 
    179 
    180 </script>