summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@qt.io>2018-08-20 16:26:03 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-21 15:18:19 +0200
commitbe18c1dcfa68328acdf11e0a534749d9a5d75f8b (patch)
tree53a7b347d2771f4502338ac973a80a37edacdee7 /tests
parentb74e93a9b07243da4f3d2784cde49916de455364 (diff)
parente56dd7e37ea96c4ba1354e319bdaa9d01c401747 (diff)
Merge remote-tracking branch 'origin/5.11' into 5.12
Conflicts: .qmake.conf configure.json examples/webenginewidgets/markdowneditor/resources/3rdparty/marked.js examples/webenginewidgets/markdowneditor/resources/3rdparty/qt_attribution.json examples/webenginewidgets/markdowneditor/resources/markdowneditor.qrc mkspecs/features/platform.prf src/3rdparty src/core/media_capture_devices_dispatcher.cpp src/core/net/url_request_context_getter_qt.cpp src/core/net/url_request_context_getter_qt.h src/core/web_contents_adapter.cpp Change-Id: I467133ba455b1f85f6bb61793794c31cb1094541
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/faviconmanager/tst_faviconmanager.cpp7
-rw-r--r--tests/auto/widgets/qwebenginepage/BLACKLIST2
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp41
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp40
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp2
5 files changed, 88 insertions, 4 deletions
diff --git a/tests/auto/widgets/faviconmanager/tst_faviconmanager.cpp b/tests/auto/widgets/faviconmanager/tst_faviconmanager.cpp
index 14786e5b0..606d05d9e 100644
--- a/tests/auto/widgets/faviconmanager/tst_faviconmanager.cpp
+++ b/tests/auto/widgets/faviconmanager/tst_faviconmanager.cpp
@@ -30,6 +30,7 @@
#include "../util.h"
#include <qwebenginepage.h>
+#include <qwebengineprofile.h>
#include <qwebenginesettings.h>
#include <qwebengineview.h>
@@ -65,13 +66,16 @@ private Q_SLOTS:
private:
QWebEngineView *m_view;
QWebEnginePage *m_page;
+ QWebEngineProfile *m_profile;
};
void tst_FaviconManager::init()
{
+ m_profile = new QWebEngineProfile(this);
m_view = new QWebEngineView();
- m_page = m_view->page();
+ m_page = new QWebEnginePage(m_profile, m_view);
+ m_view->setPage(m_page);
}
@@ -87,6 +91,7 @@ void tst_FaviconManager::cleanupTestCase()
void tst_FaviconManager::cleanup()
{
delete m_view;
+ delete m_profile;
}
void tst_FaviconManager::faviconLoad()
diff --git a/tests/auto/widgets/qwebenginepage/BLACKLIST b/tests/auto/widgets/qwebenginepage/BLACKLIST
index 50f275eb4..9c7572b40 100644
--- a/tests/auto/widgets/qwebenginepage/BLACKLIST
+++ b/tests/auto/widgets/qwebenginepage/BLACKLIST
@@ -9,5 +9,3 @@ osx
[mouseMovementProperties]
windows
-osx-10.11
-osx-10.12
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 95a46fbc2..8b36d5a6f 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -128,6 +128,8 @@ private Q_SLOTS:
void getUserMediaRequest();
void getUserMediaRequestDesktopAudio();
void getUserMediaRequestSettingDisabled();
+ void getUserMediaRequestDesktopVideoManyPages();
+ void getUserMediaRequestDesktopVideoManyRequests();
void savePage();
void crashTests_LazyInitializationOfMainFrame();
@@ -2470,6 +2472,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;
@@ -4078,6 +4118,7 @@ void tst_QWebEnginePage::mouseMovementProperties()
ConsolePage page;
view.setPage(&page);
view.resize(640, 480);
+ QTest::mouseMove(&view, QPoint(10, 10));
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index a04a1ac6f..1fe0f0304 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -56,6 +56,7 @@ private Q_SLOTS:
void httpAcceptLanguage();
void downloadItem();
void changePersistentPath();
+ void initiator();
};
void tst_QWebEngineProfile::init()
@@ -528,5 +529,44 @@ void tst_QWebEngineProfile::changePersistentPath()
QVERIFY(newPath.endsWith(QStringLiteral("Test2")));
}
+class InitiatorSpy : public QWebEngineUrlSchemeHandler
+{
+public:
+ QUrl initiator;
+ void requestStarted(QWebEngineUrlRequestJob *job) override
+ {
+ initiator = job->initiator();
+ job->fail(QWebEngineUrlRequestJob::RequestDenied);
+ }
+};
+
+void tst_QWebEngineProfile::initiator()
+{
+ InitiatorSpy handler;
+ QWebEngineProfile profile;
+ profile.installUrlSchemeHandler("foo", &handler);
+ QWebEnginePage page(&profile);
+ QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool)));
+
+ // about:blank has a unique origin, so initiator should be QUrl("null")
+ evaluateJavaScriptSync(&page, "window.location = 'foo:bar'");
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl("null"));
+
+ page.setHtml("", QUrl("http://test:123/foo%20bar"));
+ QVERIFY(loadFinishedSpy.wait());
+
+ // baseUrl determines the origin, so QUrl("http://test:123")
+ evaluateJavaScriptSync(&page, "window.location = 'foo:bar'");
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl("http://test:123"));
+
+ // Directly calling load/setUrl should have initiator QUrl(), meaning
+ // browser-initiated, trusted.
+ page.load(QUrl("foo:bar"));
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(handler.initiator, QUrl());
+}
+
QTEST_MAIN(tst_QWebEngineProfile)
#include "tst_qwebengineprofile.moc"
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 286efca56..d01a5365f 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -375,7 +375,7 @@ void tst_QWebEngineView::microFocusCoordinates()
QVariant initialMicroFocus = webView.focusProxy()->inputMethodQuery(Qt::ImMicroFocus);
evaluateJavaScriptSync(webView.page(), "window.scrollBy(0, 50)");
- QVERIFY(scrollSpy.wait());
+ QTRY_VERIFY(scrollSpy.count() > 0);
QTRY_VERIFY(webView.focusProxy()->inputMethodQuery(Qt::ImMicroFocus).isValid());
QVariant currentMicroFocus = webView.focusProxy()->inputMethodQuery(Qt::ImMicroFocus);