diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2018-08-07 09:15:53 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2018-08-08 09:10:39 +0000 |
commit | 410c22978c2add5f9427af08d97356d6e959e412 (patch) | |
tree | fac5631276d1d1362e663a4a177debf99deaf755 /tests | |
parent | 0c01be81920123a3c3456b727efcb2e9593c65df (diff) |
MediaCaptureDevicesDispatcher: Disable getDefaultScreenId on X11
Not needed and triggers race condition.
Task-number: QTBUG-69007
Change-Id: Id57ba527387e5dbe44a8dd6c5a49e7278403ce64
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 47a94374a..7bdad1bda 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -125,6 +125,8 @@ private Q_SLOTS: void getUserMediaRequest(); void getUserMediaRequestDesktopAudio(); void getUserMediaRequestSettingDisabled(); + void getUserMediaRequestDesktopVideoManyPages(); + void getUserMediaRequestDesktopVideoManyRequests(); void savePage(); void crashTests_LazyInitializationOfMainFrame(); @@ -2447,6 +2449,44 @@ void tst_QWebEnginePage::getUserMediaRequestSettingDisabled() QTRY_VERIFY(!page.jsPromiseFulfilled() && page.jsPromiseRejected()); } +// Try to trigger any possible race condition between the UI thread (permission +// management) and the audio/device thread (desktop capture initialization). +void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages() +{ + const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}"); + const QWebEnginePage::Feature feature = QWebEnginePage::DesktopVideoCapture; + std::vector<GetUserMediaTestPage> pages(10); + for (GetUserMediaTestPage &page : pages) + QTRY_VERIFY_WITH_TIMEOUT(page.loadSucceeded(), 20000); + for (GetUserMediaTestPage &page : pages) + page.settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true); + for (GetUserMediaTestPage &page : pages) + page.jsGetUserMedia(constraints); + for (GetUserMediaTestPage &page : pages) + QTRY_VERIFY(page.gotFeatureRequest(feature)); + for (GetUserMediaTestPage &page : pages) + page.acceptPendingRequest(); + for (GetUserMediaTestPage &page : pages) + QTRY_VERIFY(page.jsPromiseFulfilled() || page.jsPromiseRejected()); +} + +// Try to trigger any possible race condition between the UI or audio/device +// threads and the desktop capture thread, where the capture actually happens. +void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyRequests() +{ + const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}"); + const QWebEnginePage::Feature feature = QWebEnginePage::DesktopVideoCapture; + GetUserMediaTestPage page; + QTRY_VERIFY_WITH_TIMEOUT(page.loadSucceeded(), 20000); + page.settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true); + for (int i = 0; i != 100; ++i) { + page.jsGetUserMedia(constraints); + QTRY_VERIFY(page.gotFeatureRequest(feature)); + page.acceptPendingRequest(); + QTRY_VERIFY(page.jsPromiseFulfilled() || page.jsPromiseRejected()); + } +} + void tst_QWebEnginePage::savePage() { QWebEngineView view; |