diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/auto/quick/publicapi/tst_publicapi.cpp | 50 | ||||
| -rw-r--r-- | tests/auto/quick/qmltests/data/tst_geopermission.qml | 22 | ||||
| -rw-r--r-- | tests/auto/quick/qmltests/data/tst_getUserMedia.qml | 30 | ||||
| -rw-r--r-- | tests/auto/quick/qmltests/data/tst_notification.qml | 17 | ||||
| -rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 235 | ||||
| -rw-r--r-- | tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp | 14 | ||||
| -rw-r--r-- | tests/manual/quick/geopermission/tst_geopermission.qml | 8 | ||||
| -rw-r--r-- | tests/manual/widgets/geolocation/main.cpp | 13 | ||||
| -rw-r--r-- | tests/manual/widgets/webrtc/main.cpp | 8 |
9 files changed, 248 insertions, 149 deletions
diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp index c4d889cbe..cf0e59274 100644 --- a/tests/auto/quick/publicapi/tst_publicapi.cpp +++ b/tests/auto/quick/publicapi/tst_publicapi.cpp @@ -26,6 +26,7 @@ #include <QtWebEngineCore/QWebEngineLoadingInfo> #include <QtWebEngineCore/QWebEngineWebAuthUxRequest> #include <QtWebEngineCore/QWebEngineFrame> +#include <QtWebEngineCore/QWebEnginePermission> #include <private/qquickwebengineview_p.h> #include <private/qquickwebengineaction_p.h> #include <private/qquickwebengineclientcertificateselection_p.h> @@ -72,6 +73,7 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * << &QWebEngineNavigationRequest::staticMetaObject << &QWebEngineNewWindowRequest::staticMetaObject << &QWebEngineNotification::staticMetaObject + << &QWebEnginePermission::staticMetaObject << &QWebEngineQuotaRequest::staticMetaObject << &QWebEngineRegisterProtocolHandlerRequest::staticMetaObject << &QQuickWebEngineTouchSelectionMenuRequest::staticMetaObject @@ -82,6 +84,7 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * static QList<QMetaEnum> knownEnumNames = QList<QMetaEnum>() << QWebEngineDownloadRequest::staticMetaObject.enumerator(QWebEngineDownloadRequest::staticMetaObject.indexOfEnumerator("SavePageFormat")) + << QWebEnginePermission::staticMetaObject.enumerator(QWebEnginePermission::staticMetaObject.indexOfEnumerator("Feature")) ; static const QStringList hardcodedTypes = QStringList() @@ -353,6 +356,29 @@ static const QStringList expectedAPI = QStringList() << "QWebEngineNewWindowRequest.InNewDialog --> DestinationType" << "QWebEngineNewWindowRequest.InNewTab --> DestinationType" << "QWebEngineNewWindowRequest.InNewWindow --> DestinationType" + << "QWebEnginePermission.Unsupported --> Feature" + << "QWebEnginePermission.MediaAudioCapture --> Feature" + << "QWebEnginePermission.MediaVideoCapture --> Feature" + << "QWebEnginePermission.MediaAudioVideoCapture --> Feature" + << "QWebEnginePermission.DesktopVideoCapture --> Feature" + << "QWebEnginePermission.DesktopAudioVideoCapture --> Feature" + << "QWebEnginePermission.MouseLock --> Feature" + << "QWebEnginePermission.Notifications --> Feature" + << "QWebEnginePermission.Geolocation --> Feature" + << "QWebEnginePermission.ClipboardReadWrite --> Feature" + << "QWebEnginePermission.LocalFontsAccess --> Feature" + << "QWebEnginePermission.Invalid --> State" + << "QWebEnginePermission.Ask --> State" + << "QWebEnginePermission.Granted --> State" + << "QWebEnginePermission.Denied --> State" + << "QWebEnginePermission.origin --> QUrl" + << "QWebEnginePermission.feature --> QWebEnginePermission::Feature" + << "QWebEnginePermission.state --> QWebEnginePermission::State" + << "QWebEnginePermission.isValid --> bool" + << "QWebEnginePermission.grant() --> void" + << "QWebEnginePermission.deny() --> void" + << "QWebEnginePermission.reset() --> void" + << "QWebEnginePermission.isTransient(QWebEnginePermission::Feature) --> bool" << "QQuickWebEngineNewWindowRequest.openIn(QQuickWebEngineView*) --> void" << "QQuickWebEngineProfile.AllowPersistentCookies --> PersistentCookiesPolicy" << "QQuickWebEngineProfile.DiskHttpCache --> HttpCacheType" @@ -537,10 +563,20 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.B10 --> PrintedPageSizeId" << "QQuickWebEngineView.Back --> WebAction" << "QQuickWebEngineView.C5E --> PrintedPageSizeId" +#if QT_DEPRECATED_SINCE(6, 8) + << "QQuickWebEngineView.ClipboardReadWrite --> Feature" + << "QQuickWebEngineView.DesktopAudioVideoCapture --> Feature" + << "QQuickWebEngineView.DesktopVideoCapture --> Feature" + << "QQuickWebEngineView.Geolocation --> Feature" + << "QQuickWebEngineView.LocalFontsAccess --> Feature" + << "QQuickWebEngineView.MediaAudioCapture --> Feature" + << "QQuickWebEngineView.MediaAudioVideoCapture --> Feature" + << "QQuickWebEngineView.MediaVideoCapture --> Feature" + << "QQuickWebEngineView.Notifications --> Feature" +#endif << "QQuickWebEngineView.CertificateErrorDomain --> ErrorDomain" << "QQuickWebEngineView.ChangeTextDirectionLTR --> WebAction" << "QQuickWebEngineView.ChangeTextDirectionRTL --> WebAction" - << "QQuickWebEngineView.ClipboardReadWrite --> Feature" << "QQuickWebEngineView.Comm10E --> PrintedPageSizeId" << "QQuickWebEngineView.ConnectionErrorDomain --> ErrorDomain" << "QQuickWebEngineView.Copy --> WebAction" @@ -552,8 +588,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.Custom --> PrintedPageSizeId" << "QQuickWebEngineView.Cut --> WebAction" << "QQuickWebEngineView.DLE --> PrintedPageSizeId" - << "QQuickWebEngineView.DesktopAudioVideoCapture --> Feature" - << "QQuickWebEngineView.DesktopVideoCapture --> Feature" << "QQuickWebEngineView.DnsErrorDomain --> ErrorDomain" << "QQuickWebEngineView.DoublePostcard --> PrintedPageSizeId" << "QQuickWebEngineView.DownloadImageToDisk --> WebAction" @@ -608,7 +642,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.Folio --> PrintedPageSizeId" << "QQuickWebEngineView.Forward --> WebAction" << "QQuickWebEngineView.FtpErrorDomain --> ErrorDomain" - << "QQuickWebEngineView.Geolocation --> Feature" << "QQuickWebEngineView.HttpErrorDomain --> ErrorDomain" << "QQuickWebEngineView.Imperial10x11 --> PrintedPageSizeId" << "QQuickWebEngineView.Imperial10x13 --> PrintedPageSizeId" @@ -653,12 +686,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.LoadStartedStatus --> LoadStatus" << "QQuickWebEngineView.LoadStoppedStatus --> LoadStatus" << "QQuickWebEngineView.LoadSucceededStatus --> LoadStatus" - << "QQuickWebEngineView.LocalFontsAccess --> Feature" - << "QQuickWebEngineView.MediaAudioCapture --> Feature" - << "QQuickWebEngineView.MediaAudioVideoCapture --> Feature" - << "QQuickWebEngineView.MediaVideoCapture --> Feature" << "QQuickWebEngineView.NoErrorDomain --> ErrorDomain" - << "QQuickWebEngineView.Notifications --> Feature" << "QQuickWebEngineView.NoWebAction --> WebAction" << "QQuickWebEngineView.NormalTerminationStatus --> RenderProcessTerminationStatus" << "QQuickWebEngineView.Note --> PrintedPageSizeId" @@ -734,7 +762,9 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.goBack() --> void" << "QQuickWebEngineView.goBackOrForward(int) --> void" << "QQuickWebEngineView.goForward() --> void" +#if QT_DEPRECATED_SINCE(6, 8) << "QQuickWebEngineView.grantFeaturePermission(QUrl,QQuickWebEngineView::Feature,bool) --> void" +#endif << "QQuickWebEngineView.history --> QWebEngineHistory*" << "QQuickWebEngineView.icon --> QUrl" << "QQuickWebEngineView.iconChanged() --> void" @@ -769,6 +799,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.NewViewInDialog --> NewViewDestination" << "QQuickWebEngineView.NewViewInTab --> NewViewDestination" << "QQuickWebEngineView.NewViewInWindow --> NewViewDestination" + << "QQuickWebEngineView.permissionRequested(QWebEnginePermission) --> void" << "QQuickWebEngineView.pdfPrintingFinished(QString,bool) --> void" << "QQuickWebEngineView.printRequested() --> void" << "QQuickWebEngineView.printRequestedByFrame(QWebEngineFrame) --> void" @@ -1020,4 +1051,3 @@ void tst_publicapi::publicAPI() QTEST_MAIN(tst_publicapi) #include "tst_publicapi.moc" - diff --git a/tests/auto/quick/qmltests/data/tst_geopermission.qml b/tests/auto/quick/qmltests/data/tst_geopermission.qml index c474033a9..e425a82c7 100644 --- a/tests/auto/quick/qmltests/data/tst_geopermission.qml +++ b/tests/auto/quick/qmltests/data/tst_geopermission.qml @@ -16,19 +16,19 @@ TestWebEngineView { profile.persistentPermissionsPolicy: WebEngineProfile.NoPersistentPermissions SignalSpy { - id: featurePermissionSpy + id: permissionSpy target: webEngineView - signalName: "featurePermissionRequested" + signalName: "permissionRequested" } - onFeaturePermissionRequested: function(securityOrigin, feature) { - if (feature === WebEngineView.Geolocation) { + onPermissionRequested: function(perm) { + if (perm.feature === WebEnginePermission.Geolocation) { geoPermissionRequested = true if (deniedGeolocation) { - webEngineView.grantFeaturePermission(securityOrigin, feature, false) + perm.deny() } else { - webEngineView.grantFeaturePermission(securityOrigin, feature, true) + perm.grant() } } } @@ -57,15 +57,15 @@ TestWebEngineView { function init() { deniedGeolocation = false - featurePermissionSpy.clear() + permissionSpy.clear() } function test_geoPermissionRequest() { - compare(featurePermissionSpy.count, 0) + compare(permissionSpy.count, 0) webEngineView.url = Qt.resolvedUrl("geolocation.html") - featurePermissionSpy.wait() + permissionSpy.wait() verify(geoPermissionRequested) - compare(featurePermissionSpy.count, 1) + compare(permissionSpy.count, 1) tryVerify(isHandled, 5000) verify(getErrorMessage() === "") } @@ -73,7 +73,7 @@ TestWebEngineView { function test_deniedGeolocationByUser() { deniedGeolocation = true webEngineView.url = Qt.resolvedUrl("geolocation.html") - featurePermissionSpy.wait() + permissionSpy.wait() tryVerify(isHandled, 5000) compare(getErrorMessage(), "User denied Geolocation") } diff --git a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml index 653f7a5df..9a876778b 100644 --- a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml +++ b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml @@ -22,17 +22,17 @@ TestWebEngineView { { tag: "device audio", constraints: { audio: true }, - feature: WebEngineView.MediaAudioCapture, + feature: WebEnginePermission.MediaAudioCapture, }, { tag: "device video", constraints: { video: true }, - feature: WebEngineView.MediaVideoCapture, + feature: WebEnginePermission.MediaVideoCapture, }, { tag: "device audio+video", constraints: { audio: true, video: true }, - feature: WebEngineView.MediaAudioVideoCapture, + feature: WebEnginePermission.MediaAudioVideoCapture, }, { tag: "desktop video", @@ -43,7 +43,7 @@ TestWebEngineView { } } }, - feature: WebEngineView.DesktopVideoCapture, + feature: WebEnginePermission.DesktopVideoCapture, }, { tag: "desktop audio+video", @@ -59,7 +59,7 @@ TestWebEngineView { } } }, - feature: WebEngineView.DesktopAudioVideoCapture, + feature: WebEnginePermission.DesktopAudioVideoCapture, } ] } @@ -116,28 +116,24 @@ TestWebEngineView { //// // synchronous permission requests - property variant requestedFeature - property variant requestedSecurityOrigin + property variant permissionObject - onFeaturePermissionRequested: function(securityOrigin, feature) { - requestedFeature = feature - requestedSecurityOrigin = securityOrigin + onPermissionRequested: function(perm) { + permissionObject = perm } function gotFeatureRequest(expectedFeature) { - return requestedFeature == expectedFeature + return permissionObject && permissionObject.feature == expectedFeature } function acceptPendingRequest() { - webEngineView.grantFeaturePermission(requestedSecurityOrigin, requestedFeature, true) - requestedFeature = undefined - requestedSecurityOrigin = undefined + permissionObject.grant() + permissionObject = undefined } function rejectPendingRequest() { - webEngineView.grantFeaturePermission(requestedSecurityOrigin, requestedFeature, false) - requestedFeature = undefined - requestedSecurityOrigin = undefined + permissionObject.deny() + permissionObject = undefined } //// diff --git a/tests/auto/quick/qmltests/data/tst_notification.qml b/tests/auto/quick/qmltests/data/tst_notification.qml index 0bb33b41e..5defbff4b 100644 --- a/tests/auto/quick/qmltests/data/tst_notification.qml +++ b/tests/auto/quick/qmltests/data/tst_notification.qml @@ -13,7 +13,7 @@ TestWebEngineView { property bool permissionRequested: false property bool grantPermission: false - property url securityOrigin: '' + property var permissionObject profile.persistentPermissionsPolicy: WebEngineProfile.NoPersistentPermissions @@ -22,14 +22,17 @@ TestWebEngineView { SignalSpy { id: spyRequest target: view - signalName: 'featurePermissionRequested' + signalName: 'permissionRequested' } - onFeaturePermissionRequested: function(securityOrigin, feature) { - if (feature === WebEngineView.Notifications) { + onPermissionRequested: function(perm) { + if (perm.feature === WebEnginePermission.Notifications) { view.permissionRequested = true - view.securityOrigin = securityOrigin - view.grantFeaturePermission(securityOrigin, feature, grantPermission) + view.permissionObject = perm + if (grantPermission) + perm.grant() + else + perm.deny() } } @@ -93,7 +96,7 @@ TestWebEngineView { compare(notification.title, title) compare(notification.message, message) compare(notification.direction, Qt.RightToLeft) - compare(notification.origin, securityOrigin) + compare(notification.origin, permissionObject.origin) compare(notification.tag, 'tst') compare(notification.language, 'de') } diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index f6eac2880..8b6ea31fd 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -72,6 +72,7 @@ #include <qwebengineurlscheme.h> #include <qwebengineurlschemehandler.h> #include <qwebengineview.h> +#include <qwebenginepermission.h> #include <qimagewriter.h> #include <QColorSpace> #include <QQuickRenderControl> @@ -451,12 +452,12 @@ public: return true; } public Q_SLOTS: - void requestPermission(const QUrl &origin, QWebEnginePage::Feature feature) + void requestPermission(QWebEnginePermission permission) { if (m_allowGeolocation) - setFeaturePermission(origin, feature, PermissionGrantedByUser); + permission.grant(); else - setFeaturePermission(origin, feature, PermissionDeniedByUser); + permission.deny(); } public: @@ -488,8 +489,8 @@ void tst_QWebEnginePage::geolocationRequestJS() newPage->profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions); newPage->setGeolocationPermission(allowed); - connect(newPage, SIGNAL(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)), - newPage, SLOT(requestPermission(const QUrl&, QWebEnginePage::Feature))); + connect(newPage, SIGNAL(permissionRequested(QWebEnginePermission)), + newPage, SLOT(requestPermission(QWebEnginePermission))); QSignalSpy spyLoadFinished(newPage, SIGNAL(loadFinished(bool))); newPage->setHtml(QString("<html><body>test</body></html>"), QUrl("qrc://secure/origin")); @@ -1656,8 +1657,9 @@ public: GetUserMediaTestPage() : m_gotRequest(false) , m_loadSucceeded(false) + , m_permission(nullptr) { - connect(this, &QWebEnginePage::featurePermissionRequested, this, &GetUserMediaTestPage::onFeaturePermissionRequested); + connect(this, &QWebEnginePage::permissionRequested, this, &GetUserMediaTestPage::onPermissionRequested); connect(this, &QWebEnginePage::loadFinished, [this](bool success){ m_loadSucceeded = success; }); @@ -1695,18 +1697,20 @@ public: void rejectPendingRequest() { - setFeaturePermission(m_requestSecurityOrigin, m_requestedFeature, QWebEnginePage::PermissionDeniedByUser); + QVERIFY(m_permission); + m_permission->deny(); m_gotRequest = false; } void acceptPendingRequest() { - setFeaturePermission(m_requestSecurityOrigin, m_requestedFeature, QWebEnginePage::PermissionGrantedByUser); + QVERIFY(m_permission); + m_permission->grant(); m_gotRequest = false; } - bool gotFeatureRequest(QWebEnginePage::Feature feature) + bool gotFeatureRequest(QWebEnginePermission::Feature feature) { - return m_gotRequest && m_requestedFeature == feature; + return m_gotRequest && m_permission && m_permission->feature() == feature; } bool gotFeatureRequest() const @@ -1720,50 +1724,47 @@ public: } private Q_SLOTS: - void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature) + void onPermissionRequested(QWebEnginePermission permission) { - m_requestedFeature = feature; - m_requestSecurityOrigin = securityOrigin; + m_permission.reset(new QWebEnginePermission(permission)); m_gotRequest = true; } private: bool m_gotRequest; bool m_loadSucceeded; - QWebEnginePage::Feature m_requestedFeature; - QUrl m_requestSecurityOrigin; - + std::unique_ptr<QWebEnginePermission> m_permission; }; void tst_QWebEnginePage::getUserMediaRequest_data() { QTest::addColumn<QString>("call"); - QTest::addColumn<QWebEnginePage::Feature>("feature"); + QTest::addColumn<QWebEnginePermission::Feature>("feature"); QTest::addRow("device audio") - << "getUserMedia({audio: true})" << QWebEnginePage::MediaAudioCapture; + << "getUserMedia({audio: true})" << QWebEnginePermission::MediaAudioCapture; QTest::addRow("device video") - << "getUserMedia({video: true})" << QWebEnginePage::MediaVideoCapture; + << "getUserMedia({video: true})" << QWebEnginePermission::MediaVideoCapture; QTest::addRow("device audio+video") - << "getUserMedia({audio: true, video: true})" << QWebEnginePage::MediaAudioVideoCapture; + << "getUserMedia({audio: true, video: true})" << QWebEnginePermission::MediaAudioVideoCapture; QTest::addRow("desktop video") << "getUserMedia({video: { mandatory: { chromeMediaSource: 'desktop' }}})" - << QWebEnginePage::DesktopVideoCapture; + << QWebEnginePermission::DesktopVideoCapture; QTest::addRow("desktop audio+video") << "getUserMedia({audio: { mandatory: { chromeMediaSource: 'desktop' }}, video: { mandatory: { chromeMediaSource: 'desktop' }}})" - << QWebEnginePage::DesktopAudioVideoCapture; + << QWebEnginePermission::DesktopAudioVideoCapture; QTest::addRow("display video") - << "getDisplayMedia()" << QWebEnginePage::DesktopVideoCapture; + << "getDisplayMedia()" << QWebEnginePermission::DesktopVideoCapture; } void tst_QWebEnginePage::getUserMediaRequest() { QFETCH(QString, call); - QFETCH(QWebEnginePage::Feature, feature); + QFETCH(QWebEnginePermission::Feature, feature); GetUserMediaTestPage page; QWebEngineView view; - if (feature == QWebEnginePage::DesktopVideoCapture || feature == QWebEnginePage::DesktopAudioVideoCapture) { + if (feature == QWebEnginePermission::DesktopVideoCapture || feature == QWebEnginePermission::DesktopAudioVideoCapture) { // Desktop capture needs to be on a desktop. view.setPage(&page); view.resize(640, 480); @@ -1833,7 +1834,7 @@ void tst_QWebEnginePage::getUserMediaRequestSettingDisabled() void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages() { const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}"); - const QWebEnginePage::Feature feature = QWebEnginePage::DesktopVideoCapture; + const QWebEnginePermission::Feature feature = QWebEnginePermission::DesktopVideoCapture; std::vector<GetUserMediaTestPage> pages(10); // Desktop capture needs to be on a desktop @@ -1866,7 +1867,7 @@ void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages() void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyRequests() { const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}"); - const QWebEnginePage::Feature feature = QWebEnginePage::DesktopVideoCapture; + const QWebEnginePermission::Feature feature = QWebEnginePermission::DesktopVideoCapture; GetUserMediaTestPage page; // Desktop capture needs to be on a desktop @@ -3795,20 +3796,30 @@ void tst_QWebEnginePage::dynamicFrame() struct NotificationPage : ConsolePage { Q_OBJECT - const QWebEnginePage::PermissionPolicy policy; + const QWebEnginePermission::State policy; public: - NotificationPage(QWebEnginePage::PermissionPolicy ppolicy) : policy(ppolicy) { + NotificationPage(QWebEnginePermission::State ppolicy) : policy(ppolicy) { connect(this, &QWebEnginePage::loadFinished, [load = spyLoad.ref()] (bool result) mutable { load(result); }); - connect(this, &QWebEnginePage::featurePermissionRequested, - [this] (const QUrl &origin, QWebEnginePage::Feature feature) { - if (feature != QWebEnginePage::Notifications) + connect(this, &QWebEnginePage::permissionRequested, + [this] (QWebEnginePermission permission) { + if (permission.feature() != QWebEnginePermission::Notifications) return; if (spyRequest.wasCalled()) QFAIL("request executed twise!"); - setFeaturePermission(origin, feature, policy); - spyRequest.ref()(origin); + switch (policy) { + case QWebEnginePermission::Granted: + permission.grant(); + break; + case QWebEnginePermission::Denied: + permission.deny(); + break; + case QWebEnginePermission::Ask: + permission.reset(); + break; + } + spyRequest.ref()(permission.origin()); }); load(QStringLiteral("qrc:///shared/notification.html")); @@ -3828,18 +3839,18 @@ public: void tst_QWebEnginePage::notificationPermission_data() { QTest::addColumn<bool>("setOnInit"); - QTest::addColumn<QWebEnginePage::PermissionPolicy>("policy"); + QTest::addColumn<QWebEnginePermission::State>("policy"); QTest::addColumn<QString>("permission"); - QTest::newRow("denyOnInit") << true << QWebEnginePage::PermissionDeniedByUser << "denied"; - QTest::newRow("deny") << false << QWebEnginePage::PermissionDeniedByUser << "denied"; - QTest::newRow("grant") << false << QWebEnginePage::PermissionGrantedByUser << "granted"; - QTest::newRow("grantOnInit") << true << QWebEnginePage::PermissionGrantedByUser << "granted"; + QTest::newRow("denyOnInit") << true << QWebEnginePermission::Denied << "denied"; + QTest::newRow("deny") << false << QWebEnginePermission::Denied << "denied"; + QTest::newRow("grant") << false << QWebEnginePermission::Granted << "granted"; + QTest::newRow("grantOnInit") << true << QWebEnginePermission::Granted << "granted"; } void tst_QWebEnginePage::notificationPermission() { QFETCH(bool, setOnInit); - QFETCH(QWebEnginePage::PermissionPolicy, policy); + QFETCH(QWebEnginePermission::State, policy); QFETCH(QString, permission); QWebEngineProfile otr; @@ -3849,20 +3860,33 @@ void tst_QWebEnginePage::notificationPermission() QUrl baseUrl("https://www.example.com/somepage.html"); bool permissionRequested = false, errorState = false; - connect(&page, &QWebEnginePage::featurePermissionRequested, &page, [&] (const QUrl &o, QWebEnginePage::Feature f) { - if (f != QWebEnginePage::Notifications) + connect(&page, &QWebEnginePage::permissionRequested, &page, [&] (QWebEnginePermission permission) { + if (permission.feature() != QWebEnginePermission::Notifications) return; - if (permissionRequested || o != baseUrl.url(QUrl::RemoveFilename)) { - qWarning() << "Unexpected case. Can't proceed." << setOnInit << permissionRequested << o; + if (permissionRequested || permission.origin() != baseUrl.url(QUrl::RemoveFilename)) { + qWarning() << "Unexpected case. Can't proceed." << setOnInit << permissionRequested << permission.origin(); errorState = true; return; } permissionRequested = true; - page.setFeaturePermission(o, f, policy); + + if (policy == QWebEnginePermission::Granted) + permission.grant(); + else + permission.deny(); }); if (setOnInit) - page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, policy); +#if QT_DEPRECATED_SINCE(6, 8) + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED + // FIXME: Replace with QWebEngineProfile permission API when that's implemented + page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, + policy == QWebEnginePermission::Granted ? QWebEnginePage::PermissionGrantedByUser : QWebEnginePage::PermissionDeniedByUser); + QT_WARNING_POP +#else + W_QSKIP("Compiled without deprecated APIs", SkipSingle); +#endif // QT_DEPRECATED_SINCE(6, 8) QSignalSpy spy(&page, &QWebEnginePage::loadFinished); page.setHtml(QString("<html><body>Test</body></html>"), baseUrl); @@ -3871,8 +3895,17 @@ void tst_QWebEnginePage::notificationPermission() QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), setOnInit ? permission : QLatin1String("default")); if (!setOnInit) { - page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, policy); +#if QT_DEPRECATED_SINCE(6, 8) + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED + // FIXME: Replace with QWebEngineProfile permission API when that's implemented + page.setFeaturePermission(baseUrl, QWebEnginePage::Notifications, + policy == QWebEnginePermission::Granted ? QWebEnginePage::PermissionGrantedByUser : QWebEnginePage::PermissionDeniedByUser); QTRY_COMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), permission); + QT_WARNING_POP +#else + W_QSKIP("Compiled without deprecated APIs", SkipSingle); +#endif // QT_DEPRECATED_SINCE(6, 8) } auto js = QStringLiteral("var permission; Notification.requestPermission().then(p => { permission = p })"); @@ -3885,7 +3918,7 @@ void tst_QWebEnginePage::notificationPermission() void tst_QWebEnginePage::sendNotification() { - NotificationPage page(QWebEnginePage::PermissionGrantedByUser); + NotificationPage page(QWebEnginePermission::Granted); QVERIFY(page.spyLoad.waitForResult()); page.resetPermission(); @@ -3973,42 +4006,42 @@ void tst_QWebEnginePage::clipboardReadWritePermissionInitialState() void tst_QWebEnginePage::clipboardReadWritePermission_data() { QTest::addColumn<bool>("canAccessClipboard"); - QTest::addColumn<QWebEnginePage::PermissionPolicy>("initialPolicy"); + QTest::addColumn<QWebEnginePermission::State>("initialPolicy"); QTest::addColumn<QString>("initialPermission"); - QTest::addColumn<QWebEnginePage::PermissionPolicy>("requestPolicy"); + QTest::addColumn<QWebEnginePermission::State>("requestPolicy"); QTest::addColumn<QString>("finalPermission"); QTest::newRow("noAccessGrantGrant") - << false << QWebEnginePage::PermissionGrantedByUser << "granted" - << QWebEnginePage::PermissionGrantedByUser << "granted"; + << false << QWebEnginePermission::Granted << "granted" + << QWebEnginePermission::Granted << "granted"; QTest::newRow("noAccessGrantDeny") - << false << QWebEnginePage::PermissionGrantedByUser << "granted" - << QWebEnginePage::PermissionDeniedByUser << "denied"; + << false << QWebEnginePermission::Granted << "granted" + << QWebEnginePermission::Denied << "denied"; QTest::newRow("noAccessDenyGrant") - << false << QWebEnginePage::PermissionDeniedByUser << "denied" - << QWebEnginePage::PermissionGrantedByUser << "granted"; - QTest::newRow("noAccessDenyDeny") << false << QWebEnginePage::PermissionDeniedByUser << "denied" - << QWebEnginePage::PermissionDeniedByUser << "denied"; - QTest::newRow("noAccessAskGrant") << false << QWebEnginePage::PermissionUnknown << "prompt" - << QWebEnginePage::PermissionGrantedByUser << "granted"; + << false << QWebEnginePermission::Denied << "denied" + << QWebEnginePermission::Granted << "granted"; + QTest::newRow("noAccessDenyDeny") << false << QWebEnginePermission::Denied << "denied" + << QWebEnginePermission::Denied << "denied"; + QTest::newRow("noAccessAskGrant") << false << QWebEnginePermission::Ask << "prompt" + << QWebEnginePermission::Granted << "granted"; // All policies are ignored and overridden by setting JsCanAccessClipboard and JsCanPaste to // true QTest::newRow("accessGrantGrant") - << true << QWebEnginePage::PermissionGrantedByUser << "granted" - << QWebEnginePage::PermissionGrantedByUser << "granted"; - QTest::newRow("accessDenyDeny") << true << QWebEnginePage::PermissionDeniedByUser << "granted" - << QWebEnginePage::PermissionDeniedByUser << "granted"; - QTest::newRow("accessAskAsk") << true << QWebEnginePage::PermissionUnknown << "granted" - << QWebEnginePage::PermissionUnknown << "granted"; + << true << QWebEnginePermission::Granted << "granted" + << QWebEnginePermission::Granted << "granted"; + QTest::newRow("accessDenyDeny") << true << QWebEnginePermission::Denied << "granted" + << QWebEnginePermission::Denied << "granted"; + QTest::newRow("accessAskAsk") << true << QWebEnginePermission::Ask << "granted" + << QWebEnginePermission::Ask << "granted"; } void tst_QWebEnginePage::clipboardReadWritePermission() { QFETCH(bool, canAccessClipboard); - QFETCH(QWebEnginePage::PermissionPolicy, initialPolicy); + QFETCH(QWebEnginePermission::State, initialPolicy); QFETCH(QString, initialPermission); - QFETCH(QWebEnginePage::PermissionPolicy, requestPolicy); + QFETCH(QWebEnginePermission::State, requestPolicy); QFETCH(QString, finalPermission); QWebEngineProfile otr; @@ -4026,20 +4059,43 @@ void tst_QWebEnginePage::clipboardReadWritePermission() bool errorState = false; // if JavascriptCanAccessClipboard is true, this never fires - connect(&page, &QWebEnginePage::featurePermissionRequested, &page, - [&](const QUrl &o, QWebEnginePage::Feature f) { - if (f != QWebEnginePage::ClipboardReadWrite) + connect(&page, &QWebEnginePage::permissionRequested, &page, + [&](QWebEnginePermission permission) { + if (permission.feature() != QWebEnginePermission::ClipboardReadWrite) return; - if (o != baseUrl.url(QUrl::RemoveFilename)) { - qWarning() << "Unexpected case. Can't proceed." << o; + if (permission.origin() != baseUrl.url(QUrl::RemoveFilename)) { + qWarning() << "Unexpected case. Can't proceed." << permission.origin(); errorState = true; return; } permissionRequestCount++; - page.setFeaturePermission(o, f, requestPolicy); + switch (requestPolicy) { + case QWebEnginePermission::Granted: + permission.grant(); + break; + case QWebEnginePermission::Denied: + permission.deny(); + break; + case QWebEnginePermission::Ask: + permission.reset(); + break; + default: + break; + } }); - page.setFeaturePermission(baseUrl, QWebEnginePage::ClipboardReadWrite, initialPolicy); + // FIXME: Replace with QWebEngineProfile permission API when that's implemented +#if QT_DEPRECATED_SINCE(6, 8) + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED + QWebEnginePage::PermissionPolicy deprecatedPolicy = + initialPolicy == QWebEnginePermission::Granted ? QWebEnginePage::PermissionGrantedByUser + : (initialPolicy == QWebEnginePermission::Denied ? QWebEnginePage::PermissionDeniedByUser : QWebEnginePage::PermissionUnknown); + page.setFeaturePermission(baseUrl, QWebEnginePage::ClipboardReadWrite, deprecatedPolicy); + QT_WARNING_POP +#else + W_QSKIP("Compiled without deprecated APIs", SkipSingle); +#endif // QT_DEPRECATED_SINCE(6, 8) QSignalSpy spy(&page, &QWebEnginePage::loadFinished); page.setHtml(QString("<html><body>Test</body></html>"), baseUrl); @@ -4099,17 +4155,17 @@ void tst_QWebEnginePage::contentsSize() void tst_QWebEnginePage::localFontAccessPermission_data() { - QTest::addColumn<QWebEnginePage::PermissionPolicy>("policy"); + QTest::addColumn<QWebEnginePermission::State>("policy"); QTest::addColumn<bool>("ignore"); QTest::addColumn<bool>("shouldBeEmpty"); - QTest::newRow("ignore") << QWebEnginePage::PermissionDeniedByUser << true << true; - QTest::newRow("setDeny") << QWebEnginePage::PermissionDeniedByUser << false << true; - QTest::newRow("setGrant") << QWebEnginePage::PermissionGrantedByUser << false << false; + QTest::newRow("ignore") << QWebEnginePermission::Denied << true << true; + QTest::newRow("setDeny") << QWebEnginePermission::Denied << false << true; + QTest::newRow("setGrant") << QWebEnginePermission::Granted << false << false; } void tst_QWebEnginePage::localFontAccessPermission() { - QFETCH(QWebEnginePage::PermissionPolicy, policy); + QFETCH(QWebEnginePermission::State, policy); QFETCH(bool, ignore); QFETCH(bool, shouldBeEmpty); @@ -4118,12 +4174,16 @@ void tst_QWebEnginePage::localFontAccessPermission() { page.profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions); view.setPage(&page); - connect(&page, &QWebEnginePage::featurePermissionRequested, &page, [&] (const QUrl &o, QWebEnginePage::Feature f) { - if (f != QWebEnginePage::LocalFontsAccess) + connect(&page, &QWebEnginePage::permissionRequested, &page, [&] (QWebEnginePermission permission) { + if (permission.feature() != QWebEnginePermission::LocalFontsAccess) return; - if (!ignore) - page.setFeaturePermission(o, f, policy); + if (!ignore) { + if (policy == QWebEnginePermission::Granted) + permission.grant(); + else + permission.deny(); + } }); QSignalSpy spy(&page, &QWebEnginePage::loadFinished); @@ -5734,12 +5794,11 @@ void tst_QWebEnginePage::chooseDesktopMedia() desktopMediaRequested = true; }); - connect(&page, &QWebEnginePage::featurePermissionRequested, - [&](const QUrl &securityOrigin, QWebEnginePage::Feature feature) { + connect(&page, &QWebEnginePage::permissionRequested, + [&](QWebEnginePermission permission) { permissionRequested = true; // Handle permission to 'complete' the media request - page.setFeaturePermission(securityOrigin, feature, - QWebEnginePage::PermissionGrantedByUser); + permission.grant(); }); page.load(QUrl(server.url())); diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp index ef069ac1c..818006586 100644 --- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp +++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp @@ -1051,8 +1051,15 @@ void tst_QWebEngineProfile::permissionPersistence() QVariant variant = granted ? "granted" : "denied"; QVariant defaultVariant = "default"; +#if QT_DEPRECATED_SINCE(6, 8) + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED page->setFeaturePermission(server.url("/hedgehog.html"), QWebEnginePage::Notifications, granted ? QWebEnginePage::PermissionGrantedByUser : QWebEnginePage::PermissionDeniedByUser); + QT_WARNING_POP +#else + W_QSKIP("Compiled without deprecated APIs", SkipSingle); +#endif // QT_DEPRECATED_SINCE(6, 8) QCOMPARE(evaluateJavaScriptSync(page.get(), "Notification.permission"), variant); page.reset(); @@ -1077,7 +1084,14 @@ void tst_QWebEngineProfile::permissionPersistence() QTRY_COMPARE(evaluateJavaScriptSync(page.get(), "Notification.permission"), expectSame ? variant : defaultVariant); +#if QT_DEPRECATED_SINCE(6, 8) + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED page->setFeaturePermission(server.url("/hedgehog.html"), QWebEnginePage::Notifications, QWebEnginePage::PermissionUnknown); + QT_WARNING_POP +#else + W_QSKIP("Compiled without deprecated APIs", SkipSingle); +#endif // QT_DEPRECATED_SINCE(6, 8) QCOMPARE(evaluateJavaScriptSync(page.get(), "Notification.permission"), defaultVariant); page.reset(); diff --git a/tests/manual/quick/geopermission/tst_geopermission.qml b/tests/manual/quick/geopermission/tst_geopermission.qml index 36317c176..ace48d464 100644 --- a/tests/manual/quick/geopermission/tst_geopermission.qml +++ b/tests/manual/quick/geopermission/tst_geopermission.qml @@ -13,14 +13,14 @@ WebEngineView { property bool deniedGeolocation: false property bool geoPermissionRequested: false - onFeaturePermissionRequested: function(securityOrigin, feature) { - if (feature === WebEngineView.Geolocation) { + onPermissionRequested: function(perm) { + if (perm.feature === WebEnginePermission.Geolocation) { geoPermissionRequested = true if (deniedGeolocation) { - webEngineView.grantFeaturePermission(securityOrigin, feature, false) + perm.deny() } else { - webEngineView.grantFeaturePermission(securityOrigin, feature, true) + perm.grant() } } } diff --git a/tests/manual/widgets/geolocation/main.cpp b/tests/manual/widgets/geolocation/main.cpp index f33cf5798..1f4cefe54 100644 --- a/tests/manual/widgets/geolocation/main.cpp +++ b/tests/manual/widgets/geolocation/main.cpp @@ -16,18 +16,15 @@ class GeoPermissionWebView : public QWebEngineView { Q_OBJECT public slots: - void handleFeaturePermissionRequested(const QUrl &securityOrigin, - QWebEnginePage::Feature feature) + void handlePermissionRequested(QWebEnginePermission permission) { qWarning("Feature Permission"); QString title = tr("Permission Request"); QString question = QLatin1String("Allow access to geolocation?"); if (!question.isEmpty() && QMessageBox::question(window(), title, question) == QMessageBox::Yes) - page()->setFeaturePermission(securityOrigin, feature, - QWebEnginePage::PermissionGrantedByUser); + permission.grant(); else - page()->setFeaturePermission(securityOrigin, feature, - QWebEnginePage::PermissionDeniedByUser); + permission.deny(); } }; @@ -38,8 +35,8 @@ int main(int argc, char *argv[]) QMainWindow w; GeoPermissionWebView webview; QWebEnginePage page; - QObject::connect(&page, &QWebEnginePage::featurePermissionRequested, &webview, - &GeoPermissionWebView::handleFeaturePermissionRequested); + QObject::connect(&page, &QWebEnginePage::permissionRequested, &webview, + &GeoPermissionWebView::handlePermissionRequested); webview.setPage(&page); page.load(QUrl("qrc:/geolocation.html")); w.setCentralWidget(&webview); diff --git a/tests/manual/widgets/webrtc/main.cpp b/tests/manual/widgets/webrtc/main.cpp index 328e4ae36..b5718159c 100644 --- a/tests/manual/widgets/webrtc/main.cpp +++ b/tests/manual/widgets/webrtc/main.cpp @@ -35,19 +35,19 @@ private slots: Page::Page(QWebEngineProfile *profile, QObject *parent) : QWebEnginePage(profile, parent) { settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true); - connect(this, &QWebEnginePage::featurePermissionRequested, this, + connect(this, &QWebEnginePage::permissionRequested, this, &Page::handlePermissionRequest); connect(this, &QWebEnginePage::desktopMediaRequested, this, &Page::handleDesktopMediaRequest); } -void Page::handlePermissionRequest(const QUrl &origin, Feature feature) +void Page::handlePermissionRequest(QWebEnginePermission permission) { if (QMessageBox::question(QApplication::activeWindow(), tr("Permission request"), tr("allow access?")) == QMessageBox::Yes) - setFeaturePermission(origin, feature, PermissionGrantedByUser); + permission.grant(); else - setFeaturePermission(origin, feature, PermissionDeniedByUser); + permission.deny(); } void Page::handleDesktopMediaRequest(const QWebEngineDesktopMediaRequest &request) |
