180 lines
No EOL
8.1 KiB
HTML
180 lines
No EOL
8.1 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<title>getDisplayMedia CapturedurfaceResolution</title>
|
|
<meta name="timeout" content="long">
|
|
<button id="button">User gesture</button>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
|
|
<video id="display"></video>
|
|
<script>
|
|
'use strict';
|
|
|
|
const stopTracks = stream => stream.getTracks().forEach(track => track.stop());
|
|
|
|
async function getDisplayMedia(constraints) {
|
|
const p = new Promise(r => button.onclick = r);
|
|
await test_driver.click(button);
|
|
await p;
|
|
return navigator.mediaDevices.getDisplayMedia(constraints);
|
|
}
|
|
|
|
// On MacOS these tests need to be run with setTimeout for threading purposes.
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "monitor" });
|
|
await test_driver.set_permission({ name: 'window-management' }, 'granted');
|
|
const screenDetails = await window.getScreenDetails();
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
|
|
const onFrame = (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
assert_greater_than(capabilities.width.max, 0);
|
|
assert_greater_than(capabilities.height.max, 0);
|
|
assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "getDisplayMedia() and screenPixelRatio for captured surface type monitor");
|
|
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "window" });
|
|
await test_driver.set_permission({ name: 'window-management' }, 'granted');
|
|
const screenDetails = await window.getScreenDetails();
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
t.add_cleanup(() => stopTracks(stream));
|
|
|
|
const onFrame = (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
assert_greater_than(capabilities.width.max, 0);
|
|
assert_greater_than(capabilities.height.max, 0);
|
|
assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "getDisplayMedia() and screenPixelRatio for captured surface type window");
|
|
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "browser" });
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
t.add_cleanup(() => stopTracks(stream));
|
|
|
|
const onFrame = (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
assert_greater_than(capabilities.width.max, 0);
|
|
assert_greater_than(capabilities.height.max, 0);
|
|
assert_equals(window.devicePixelRatio, settings.screenPixelRatio);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "getDisplayMedia() and screenPixelRatio for captured surface type browser");
|
|
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "monitor" });
|
|
await test_driver.set_permission({ name: 'window-management' }, 'granted');
|
|
const screenDetails = await window.getScreenDetails();
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
t.add_cleanup(() => stopTracks(stream));
|
|
|
|
const onFrame = async (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
let oldWidth = settings.width;
|
|
let oldHeight = settings.height;
|
|
let oldCapbilitiesWidth = capabilities.width.max;
|
|
let oldCapabilitiesHeight = capabilities.height.max;
|
|
assert_greater_than(settings.width, 0);
|
|
assert_greater_than(settings.height, 0);
|
|
|
|
await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
|
|
settings = track.getSettings();
|
|
assert_less_than_equal(settings.width, oldWidth);
|
|
assert_less_than_equal(settings.height, oldHeight);
|
|
assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
|
|
assert_equals(capabilities.width.max, oldCapbilitiesWidth);
|
|
assert_equals(capabilities.height.max, oldCapabilitiesHeight);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type monitor");
|
|
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "window" });
|
|
await test_driver.set_permission({ name: 'window-management' }, 'granted');
|
|
const screenDetails = await window.getScreenDetails();
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
t.add_cleanup(() => stopTracks(stream));
|
|
|
|
const onFrame = async (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
let oldWidth = settings.width;
|
|
let oldHeight = settings.height;
|
|
let oldCapbilitiesWidth = capabilities.width.max;
|
|
let oldCapabilitiesHeight = capabilities.height.max;
|
|
assert_greater_than(settings.width, 0);
|
|
assert_greater_than(settings.height, 0);
|
|
|
|
await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
|
|
settings = track.getSettings();
|
|
assert_less_than_equal(settings.width, oldWidth);
|
|
assert_less_than_equal(settings.height, oldHeight);
|
|
assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
|
|
assert_equals(capabilities.width.max, oldCapbilitiesWidth);
|
|
assert_equals(capabilities.height.max, oldCapabilitiesHeight);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type window");
|
|
|
|
promise_test(async t => {
|
|
var video = document.createElement("video");
|
|
const stream = await getDisplayMedia({ displaySurface: "browser" });
|
|
video.srcObject = stream;
|
|
await video.play();
|
|
t.add_cleanup(() => stopTracks(stream));
|
|
|
|
const onFrame = async (now, metadata) => {
|
|
const track = video.srcObject.getVideoTracks()[0];
|
|
assert_not_equals(video.srcObject, null);
|
|
let settings = track.getSettings();
|
|
let capabilities = track.getCapabilities();
|
|
let oldWidth = settings.width;
|
|
let oldHeight = settings.height;
|
|
let oldCapbilitiesWidth = capabilities.width.max;
|
|
let oldCapabilitiesHeight = capabilities.height.max;
|
|
assert_greater_than(settings.width, 0);
|
|
assert_greater_than(settings.height, 0);
|
|
|
|
await track.applyConstraints({ width: { max: oldWidth / 2 }, height: { max: oldHeight / 2 } });
|
|
settings = track.getSettings();
|
|
assert_less_than_equal(settings.width, oldWidth);
|
|
assert_less_than_equal(settings.height, oldHeight);
|
|
assert_equals(screenDetails.screens[0].devicePixelRatio, settings.screenPixelRatio);
|
|
assert_equals(capabilities.width.max, oldCapbilitiesWidth);
|
|
assert_equals(capabilities.height.max, oldCapabilitiesHeight);
|
|
};
|
|
setTimeout(() => { video.requestVideoFrameCallback(onFrame); }, 100);
|
|
}, "applyConstraints() should not change the capabilities resolution and screenPixelRatio of captured surface type browser");
|
|
|
|
|
|
</script> |