haikuwebkit/LayoutTests/fast/mediastream/getDisplayMedia-max-constra...

32 lines
1.0 KiB
HTML
Raw Permalink Normal View History

getDisplayMedia is not respecting aspect ratio with max constraints https://bugs.webkit.org/show_bug.cgi?id=210858 Reviewed by Eric Carlson. Source/WebCore: Add computation of exact frame size to respect aspect ratio in DisplayCaptureSourceCocoa::updateFrameSize. Refactor code to have one source class DisplayCaptureSourceCocoa and specific capturer for screen and window. This simplifies code and allows reusing DisplayCaptureSourceCocoa with a mock capturer. Update mock code to use DisplayCaptureSourceCocoa. Tests: fast/mediastream/getDisplayMedia-max-constraints.html fast/mediastream/getDisplayMedia-max-constraints1.html fast/mediastream/getDisplayMedia-max-constraints2.html fast/mediastream/getDisplayMedia-max-constraints3.html * SourcesCocoa.txt: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp: (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices): (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices): (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID): (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID): * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp: (WebCore::DisplayCaptureSourceCocoa::create): (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa): (WebCore::DisplayCaptureSourceCocoa::capabilities): (WebCore::DisplayCaptureSourceCocoa::settings): (WebCore::DisplayCaptureSourceCocoa::startProducingData): (WebCore::DisplayCaptureSourceCocoa::stopProducingData): (WebCore::DisplayCaptureSourceCocoa::updateFrameSize): (WebCore::DisplayCaptureSourceCocoa::emitFrame): (WebCore::DisplayCaptureSourceCocoa::Capturer::setLogger): (WebCore::DisplayCaptureSourceCocoa::Capturer::logChannel const): * platform/mediastream/mac/DisplayCaptureSourceCocoa.h: * platform/mediastream/mac/MockRealtimeVideoSourceMac.h: * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSourceMac::createForMockDisplayCapturer): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: * platform/mediastream/mac/ScreenDisplayCapturerMac.h: Added. * platform/mediastream/mac/ScreenDisplayCapturerMac.mm: Added. (WebCore::ScreenDisplayCapturerMac::create): (WebCore::ScreenDisplayCapturerMac::ScreenDisplayCapturerMac): (WebCore::ScreenDisplayCapturerMac::~ScreenDisplayCapturerMac): (WebCore::ScreenDisplayCapturerMac::createDisplayStream): (WebCore::ScreenDisplayCapturerMac::start): (WebCore::ScreenDisplayCapturerMac::stop): (WebCore::ScreenDisplayCapturerMac::generateFrame): (WebCore::ScreenDisplayCapturerMac::startDisplayStream): (WebCore::ScreenDisplayCapturerMac::commitConfiguration): (WebCore::ScreenDisplayCapturerMac::displayWasReconfigured): (WebCore::ScreenDisplayCapturerMac::displayReconfigurationCallBack): (WebCore::ScreenDisplayCapturerMac::newFrame): (WebCore::ScreenDisplayCapturerMac::screenCaptureDeviceWithPersistentID): (WebCore::ScreenDisplayCapturerMac::screenCaptureDevices): * platform/mediastream/mac/WindowDisplayCapturerMac.h: Added. * platform/mediastream/mac/WindowDisplayCapturerMac.mm: ddedAdded. (WebCore::WindowDisplayCapturerMac::create): (WebCore::WindowDisplayCapturerMac::WindowDisplayCapturerMac): (WebCore::WindowDisplayCapturerMac::windowImage): (WebCore::WindowDisplayCapturerMac::generateFrame): (WebCore::WindowDisplayCapturerMac::windowCaptureDeviceWithPersistentID): (WebCore::WindowDisplayCapturerMac::windowCaptureDevices): * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockDisplayCapturer::MockDisplayCapturer): (WebCore::MockDisplayCapturer::start): (WebCore::MockDisplayCapturer::generateFrame): * platform/mock/MockRealtimeVideoSource.h: (isType): LayoutTests: * fast/mediastream/getDisplayMedia-max-constraints-expected.txt: Added. * fast/mediastream/getDisplayMedia-max-constraints.html: Added. * fast/mediastream/getDisplayMedia-max-constraints1-expected.txt: Added. * fast/mediastream/getDisplayMedia-max-constraints1.html: Added. * fast/mediastream/getDisplayMedia-max-constraints2-expected.txt: Added. * fast/mediastream/getDisplayMedia-max-constraints2.html: Added. * fast/mediastream/getDisplayMedia-max-constraints3-expected.txt: Added. * fast/mediastream/getDisplayMedia-max-constraints3.html: Added. * fast/mediastream/resources/getDisplayMedia-utils.js: Added. (async callGetDisplayMedia): (async waitForHeight): (async waitForWidth): * platform/ios/TestExpectations: Skip new tests as getDisplayMedia is not supported on iOS. Canonical link: https://commits.webkit.org/223788@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260561 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-23 08:59:31 +00:00
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>getDisplayMedia track support of max constraints</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/getDisplayMedia-utils.js"></script>
</head>
<body>
<script>
let defaultWidth;
let defaultHeight;
promise_test(async () => {
stream = await callGetDisplayMedia({ video: true });
let settings = stream.getVideoTracks()[0].getSettings();
defaultWidth = settings.width;
defaultHeight = settings.height;
}, "setup");
promise_test(async (test) => {
const stream = await callGetDisplayMedia({ video: { height: { max: 500000 }, width : { max : 500000 } } });
await waitForHeight(stream.getVideoTracks()[0], defaultHeight);
const settings = stream.getVideoTracks()[0].getSettings()
assert_equals(settings.width, defaultWidth);
}, "No effect of the max values if they are too big");
</script>
</body>
</html>