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>