diff options
Diffstat (limited to 'tests/auto')
120 files changed, 1192 insertions, 1448 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 53f223642..257c7b387 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,13 +1,14 @@ include($$QTWEBENGINE_OUT_ROOT/src/buildtools/qtbuildtools-config.pri) -include($$QTWEBENGINE_OUT_ROOT/src/webengine/qtwebengine-config.pri) +include($$QTWEBENGINE_OUT_ROOT/src/webenginequick/qtwebenginequick-config.pri) include($$QTWEBENGINE_OUT_ROOT/src/webenginewidgets/qtwebenginewidgets-config.pri) include($$QTWEBENGINE_OUT_ROOT/src/pdf/qtpdf-config.pri) include($$QTWEBENGINE_OUT_ROOT/src/pdfwidgets/qtpdfwidgets-config.pri) QT_FOR_CONFIG += \ buildtools-private \ - webengine-private \ + webenginecore-private \ + webenginequick-private \ webenginewidgets-private \ pdf-private \ pdfwidgets-private @@ -15,7 +16,7 @@ QT_FOR_CONFIG += \ TEMPLATE = subdirs qtConfig(build-qtwebengine-core):qtConfig(webengine-core-support) { - qtConfig(webengine-qml): SUBDIRS += quick + qtConfig(webengine-quick): SUBDIRS += quick qtConfig(webengine-widgets): SUBDIRS += core widgets } diff --git a/tests/auto/core/qwebengineclientcertificatestore/tst_qwebengineclientcertificatestore.cpp b/tests/auto/core/qwebengineclientcertificatestore/tst_qwebengineclientcertificatestore.cpp index 6d51bf7af..f288a2c75 100644 --- a/tests/auto/core/qwebengineclientcertificatestore/tst_qwebengineclientcertificatestore.cpp +++ b/tests/auto/core/qwebengineclientcertificatestore/tst_qwebengineclientcertificatestore.cpp @@ -28,7 +28,7 @@ #include <QtTest/QtTest> #include <QtWebEngineCore/qwebengineclientcertificatestore.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> +#include <QtWebEngineCore/qwebengineprofile.h> class tst_QWebEngineClientCertificateStore : public QObject { diff --git a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp index bcaebc5f5..dbd645a83 100644 --- a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp +++ b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp @@ -30,8 +30,8 @@ #include <QtTest/QtTest> #include <QtWebEngineCore/qwebenginecallback.h> #include <QtWebEngineCore/qwebenginecookiestore.h> -#include <QtWebEngineWidgets/qwebenginepage.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> +#include <QtWebEngineCore/qwebengineprofile.h> +#include <QtWebEngineCore/qwebenginepage.h> #include "httpserver.h" #include "httpreqrep.h" diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp index 7981a45bf..0d4e172ee 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp +++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp @@ -30,15 +30,13 @@ #include <QtTest/QtTest> #include <QtWebEngineCore/qwebengineurlrequestinfo.h> #include <QtWebEngineCore/qwebengineurlrequestinterceptor.h> -#include <QtWebEngineWidgets/qwebenginepage.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> -#include <QtWebEngineWidgets/qwebenginesettings.h> +#include <QtWebEngineCore/qwebenginesettings.h> +#include <QtWebEngineCore/qwebengineprofile.h> +#include <QtWebEngineCore/qwebenginepage.h> #include <httpserver.h> #include <httpreqrep.h> -typedef void (QWebEngineProfile::*InterceptorSetter)(QWebEngineUrlRequestInterceptor *interceptor); -Q_DECLARE_METATYPE(InterceptorSetter) class tst_QWebEngineUrlRequestInterceptor : public QObject { Q_OBJECT @@ -54,27 +52,20 @@ public Q_SLOTS: private Q_SLOTS: void initTestCase(); void cleanupTestCase(); - void interceptRequest_data(); void interceptRequest(); - void ipv6HostEncoding_data(); void ipv6HostEncoding(); void requestedUrl_data(); void requestedUrl(); void setUrlSameUrl_data(); void setUrlSameUrl(); - void firstPartyUrl_data(); void firstPartyUrl(); void firstPartyUrlNestedIframes_data(); void firstPartyUrlNestedIframes(); void requestInterceptorByResourceType_data(); void requestInterceptorByResourceType(); - void firstPartyUrlHttp_data(); void firstPartyUrlHttp(); - void customHeaders_data(); void customHeaders(); - void initiator_data(); void initiator(); - void jsServiceWorker_data(); void jsServiceWorker(); void replaceInterceptor_data(); void replaceInterceptor(); @@ -135,7 +126,7 @@ public: void interceptRequest(QWebEngineUrlRequestInfo &info) override { - QCOMPARE(QThread::currentThread() == QCoreApplication::instance()->thread(), !property("deprecated").toBool()); + QVERIFY(QThread::currentThread() == QCoreApplication::instance()->thread()); qCDebug(lc) << this << "Type:" << info.resourceType() << info.requestMethod() << "Navigation:" << info.navigationType() << info.requestUrl() << "Initiator:" << info.initiator(); @@ -230,20 +221,12 @@ public: QStringList sourceIDs; }; -void tst_QWebEngineUrlRequestInterceptor::interceptRequest_data() -{ - QTest::addColumn<InterceptorSetter>("setter"); - QTest::newRow("ui") << &QWebEngineProfile::setUrlRequestInterceptor; - QTest::newRow("io") << &QWebEngineProfile::setRequestInterceptor; -} - void tst_QWebEngineUrlRequestInterceptor::interceptRequest() { - QFETCH(InterceptorSetter, setter); QWebEngineProfile profile; profile.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); @@ -273,7 +256,7 @@ void tst_QWebEngineUrlRequestInterceptor::interceptRequest() // Make sure that registering an observer does not modify the request. TestRequestInterceptor observer(/* intercept */ false); - (profile.*setter)(&observer); + profile.setUrlRequestInterceptor(&observer); page.load(QUrl("qrc:///resources/__placeholder__")); QTRY_COMPARE(loadSpy.count(), 1); success = loadSpy.takeFirst().takeFirst(); @@ -302,17 +285,11 @@ public: QList<QUrl> requestedUrls; }; -void tst_QWebEngineUrlRequestInterceptor::ipv6HostEncoding_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::ipv6HostEncoding() { - QFETCH(InterceptorSetter, setter); QWebEngineProfile profile; LocalhostContentProvider contentProvider; - (profile.*setter)(&contentProvider); + profile.setUrlRequestInterceptor(&contentProvider); QWebEnginePage page(&profile); QSignalSpy spyLoadFinished(&page, SIGNAL(loadFinished(bool))); @@ -332,23 +309,20 @@ void tst_QWebEngineUrlRequestInterceptor::ipv6HostEncoding() void tst_QWebEngineUrlRequestInterceptor::requestedUrl_data() { - QTest::addColumn<InterceptorSetter>("setter"); QTest::addColumn<bool>("interceptInPage"); - QTest::newRow("ui profile intercept") << &QWebEngineProfile::setUrlRequestInterceptor << false; - QTest::newRow("ui page intercept") << &QWebEngineProfile::setUrlRequestInterceptor << true; - QTest::newRow("io profile intercept") << &QWebEngineProfile::setRequestInterceptor << false; + QTest::newRow("profile intercept") << false; + QTest::newRow("page intercept") << true; } void tst_QWebEngineUrlRequestInterceptor::requestedUrl() { - QFETCH(InterceptorSetter, setter); QFETCH(bool, interceptInPage); QWebEngineProfile profile; profile.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); TestRequestInterceptor interceptor(/* intercept */ true); if (!interceptInPage) - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); if (interceptInPage) @@ -387,13 +361,12 @@ void tst_QWebEngineUrlRequestInterceptor::setUrlSameUrl_data() void tst_QWebEngineUrlRequestInterceptor::setUrlSameUrl() { - QFETCH(InterceptorSetter, setter); QFETCH(bool, interceptInPage); QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ true); if (!interceptInPage) - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); if (interceptInPage) @@ -422,17 +395,11 @@ void tst_QWebEngineUrlRequestInterceptor::setUrlSameUrl() QCOMPARE(spy.count(), 4); } -void tst_QWebEngineUrlRequestInterceptor::firstPartyUrl_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::firstPartyUrl() { - QFETCH(InterceptorSetter, setter); QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); @@ -450,19 +417,13 @@ void tst_QWebEngineUrlRequestInterceptor::firstPartyUrl() void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlNestedIframes_data() { QUrl url = QUrl::fromLocalFile(TESTS_SOURCE_DIR + QLatin1String("qwebengineurlrequestinterceptor/resources/iframe.html")); - QTest::addColumn<InterceptorSetter>("setter"); QTest::addColumn<QUrl>("requestUrl"); - QTest::newRow("ui file") << &QWebEngineProfile::setUrlRequestInterceptor << url; - QTest::newRow("io file") << &QWebEngineProfile::setRequestInterceptor << url; - QTest::newRow("ui qrc") << &QWebEngineProfile::setUrlRequestInterceptor - << QUrl("qrc:///resources/iframe.html"); - QTest::newRow("io qrc") << &QWebEngineProfile::setRequestInterceptor - << QUrl("qrc:///resources/iframe.html"); + QTest::newRow("ui file") << url; + QTest::newRow("ui qrc") << QUrl("qrc:///resources/iframe.html"); } void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlNestedIframes() { - QFETCH(InterceptorSetter, setter); QFETCH(QUrl, requestUrl); if (requestUrl.scheme() == "file" && !QDir(TESTS_SOURCE_DIR).exists()) @@ -472,7 +433,7 @@ void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlNestedIframes() QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); @@ -512,47 +473,40 @@ void tst_QWebEngineUrlRequestInterceptor::requestInterceptorByResourceType_data( QUrl faviconFirstPartyUrl = QUrl::fromLocalFile(TESTS_SOURCE_DIR + QLatin1String("qwebengineurlrequestinterceptor/resources/favicon.html")); QUrl faviconRequestUrl = QUrl::fromLocalFile(TESTS_SOURCE_DIR + QLatin1String("qwebengineurlrequestinterceptor/resources/icons/favicon.png")); - QTest::addColumn<InterceptorSetter>("setter"); QTest::addColumn<QUrl>("requestUrl"); QTest::addColumn<QUrl>("firstPartyUrl"); QTest::addColumn<int>("resourceType"); - QStringList name = { "ui", "io" }; - QVector<InterceptorSetter> setters = { &QWebEngineProfile::setUrlRequestInterceptor, - &QWebEngineProfile::setRequestInterceptor }; - for (int i = 0; i < 2; i++) { - QTest::newRow(qPrintable(name[i] + "StyleSheet")) - << setters[i] << styleRequestUrl << firstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeStylesheet); - QTest::newRow(qPrintable(name[i] + "Script")) << setters[i] << scriptRequestUrl << firstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeScript); - QTest::newRow(qPrintable(name[i] + "Image")) << setters[i] << imageRequestUrl << imageFirstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeImage); - QTest::newRow(qPrintable(name[i] + "FontResource")) - << setters[i] << fontRequestUrl << firstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeFontResource); - QTest::newRow(qPrintable(name[i] + "Media")) << setters[i] << mediaRequestUrl << mediaFirstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeMedia); - QTest::newRow(qPrintable(name[i] + "Favicon")) - << setters[i] << faviconRequestUrl << faviconFirstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeFavicon); - QTest::newRow(qPrintable(name[i] + "Xhr")) << setters[i] << xhrRequestUrl << firstPartyUrl - << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeXhr); - } + QTest::newRow("StyleSheet") + << styleRequestUrl << firstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeStylesheet); + QTest::newRow("Script") << scriptRequestUrl << firstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeScript); + QTest::newRow("Image") << imageRequestUrl << imageFirstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeImage); + QTest::newRow("FontResource") + << fontRequestUrl << firstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeFontResource); + QTest::newRow(qPrintable("Media")) << mediaRequestUrl << mediaFirstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeMedia); + QTest::newRow("Favicon") + << faviconRequestUrl << faviconFirstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeFavicon); + QTest::newRow(qPrintable("Xhr")) << xhrRequestUrl << firstPartyUrl + << static_cast<int>(QWebEngineUrlRequestInfo::ResourceTypeXhr); } void tst_QWebEngineUrlRequestInterceptor::requestInterceptorByResourceType() { if (!QDir(TESTS_SOURCE_DIR).exists()) W_QSKIP(QString("This test requires access to resources found in '%1'").arg(TESTS_SOURCE_DIR).toLatin1().constData(), SkipAll); - QFETCH(InterceptorSetter, setter); QFETCH(QUrl, requestUrl); QFETCH(QUrl, firstPartyUrl); QFETCH(int, resourceType); QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); @@ -567,17 +521,11 @@ void tst_QWebEngineUrlRequestInterceptor::requestInterceptorByResourceType() QCOMPARE(infos.at(0).resourceType, resourceType); } -void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlHttp_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlHttp() { - QFETCH(InterceptorSetter, setter); QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); @@ -637,14 +585,8 @@ void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlHttp() QCOMPARE(info.firstPartyUrl, firstPartyUrl); } -void tst_QWebEngineUrlRequestInterceptor::customHeaders_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::customHeaders() { - QFETCH(InterceptorSetter, setter); // Create HTTP Server to parse the request. HttpServer httpServer; httpServer.setResourceDirs({ TESTS_SOURCE_DIR "qwebengineurlrequestinterceptor/resources" }); @@ -652,7 +594,7 @@ void tst_QWebEngineUrlRequestInterceptor::customHeaders() QWebEngineProfile profile; TestRequestInterceptor interceptor(false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); @@ -702,17 +644,11 @@ void tst_QWebEngineUrlRequestInterceptor::customHeaders() (void) httpServer.stop(); } -void tst_QWebEngineUrlRequestInterceptor::initiator_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::initiator() { - QFETCH(InterceptorSetter, setter); QWebEngineProfile profile; TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QWebEnginePage page(&profile); QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); @@ -772,14 +708,8 @@ void tst_QWebEngineUrlRequestInterceptor::initiator() QVERIFY(interceptor.requestInitiatorUrls[info.requestUrl].contains(info.initiator)); } -void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker_data() -{ - interceptRequest_data(); -} - void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker() { - QFETCH(InterceptorSetter, setter); HttpServer server; server.setResourceDirs({ TESTS_SOURCE_DIR "qwebengineurlrequestinterceptor/resources" }); @@ -789,7 +719,7 @@ void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker() std::unique_ptr<ConsolePage> page; page.reset(new ConsolePage(&profile)); TestRequestInterceptor interceptor(/* intercept */ false); - (profile.*setter)(&interceptor); + profile.setUrlRequestInterceptor(&interceptor); QVERIFY(loadSync(page.get(), server.url("/sw.html"))); // We expect only one message here, because logging of services workers is not exposed in our API. diff --git a/tests/auto/pdf/qpdfsearchmodel/tst_qpdfsearchmodel.cpp b/tests/auto/pdf/qpdfsearchmodel/tst_qpdfsearchmodel.cpp index e690bfc11..c0706faaf 100644 --- a/tests/auto/pdf/qpdfsearchmodel/tst_qpdfsearchmodel.cpp +++ b/tests/auto/pdf/qpdfsearchmodel/tst_qpdfsearchmodel.cpp @@ -58,7 +58,7 @@ void tst_QPdfSearchModel::findText() QPdfSearchModel model; model.setDocument(&document); - QVector<QRectF> matches = model.matches(1, "ai"); + QList<QRectF> matches = model.matches(1, "ai"); qDebug() << matches; QCOMPARE(matches.count(), 3); diff --git a/tests/auto/quick/certificateerror/WebView.qml b/tests/auto/quick/certificateerror/WebView.qml new file mode 100644 index 000000000..558277dec --- /dev/null +++ b/tests/auto/quick/certificateerror/WebView.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtWebEngine 1.4 +import QtQuick.Window 2.0 +import QtTest 1.0 +import io.qt.tester 1.0 + +Window { + width: 50 + height: 50 + visible: true + + TestHandler { + id: handler + onLoadPage: function(url) { + view.url = url + } + } + + WebEngineView { + id: view + anchors.fill: parent + onLoadingChanged: function(load) { + handler.loadSuccess = load.status === WebEngineView.LoadSucceededStatus + } + onCertificateError: function(error) { + handler.certificateError = error + } + Component.onCompleted: { + view.settings.errorPageEnabled = false + } + } +} diff --git a/tests/auto/quick/certificateerror/certificateerror.pro b/tests/auto/quick/certificateerror/certificateerror.pro new file mode 100644 index 000000000..22c1275e6 --- /dev/null +++ b/tests/auto/quick/certificateerror/certificateerror.pro @@ -0,0 +1,7 @@ +include(../tests.pri) +include(../../shared/https.pri) +QT *= webenginecore-private webenginequick webenginequick-private +HEADERS += $$PWD/testhandler.h +SOURCES += $$PWD/testhandler.cpp +RESOURCES += certificateerror.qrc + diff --git a/tests/auto/quick/certificateerror/certificateerror.qrc b/tests/auto/quick/certificateerror/certificateerror.qrc new file mode 100644 index 000000000..bfc3013e7 --- /dev/null +++ b/tests/auto/quick/certificateerror/certificateerror.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>WebView.qml</file> + </qresource> +</RCC> diff --git a/tests/auto/quick/certificateerror/testhandler.cpp b/tests/auto/quick/certificateerror/testhandler.cpp new file mode 100644 index 000000000..cb6710aa3 --- /dev/null +++ b/tests/auto/quick/certificateerror/testhandler.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testhandler.h" + +TestHandler::TestHandler(QObject *parent) : QObject(parent) +{ + setObjectName(QStringLiteral("TestListner")); +} + +void TestHandler::load(const QUrl &page) +{ + emit loadPage(page); +} + +void TestHandler::setLoadSuccess(bool success) +{ + if (m_loadSuccess != success) { + m_loadSuccess = success; + emit loadSuccessChanged(); + } +} + +bool TestHandler::loadSuccess() const +{ + return m_loadSuccess; +} + +QWebEngineCertificateError TestHandler::certificateError() const +{ + return *m_error; +} + +void TestHandler::setCertificateError(QWebEngineCertificateError error) +{ + m_error = new QWebEngineCertificateError(error); + emit certificateErrorChanged(); +} diff --git a/tests/auto/quick/certificateerror/testhandler.h b/tests/auto/quick/certificateerror/testhandler.h new file mode 100644 index 000000000..a6d95d9a9 --- /dev/null +++ b/tests/auto/quick/certificateerror/testhandler.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTHANDLER_H +#define TESTHANDLER_H + +#include <QWebEngineCertificateError> + +class TestHandler : public QObject +{ + Q_OBJECT + Q_PROPERTY(QWebEngineCertificateError certificateError READ certificateError WRITE + setCertificateError NOTIFY certificateErrorChanged) + Q_PROPERTY(bool loadSuccess READ loadSuccess WRITE setLoadSuccess NOTIFY loadSuccessChanged) +public: + explicit TestHandler(QObject *parent = nullptr); + QWebEngineCertificateError certificateError() const; + + void setCertificateError(QWebEngineCertificateError error); + void setLoadSuccess(bool success); + bool loadSuccess() const; + void load(const QUrl &page); + +signals: + void loadPage(const QUrl &page); + void certificateErrorChanged(); + void loadSuccessChanged(); + +private: + QWebEngineCertificateError *m_error = nullptr; + bool m_loadSuccess = false; +}; + +#endif // TESTHANDLER_H diff --git a/tests/auto/quick/certificateerror/tst_certificateerror.cpp b/tests/auto/quick/certificateerror/tst_certificateerror.cpp new file mode 100644 index 000000000..3e2dc85fb --- /dev/null +++ b/tests/auto/quick/certificateerror/tst_certificateerror.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "testhandler.h" +#include <httpsserver.h> +#include <util.h> +#include <QWebEngineCertificateError> +#include <QQuickWebEngineProfile> +#include <QQmlApplicationEngine> +#include <QQuickWindow> +#include <QtTest/QtTest> + +class tst_CertificateError : public QObject +{ + Q_OBJECT +public: + tst_CertificateError() { } + +private Q_SLOTS: + void initTestCase(); + void handleError_data(); + void handleError(); + +private: + QScopedPointer<QQmlApplicationEngine> m_engine; + QQuickWindow *m_widnow = nullptr; + TestHandler *m_handler = nullptr; +}; + +void tst_CertificateError::initTestCase() +{ + QQuickWebEngineProfile::defaultProfile()->setOffTheRecord(true); + qmlRegisterType<TestHandler>("io.qt.tester", 1, 0, "TestHandler"); + m_engine.reset(new QQmlApplicationEngine()); + m_engine->load(QUrl(QStringLiteral("qrc:/WebView.qml"))); + m_widnow = qobject_cast<QQuickWindow *>(m_engine->rootObjects().first()); + Q_ASSERT(m_widnow); + m_handler = m_widnow->findChild<TestHandler *>(QStringLiteral("TestListner")); + Q_ASSERT(m_handler); +} + +void tst_CertificateError::handleError_data() +{ + QTest::addColumn<bool>("deferError"); + QTest::addColumn<bool>("acceptCertificate"); + QTest::addColumn<QString>("expectedContent"); + QTest::addRow("Reject") << false << false << QString(); + QTest::addRow("DeferReject") << true << false << QString(); + QTest::addRow("DeferAccept") << true << true << "TEST"; +} + +void tst_CertificateError::handleError() +{ + HttpsServer server; + server.setExpectError(true); + QVERIFY(server.start()); + + connect(&server, &HttpsServer::newRequest, [&](HttpReqRep *rr) { + rr->setResponseBody(QByteArrayLiteral("<html><body>TEST</body></html>")); + rr->sendResponse(); + }); + + QFETCH(bool, deferError); + QFETCH(bool, acceptCertificate); + QFETCH(QString, expectedContent); + + QSignalSpy certificateErrorSpy(m_handler, &TestHandler::certificateErrorChanged); + m_handler->load(server.url()); + QTRY_COMPARE(certificateErrorSpy.count(), 1); + QWebEngineCertificateError error = m_handler->certificateError(); + + if (deferError) { + error.defer(); + return; + } + + if (acceptCertificate) + error.acceptCertificate(); + else + error.rejectCertificate(); + + QVERIFY(error.isOverridable()); + auto chain = error.certificateChain(); + QCOMPARE(chain.size(), 2); + QCOMPARE(chain[0].serialNumber(), "3b:dd:1a:b7:2f:40:32:3b:c1:bf:37:d4:86:bd:56:c1:d0:6b:2a:43"); + QCOMPARE(chain[1].serialNumber(), "6d:52:fb:b4:57:3b:b2:03:c8:62:7b:7e:44:45:5c:d3:08:87:74:17"); + + if (deferError) { + QVERIFY(!m_handler->loadSuccess()); + + if (acceptCertificate) + error.acceptCertificate(); + else + error.rejectCertificate(); + } + QTRY_COMPARE_WITH_TIMEOUT(m_handler->loadSuccess(), acceptCertificate, 3000); +} + +static QByteArrayList params; +W_QTEST_MAIN(tst_CertificateError, params) +#include <tst_certificateerror.moc> diff --git a/tests/auto/quick/dialogs/dialogs.pro b/tests/auto/quick/dialogs/dialogs.pro index 29d509b20..79952d8ee 100644 --- a/tests/auto/quick/dialogs/dialogs.pro +++ b/tests/auto/quick/dialogs/dialogs.pro @@ -1,5 +1,5 @@ include(../tests.pri) -QT += core-private webengine webengine-private +QT += core-private webenginequick webenginequick-private HEADERS += \ server.h \ diff --git a/tests/auto/quick/dialogs/tst_dialogs.cpp b/tests/auto/quick/dialogs/tst_dialogs.cpp index 4df296bcd..97a39ed01 100644 --- a/tests/auto/quick/dialogs/tst_dialogs.cpp +++ b/tests/auto/quick/dialogs/tst_dialogs.cpp @@ -30,8 +30,8 @@ #include "server.h" #include "util.h" -#include <QtWebEngine/private/qquickwebenginedialogrequests_p.h> -#include <QtWebEngine/private/qquickwebenginecontextmenurequest_p.h> +#include <QtWebEngineQuick/private/qquickwebenginedialogrequests_p.h> +#include <QtWebEngineCore/qwebenginecontextmenurequest.h> #include <QQuickWebEngineProfile> #include <QNetworkProxy> @@ -122,7 +122,7 @@ void tst_Dialogs::contextMenuRequested() QSignalSpy dialogSpy(m_listener, &TestHandler::requestChanged); QTest::mouseClick(m_window, Qt::RightButton); QTRY_COMPARE(dialogSpy.count(), 1); - auto dialog = qobject_cast<QQuickWebEngineContextMenuRequest*>(m_listener->request()); + auto dialog = qobject_cast<QWebEngineContextMenuRequest *>(m_listener->request()); QVERIFY2(dialog, "Incorrect dialog requested"); } diff --git a/tests/auto/quick/inspectorserver/inspectorserver.pro b/tests/auto/quick/inspectorserver/inspectorserver.pro index fdc213f38..5110a3ae9 100644 --- a/tests/auto/quick/inspectorserver/inspectorserver.pro +++ b/tests/auto/quick/inspectorserver/inspectorserver.pro @@ -1,4 +1,4 @@ include(../tests.pri) -QT += webengine -QT_PRIVATE += core-private webengine-private webenginecore-private +QT += webenginequick +QT_PRIVATE += core-private webenginequick-private webenginecore-private DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" diff --git a/tests/auto/quick/inspectorserver/tst_inspectorserver.cpp b/tests/auto/quick/inspectorserver/tst_inspectorserver.cpp index 85257fcb7..bc5aed9ef 100644 --- a/tests/auto/quick/inspectorserver/tst_inspectorserver.cpp +++ b/tests/auto/quick/inspectorserver/tst_inspectorserver.cpp @@ -33,7 +33,7 @@ #include <QtQml/QQmlEngine> #include <QtTest/QtTest> #include <QQuickWebEngineProfile> -#include <QtWebEngine/private/qquickwebengineview_p.h> +#include <QtWebEngineQuick/private/qquickwebengineview_p.h> #define INSPECTOR_SERVER_PORT "23654" static const QUrl s_inspectorServerHttpBaseUrl("http://localhost:" INSPECTOR_SERVER_PORT); @@ -105,15 +105,22 @@ inline QQuickWebEngineView* tst_InspectorServer::webView() const QJsonArray tst_InspectorServer::fetchPageList() const { QNetworkAccessManager qnam; - QScopedPointer<QNetworkReply> reply(qnam.get(QNetworkRequest(s_inspectorServerHttpBaseUrl.resolved(QUrl("json/list"))))); - QSignalSpy(reply.data(), SIGNAL(finished())).wait(); + QSignalSpy spy(&qnam, &QNetworkAccessManager::finished);; + QNetworkRequest request(s_inspectorServerHttpBaseUrl.resolved(QUrl("json/list"))); + QScopedPointer<QNetworkReply> reply(qnam.get(request)); + spy.wait(); + // Work-around a network bug in Qt6: + if (reply->error() == QNetworkReply::ContentNotFoundError) { + reply.reset(qnam.get(request)); + spy.wait(); + } return QJsonDocument::fromJson(reply->readAll()).array(); } void tst_InspectorServer::testPageList() { const QUrl testPageUrl = QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/basic_page.html")); - QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webView()->setUrl(testPageUrl); QTRY_VERIFY(loadSpy.size() && !webView()->isLoading()); @@ -126,7 +133,7 @@ void tst_InspectorServer::testPageList() void tst_InspectorServer::testRemoteDebuggingMessage() { const QUrl testPageUrl = QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/basic_page.html")); - QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webView()->setUrl(testPageUrl); QTRY_VERIFY(loadSpy.size() && !webView()->isLoading()); @@ -160,7 +167,7 @@ void tst_InspectorServer::testRemoteDebuggingMessage() void tst_InspectorServer::openRemoteDebuggingSession() { const QUrl testPageUrl = QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/basic_page.html")); - QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webView()->setUrl(testPageUrl); QTRY_VERIFY(loadSpy.size() && !webView()->isLoading()); diff --git a/tests/auto/quick/publicapi/publicapi.pro b/tests/auto/quick/publicapi/publicapi.pro index c56fd2503..bb0e03f65 100644 --- a/tests/auto/quick/publicapi/publicapi.pro +++ b/tests/auto/quick/publicapi/publicapi.pro @@ -1,3 +1,3 @@ include(../tests.pri) -QT += webengine -QT_PRIVATE += core-private webengine-private webenginecore-private +QT += webenginequick +QT_PRIVATE += core-private webenginequick-private webenginecore-private diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp index 950c7375a..1b4d06aac 100644 --- a/tests/auto/quick/publicapi/tst_publicapi.cpp +++ b/tests/auto/quick/publicapi/tst_publicapi.cpp @@ -33,25 +33,26 @@ #include <QMetaType> #include <QQmlListProperty> #include <QtTest/QtTest> -#include <QtWebEngine/QQuickWebEngineProfile> -#include <QtWebEngine/QQuickWebEngineScript> +#include <QtWebEngineQuick/QQuickWebEngineProfile> +#include <QtWebEngineCore/QWebEngineCertificateError> #include <QtWebEngineCore/QWebEngineFindTextResult> +#include <QtWebEngineCore/QWebEngineFullScreenRequest> #include <QtWebEngineCore/QWebEngineNotification> #include <QtWebEngineCore/QWebEngineQuotaRequest> #include <QtWebEngineCore/QWebEngineRegisterProtocolHandlerRequest> +#include <QtWebEngineCore/QWebEngineContextMenuRequest> +#include <QtWebEngineCore/QWebEngineDownloadRequest> +#include <QtWebEngineCore/QWebEngineScript> +#include <QtWebEngineCore/QWebEngineLoadRequest> #include <private/qquickwebengineview_p.h> #include <private/qquickwebengineaction_p.h> -#include <private/qquickwebenginecertificateerror_p.h> #include <private/qquickwebengineclientcertificateselection_p.h> #include <private/qquickwebenginedialogrequests_p.h> -#include <private/qquickwebenginedownloaditem_p.h> #include <private/qquickwebenginehistory_p.h> -#include <private/qquickwebengineloadrequest_p.h> #include <private/qquickwebenginenavigationrequest_p.h> #include <private/qquickwebenginenewviewrequest_p.h> #include <private/qquickwebenginesettings_p.h> #include <private/qquickwebenginesingleton_p.h> -#include <private/qquickwebenginecontextmenurequest_p.h> class tst_publicapi : public QObject { Q_OBJECT @@ -62,19 +63,18 @@ private Q_SLOTS: static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject *>() << &QQuickWebEngineView::staticMetaObject << &QQuickWebEngineAction::staticMetaObject - << &QQuickWebEngineCertificateError::staticMetaObject << &QQuickWebEngineClientCertificateOption::staticMetaObject << &QQuickWebEngineClientCertificateSelection::staticMetaObject - << &QQuickWebEngineDownloadItem::staticMetaObject + << &QWebEngineDownloadRequest::staticMetaObject << &QQuickWebEngineHistory::staticMetaObject << &QQuickWebEngineHistoryListModel::staticMetaObject - << &QQuickWebEngineLoadRequest::staticMetaObject + << &QWebEngineLoadRequest::staticMetaObject << &QQuickWebEngineNavigationRequest::staticMetaObject << &QQuickWebEngineNewViewRequest::staticMetaObject << &QQuickWebEngineProfile::staticMetaObject - << &QQuickWebEngineScript::staticMetaObject << &QQuickWebEngineSettings::staticMetaObject - << &QQuickWebEngineFullScreenRequest::staticMetaObject + << &QWebEngineFullScreenRequest::staticMetaObject + << &QWebEngineScript::staticMetaObject << &QQuickWebEngineSingleton::staticMetaObject << &QQuickWebEngineAuthenticationDialogRequest::staticMetaObject << &QQuickWebEngineJavaScriptDialogRequest::staticMetaObject @@ -82,7 +82,8 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * << &QQuickWebEngineFileDialogRequest::staticMetaObject << &QQuickWebEngineFormValidationMessageRequest::staticMetaObject << &QQuickWebEngineTooltipRequest::staticMetaObject - << &QQuickWebEngineContextMenuRequest::staticMetaObject + << &QWebEngineContextMenuRequest::staticMetaObject + << &QWebEngineCertificateError::staticMetaObject << &QWebEngineQuotaRequest::staticMetaObject << &QWebEngineRegisterProtocolHandlerRequest::staticMetaObject << &QWebEngineNotification::staticMetaObject @@ -93,7 +94,7 @@ static QList<const char *> knownEnumNames = QList<const char *>(); static const QStringList hardcodedTypes = QStringList() << "QJSValue" - << "QQmlListProperty<QQuickWebEngineScript>" + << "QQmlListProperty<QWebEngineScript>" << "QQmlListProperty<QQuickWebEngineClientCertificateOption>" << "const QQuickWebEngineClientCertificateOption*" << "QQmlWebChannel*" @@ -103,7 +104,7 @@ static const QStringList hardcodedTypes = QStringList() << "const QQuickWebEngineContextMenuData*" << "QWebEngineCookieStore*" << "Qt::LayoutDirection" - ; + << "QQuickWebEngineScriptCollection*"; static const QStringList expectedAPI = QStringList() << "QQuickWebEngineAction.text --> QString" @@ -121,29 +122,31 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineAuthenticationDialogRequest.realm --> QString" << "QQuickWebEngineAuthenticationDialogRequest.type --> AuthenticationType" << "QQuickWebEngineAuthenticationDialogRequest.url --> QUrl" - << "QQuickWebEngineCertificateError.CertificateAuthorityInvalid --> Error" - << "QQuickWebEngineCertificateError.CertificateCommonNameInvalid --> Error" - << "QQuickWebEngineCertificateError.CertificateContainsErrors --> Error" - << "QQuickWebEngineCertificateError.CertificateDateInvalid --> Error" - << "QQuickWebEngineCertificateError.CertificateInvalid --> Error" - << "QQuickWebEngineCertificateError.CertificateKnownInterceptionBlocked --> Error" - << "QQuickWebEngineCertificateError.CertificateNameConstraintViolation --> Error" - << "QQuickWebEngineCertificateError.CertificateNoRevocationMechanism --> Error" - << "QQuickWebEngineCertificateError.CertificateNonUniqueName --> Error" - << "QQuickWebEngineCertificateError.CertificateRevoked --> Error" - << "QQuickWebEngineCertificateError.CertificateTransparencyRequired --> Error" - << "QQuickWebEngineCertificateError.CertificateUnableToCheckRevocation --> Error" - << "QQuickWebEngineCertificateError.CertificateValidityTooLong --> Error" - << "QQuickWebEngineCertificateError.CertificateWeakKey --> Error" - << "QQuickWebEngineCertificateError.CertificateWeakSignatureAlgorithm --> Error" - << "QQuickWebEngineCertificateError.SslPinnedKeyNotInCertificateChain --> Error" - << "QQuickWebEngineCertificateError.defer() --> void" - << "QQuickWebEngineCertificateError.description --> QString" - << "QQuickWebEngineCertificateError.error --> Error" - << "QQuickWebEngineCertificateError.ignoreCertificateError() --> void" - << "QQuickWebEngineCertificateError.overridable --> bool" - << "QQuickWebEngineCertificateError.rejectCertificate() --> void" - << "QQuickWebEngineCertificateError.url --> QUrl" + << "QWebEngineCertificateError.CertificateAuthorityInvalid --> Type" + << "QWebEngineCertificateError.CertificateCommonNameInvalid --> Type" + << "QWebEngineCertificateError.CertificateContainsErrors --> Type" + << "QWebEngineCertificateError.CertificateDateInvalid --> Type" + << "QWebEngineCertificateError.CertificateInvalid --> Type" + << "QWebEngineCertificateError.CertificateKnownInterceptionBlocked --> Type" + << "QWebEngineCertificateError.CertificateNameConstraintViolation --> Type" + << "QWebEngineCertificateError.CertificateNoRevocationMechanism --> Type" + << "QWebEngineCertificateError.CertificateNonUniqueName --> Type" + << "QWebEngineCertificateError.CertificateRevoked --> Type" + << "QWebEngineCertificateError.CertificateTransparencyRequired --> Type" + << "QWebEngineCertificateError.CertificateUnableToCheckRevocation --> Type" + << "QWebEngineCertificateError.CertificateValidityTooLong --> Type" + << "QWebEngineCertificateError.CertificateWeakKey --> Type" + << "QWebEngineCertificateError.CertificateWeakSignatureAlgorithm --> Type" + << "QWebEngineCertificateError.CertificateSymantecLegacy --> Type" + << "QWebEngineCertificateError.SslObsoleteVersion --> Type" + << "QWebEngineCertificateError.SslPinnedKeyNotInCertificateChain --> Type" + << "QWebEngineCertificateError.defer() --> void" + << "QWebEngineCertificateError.description --> QString" + << "QWebEngineCertificateError.type --> Type" + << "QWebEngineCertificateError.acceptCertificate() --> void" + << "QWebEngineCertificateError.overridable --> bool" + << "QWebEngineCertificateError.rejectCertificate() --> void" + << "QWebEngineCertificateError.url --> QUrl" << "QQuickWebEngineClientCertificateOption.issuer --> QString" << "QQuickWebEngineClientCertificateOption.subject --> QString" << "QQuickWebEngineClientCertificateOption.effectiveDate --> QDateTime" @@ -157,118 +160,109 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineClientCertificateSelection.selectNone() --> void" << "QQuickWebEngineColorDialogRequest.accepted --> bool" << "QQuickWebEngineColorDialogRequest.color --> QColor" - << "QQuickWebEngineContextMenuRequest.CanUndo --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanRedo --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanCut --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanCopy --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanPaste --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanDelete --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanSelectAll --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanTranslate --> EditFlags" - << "QQuickWebEngineContextMenuRequest.CanEditRichly --> EditFlags" + << "QWebEngineContextMenuRequest.CanUndo --> EditFlags" + << "QWebEngineContextMenuRequest.CanRedo --> EditFlags" + << "QWebEngineContextMenuRequest.CanCut --> EditFlags" + << "QWebEngineContextMenuRequest.CanCopy --> EditFlags" + << "QWebEngineContextMenuRequest.CanPaste --> EditFlags" + << "QWebEngineContextMenuRequest.CanDelete --> EditFlags" + << "QWebEngineContextMenuRequest.CanSelectAll --> EditFlags" + << "QWebEngineContextMenuRequest.CanTranslate --> EditFlags" + << "QWebEngineContextMenuRequest.CanEditRichly --> EditFlags" << "QQuickWebEngineColorDialogRequest.dialogAccept(QColor) --> void" << "QQuickWebEngineColorDialogRequest.dialogReject() --> void" - << "QQuickWebEngineContextMenuRequest.editFlags --> EditFlags" - << "QQuickWebEngineContextMenuRequest.MediaInError --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaPaused --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaMuted --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaLoop --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaCanSave --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaHasAudio --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaCanToggleControls --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaControls --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaCanPrint --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaCanRotate --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.MediaTypeAudio --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypeCanvas --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypeFile --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypeImage --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypeNone --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypePlugin --> MediaType" - << "QQuickWebEngineContextMenuRequest.MediaTypeVideo --> MediaType" - << "QQuickWebEngineContextMenuRequest.accepted --> bool" - << "QQuickWebEngineContextMenuRequest.isContentEditable --> bool" - << "QQuickWebEngineContextMenuRequest.linkText --> QString" - << "QQuickWebEngineContextMenuRequest.linkUrl --> QUrl" - << "QQuickWebEngineContextMenuRequest.mediaFlags --> MediaFlags" - << "QQuickWebEngineContextMenuRequest.mediaType --> MediaType" - << "QQuickWebEngineContextMenuRequest.mediaUrl --> QUrl" - << "QQuickWebEngineContextMenuRequest.misspelledWord --> QString" - << "QQuickWebEngineContextMenuRequest.selectedText --> QString" - << "QQuickWebEngineContextMenuRequest.spellCheckerSuggestions --> QStringList" - << "QQuickWebEngineContextMenuRequest.x --> int" - << "QQuickWebEngineContextMenuRequest.y --> int" - << "QQuickWebEngineDownloadItem.Attachment --> DownloadType" - << "QQuickWebEngineDownloadItem.CompleteHtmlSaveFormat --> SavePageFormat" - << "QQuickWebEngineDownloadItem.DownloadAttribute --> DownloadType" - << "QQuickWebEngineDownloadItem.DownloadCancelled --> DownloadState" - << "QQuickWebEngineDownloadItem.DownloadCompleted --> DownloadState" - << "QQuickWebEngineDownloadItem.DownloadInProgress --> DownloadState" - << "QQuickWebEngineDownloadItem.DownloadInterrupted --> DownloadState" - << "QQuickWebEngineDownloadItem.DownloadRequested --> DownloadState" - << "QQuickWebEngineDownloadItem.FileAccessDenied --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileBlocked --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileFailed --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileHashMismatch --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileNameTooLong --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileNoSpace --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileSecurityCheckFailed --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileTooLarge --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileTooShort --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileTransientError --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.FileVirusInfected --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.MimeHtmlSaveFormat --> SavePageFormat" - << "QQuickWebEngineDownloadItem.NetworkDisconnected --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.NetworkFailed --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.NetworkInvalidRequest --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.NetworkServerDown --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.NetworkTimeout --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.NoReason --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.SavePage --> DownloadType" - << "QQuickWebEngineDownloadItem.ServerBadContent --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.ServerCertProblem --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.ServerFailed --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.ServerForbidden --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.ServerUnauthorized --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.ServerUnreachable --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.SingleHtmlSaveFormat --> SavePageFormat" - << "QQuickWebEngineDownloadItem.UnknownSaveFormat --> SavePageFormat" - << "QQuickWebEngineDownloadItem.UserCanceled --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.UserRequested --> DownloadType" - << "QQuickWebEngineDownloadItem.accept() --> void" - << "QQuickWebEngineDownloadItem.cancel() --> void" - << "QQuickWebEngineDownloadItem.id --> uint" - << "QQuickWebEngineDownloadItem.interruptReason --> DownloadInterruptReason" - << "QQuickWebEngineDownloadItem.interruptReasonChanged() --> void" - << "QQuickWebEngineDownloadItem.interruptReasonString --> QString" - << "QQuickWebEngineDownloadItem.isFinished --> bool" - << "QQuickWebEngineDownloadItem.isFinishedChanged() --> void" - << "QQuickWebEngineDownloadItem.isPaused --> bool" - << "QQuickWebEngineDownloadItem.isPausedChanged() --> void" - << "QQuickWebEngineDownloadItem.isSavePageDownload --> bool" - << "QQuickWebEngineDownloadItem.mimeType --> QString" - << "QQuickWebEngineDownloadItem.mimeTypeChanged() --> void" - << "QQuickWebEngineDownloadItem.path --> QString" - << "QQuickWebEngineDownloadItem.pathChanged() --> void" - << "QQuickWebEngineDownloadItem.pause() --> void" - << "QQuickWebEngineDownloadItem.receivedBytes --> qlonglong" - << "QQuickWebEngineDownloadItem.receivedBytesChanged() --> void" - << "QQuickWebEngineDownloadItem.resume() --> void" - << "QQuickWebEngineDownloadItem.savePageFormat --> SavePageFormat" - << "QQuickWebEngineDownloadItem.savePageFormatChanged() --> void" - << "QQuickWebEngineDownloadItem.state --> DownloadState" - << "QQuickWebEngineDownloadItem.stateChanged() --> void" - << "QQuickWebEngineDownloadItem.totalBytes --> qlonglong" - << "QQuickWebEngineDownloadItem.totalBytesChanged() --> void" - << "QQuickWebEngineDownloadItem.type --> DownloadType" - << "QQuickWebEngineDownloadItem.typeChanged() --> void" - << "QQuickWebEngineDownloadItem.view --> QQuickWebEngineView*" - << "QQuickWebEngineDownloadItem.url --> QUrl" - << "QQuickWebEngineDownloadItem.suggestedFileName --> QString" - << "QQuickWebEngineDownloadItem.downloadDirectory --> QString" - << "QQuickWebEngineDownloadItem.downloadDirectoryChanged() --> void" - << "QQuickWebEngineDownloadItem.downloadFileName --> QString" - << "QQuickWebEngineDownloadItem.downloadFileNameChanged() --> void" + << "QWebEngineContextMenuRequest.editFlags --> EditFlags" + << "QWebEngineContextMenuRequest.MediaInError --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaPaused --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaMuted --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaLoop --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaCanSave --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaHasAudio --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaCanToggleControls --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaControls --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaCanPrint --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaCanRotate --> MediaFlags" + << "QWebEngineContextMenuRequest.MediaTypeAudio --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypeCanvas --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypeFile --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypeImage --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypeNone --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypePlugin --> MediaType" + << "QWebEngineContextMenuRequest.MediaTypeVideo --> MediaType" + << "QWebEngineContextMenuRequest.accepted --> bool" + << "QWebEngineContextMenuRequest.isContentEditable --> bool" + << "QWebEngineContextMenuRequest.linkText --> QString" + << "QWebEngineContextMenuRequest.linkUrl --> QUrl" + << "QWebEngineContextMenuRequest.mediaFlags --> MediaFlags" + << "QWebEngineContextMenuRequest.mediaType --> MediaType" + << "QWebEngineContextMenuRequest.mediaUrl --> QUrl" + << "QWebEngineContextMenuRequest.misspelledWord --> QString" + << "QWebEngineContextMenuRequest.selectedText --> QString" + << "QWebEngineContextMenuRequest.spellCheckerSuggestions --> QStringList" + << "QWebEngineContextMenuRequest.position --> QPoint" + << "QWebEngineDownloadRequest.CompleteHtmlSaveFormat --> SavePageFormat" + << "QWebEngineDownloadRequest.DownloadCancelled --> DownloadState" + << "QWebEngineDownloadRequest.DownloadCompleted --> DownloadState" + << "QWebEngineDownloadRequest.DownloadInProgress --> DownloadState" + << "QWebEngineDownloadRequest.DownloadInterrupted --> DownloadState" + << "QWebEngineDownloadRequest.DownloadRequested --> DownloadState" + << "QWebEngineDownloadRequest.FileAccessDenied --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileBlocked --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileFailed --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileHashMismatch --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileNameTooLong --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileNoSpace --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileSecurityCheckFailed --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileTooLarge --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileTooShort --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileTransientError --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.FileVirusInfected --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.MimeHtmlSaveFormat --> SavePageFormat" + << "QWebEngineDownloadRequest.NetworkDisconnected --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.NetworkFailed --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.NetworkInvalidRequest --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.NetworkServerDown --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.NetworkTimeout --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.NoReason --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerBadContent --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerCertProblem --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerFailed --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerForbidden --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerUnauthorized --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.ServerUnreachable --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.SingleHtmlSaveFormat --> SavePageFormat" + << "QWebEngineDownloadRequest.UnknownSaveFormat --> SavePageFormat" + << "QWebEngineDownloadRequest.UserCanceled --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.accept() --> void" + << "QWebEngineDownloadRequest.cancel() --> void" + << "QWebEngineDownloadRequest.id --> uint" + << "QWebEngineDownloadRequest.interruptReason --> DownloadInterruptReason" + << "QWebEngineDownloadRequest.interruptReasonChanged() --> void" + << "QWebEngineDownloadRequest.interruptReasonString --> QString" + << "QWebEngineDownloadRequest.isFinished --> bool" + << "QWebEngineDownloadRequest.isFinishedChanged() --> void" + << "QWebEngineDownloadRequest.isPaused --> bool" + << "QWebEngineDownloadRequest.isPausedChanged() --> void" + << "QWebEngineDownloadRequest.isSavePageDownload --> bool" + << "QWebEngineDownloadRequest.mimeType --> QString" + << "QWebEngineDownloadRequest.pause() --> void" + << "QWebEngineDownloadRequest.receivedBytes --> qlonglong" + << "QWebEngineDownloadRequest.receivedBytesChanged() --> void" + << "QWebEngineDownloadRequest.resume() --> void" + << "QWebEngineDownloadRequest.savePageFormat --> SavePageFormat" + << "QWebEngineDownloadRequest.savePageFormatChanged() --> void" + << "QWebEngineDownloadRequest.state --> DownloadState" + << "QWebEngineDownloadRequest.stateChanged(QWebEngineDownloadRequest::DownloadState) --> void" + << "QWebEngineDownloadRequest.totalBytes --> qlonglong" + << "QWebEngineDownloadRequest.totalBytesChanged() --> void" + // FIXME << "QWebEngineDownloadRequest.view --> QQuickWebEngineView*" + << "QWebEngineDownloadRequest.url --> QUrl" + << "QWebEngineDownloadRequest.suggestedFileName --> QString" + << "QWebEngineDownloadRequest.downloadDirectory --> QString" + << "QWebEngineDownloadRequest.downloadDirectoryChanged() --> void" + << "QWebEngineDownloadRequest.downloadFileName --> QString" + << "QWebEngineDownloadRequest.downloadFileNameChanged() --> void" + << "QWebEngineDownloadRequest.downloadProgress(qlonglong,qlonglong) --> void" // FIXME << "QQuickWebEngineFileDialogRequest.FileModeOpen --> FileMode" << "QQuickWebEngineFileDialogRequest.FileModeOpenMultiple --> FileMode" << "QQuickWebEngineFileDialogRequest.FileModeSave --> FileMode" @@ -296,10 +290,10 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineTooltipRequest.text --> QString" << "QQuickWebEngineTooltipRequest.type --> RequestType" << "QQuickWebEngineTooltipRequest.accepted --> bool" - << "QQuickWebEngineFullScreenRequest.accept() --> void" - << "QQuickWebEngineFullScreenRequest.origin --> QUrl" - << "QQuickWebEngineFullScreenRequest.reject() --> void" - << "QQuickWebEngineFullScreenRequest.toggleOn --> bool" + << "QWebEngineFullScreenRequest.accept() --> void" + << "QWebEngineFullScreenRequest.origin --> QUrl" + << "QWebEngineFullScreenRequest.reject() --> void" + << "QWebEngineFullScreenRequest.toggleOn --> bool" << "QQuickWebEngineHistory.backItems --> QQuickWebEngineHistoryListModel*" << "QQuickWebEngineHistory.clear() --> void" << "QQuickWebEngineHistory.forwardItems --> QQuickWebEngineHistoryListModel*" @@ -317,11 +311,22 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineJavaScriptDialogRequest.securityOrigin --> QUrl" << "QQuickWebEngineJavaScriptDialogRequest.title --> QString" << "QQuickWebEngineJavaScriptDialogRequest.type --> DialogType" - << "QQuickWebEngineLoadRequest.errorCode --> int" - << "QQuickWebEngineLoadRequest.errorDomain --> QQuickWebEngineView::ErrorDomain" - << "QQuickWebEngineLoadRequest.errorString --> QString" - << "QQuickWebEngineLoadRequest.status --> QQuickWebEngineView::LoadStatus" - << "QQuickWebEngineLoadRequest.url --> QUrl" + << "QWebEngineLoadRequest.errorCode --> int" + << "QWebEngineLoadRequest.errorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.errorString --> QString" + << "QWebEngineLoadRequest.status --> LoadStatus" + << "QWebEngineLoadRequest.url --> QUrl" + << "QWebEngineLoadRequest.LoadFailedStatus --> LoadStatus" + << "QWebEngineLoadRequest.LoadStartedStatus --> LoadStatus" + << "QWebEngineLoadRequest.LoadStoppedStatus --> LoadStatus" + << "QWebEngineLoadRequest.LoadSucceededStatus --> LoadStatus" + << "QWebEngineLoadRequest.CertificateErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.ConnectionErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.DnsErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.FtpErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.HttpErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.InternalErrorDomain --> ErrorDomain" + << "QWebEngineLoadRequest.NoErrorDomain --> ErrorDomain" << "QQuickWebEngineNavigationRequest.action --> QQuickWebEngineView::NavigationRequestAction" << "QQuickWebEngineNavigationRequest.actionChanged() --> void" << "QQuickWebEngineNavigationRequest.isMainFrame --> bool" @@ -340,8 +345,8 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineProfile.cachePath --> QString" << "QQuickWebEngineProfile.cachePathChanged() --> void" << "QQuickWebEngineProfile.clearHttpCache() --> void" - << "QQuickWebEngineProfile.downloadFinished(QQuickWebEngineDownloadItem*) --> void" - << "QQuickWebEngineProfile.downloadRequested(QQuickWebEngineDownloadItem*) --> void" + << "QQuickWebEngineProfile.downloadFinished(QWebEngineDownloadRequest*) --> void" + << "QQuickWebEngineProfile.downloadRequested(QWebEngineDownloadRequest*) --> void" << "QQuickWebEngineProfile.downloadPath --> QString" << "QQuickWebEngineProfile.downloadPathChanged() --> void" << "QQuickWebEngineProfile.presentNotification(QWebEngineNotification*) --> void" @@ -367,32 +372,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineProfile.storageNameChanged() --> void" << "QQuickWebEngineProfile.useForGlobalCertificateVerification --> bool" << "QQuickWebEngineProfile.useForGlobalCertificateVerificationChanged() --> void" - << "QQuickWebEngineProfile.userScripts --> QQmlListProperty<QQuickWebEngineScript>" - << "QQuickWebEngineScript.ApplicationWorld --> ScriptWorldId" - << "QQuickWebEngineScript.Deferred --> InjectionPoint" - << "QQuickWebEngineScript.DocumentCreation --> InjectionPoint" - << "QQuickWebEngineScript.DocumentReady --> InjectionPoint" - << "QQuickWebEngineScript.MainWorld --> ScriptWorldId" - << "QQuickWebEngineScript.UserWorld --> ScriptWorldId" - << "QQuickWebEngineScript.injectionPoint --> InjectionPoint" - << "QQuickWebEngineScript.injectionPointChanged(InjectionPoint) --> void" - << "QQuickWebEngineScript.name --> QString" - << "QQuickWebEngineScript.nameChanged(QString) --> void" - << "QQuickWebEngineScript.runOnSubframes --> bool" - << "QQuickWebEngineScript.runOnSubframesChanged(bool) --> void" - << "QQuickWebEngineScript.setInjectionPoint(InjectionPoint) --> void" - << "QQuickWebEngineScript.setName(QString) --> void" - << "QQuickWebEngineScript.setRunOnSubframes(bool) --> void" - << "QQuickWebEngineScript.setSourceCode(QString) --> void" - << "QQuickWebEngineScript.setSourceUrl(QUrl) --> void" - << "QQuickWebEngineScript.setWorldId(ScriptWorldId) --> void" - << "QQuickWebEngineScript.sourceCode --> QString" - << "QQuickWebEngineScript.sourceCodeChanged(QString) --> void" - << "QQuickWebEngineScript.sourceUrl --> QUrl" - << "QQuickWebEngineScript.sourceUrlChanged(QUrl) --> void" - << "QQuickWebEngineScript.toString() --> QString" - << "QQuickWebEngineScript.worldId --> ScriptWorldId" - << "QQuickWebEngineScript.worldIdChanged(ScriptWorldId) --> void" + << "QQuickWebEngineProfile.userScripts --> QQuickWebEngineScriptCollection*" << "QQuickWebEngineSettings.AllowAllUnknownUrlSchemes --> UnknownUrlSchemePolicy" << "QQuickWebEngineSettings.AllowUnknownUrlSchemesFromUserInteraction --> UnknownUrlSchemePolicy" << "QQuickWebEngineSettings.DisallowUnknownUrlSchemes --> UnknownUrlSchemePolicy" @@ -460,6 +440,19 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineSettings.webRTCPublicInterfacesOnlyChanged() --> void" << "QQuickWebEngineSingleton.defaultProfile --> QQuickWebEngineProfile*" << "QQuickWebEngineSingleton.settings --> QQuickWebEngineSettings*" + << "QQuickWebEngineSingleton.script() --> QWebEngineScript" + << "QWebEngineScript.ApplicationWorld --> ScriptWorldId" + << "QWebEngineScript.Deferred --> InjectionPoint" + << "QWebEngineScript.DocumentCreation --> InjectionPoint" + << "QWebEngineScript.DocumentReady --> InjectionPoint" + << "QWebEngineScript.MainWorld --> ScriptWorldId" + << "QWebEngineScript.UserWorld --> ScriptWorldId" + << "QWebEngineScript.injectionPoint --> InjectionPoint" + << "QWebEngineScript.name --> QString" + << "QWebEngineScript.runsOnSubFrames --> bool" + << "QWebEngineScript.sourceCode --> QString" + << "QWebEngineScript.sourceUrl --> QUrl" + << "QWebEngineScript.worldId --> uint" << "QQuickWebEngineView.action(WebAction) --> QQuickWebEngineAction*" << "QQuickWebEngineView.A0 --> PrintedPageSizeId" << "QQuickWebEngineView.A1 --> PrintedPageSizeId" @@ -690,11 +683,11 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.canGoBackChanged() --> void" << "QQuickWebEngineView.canGoForward --> bool" << "QQuickWebEngineView.canGoForwardChanged() --> void" - << "QQuickWebEngineView.certificateError(QQuickWebEngineCertificateError*) --> void" + << "QQuickWebEngineView.certificateError(QWebEngineCertificateError) --> void" << "QQuickWebEngineView.colorDialogRequested(QQuickWebEngineColorDialogRequest*) --> void" << "QQuickWebEngineView.contentsSize --> QSizeF" << "QQuickWebEngineView.contentsSizeChanged(QSizeF) --> void" - << "QQuickWebEngineView.contextMenuRequested(QQuickWebEngineContextMenuRequest*) --> void" + << "QQuickWebEngineView.contextMenuRequested(QWebEngineContextMenuRequest*) --> void" << "QQuickWebEngineView.devToolsView --> QQuickWebEngineView*" << "QQuickWebEngineView.devToolsViewChanged() --> void" << "QQuickWebEngineView.featurePermissionRequested(QUrl,Feature) --> void" @@ -705,7 +698,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.findTextFinished(QWebEngineFindTextResult) --> void" << "QQuickWebEngineView.formValidationMessageRequested(QQuickWebEngineFormValidationMessageRequest*) --> void" << "QQuickWebEngineView.fullScreenCancelled() --> void" - << "QQuickWebEngineView.fullScreenRequested(QQuickWebEngineFullScreenRequest) --> void" + << "QQuickWebEngineView.fullScreenRequested(QWebEngineFullScreenRequest) --> void" << "QQuickWebEngineView.geometryChangeRequested(QRect,QRect) --> void" << "QQuickWebEngineView.goBack() --> void" << "QQuickWebEngineView.goBackOrForward(int) --> void" @@ -727,7 +720,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.loadProgress --> int" << "QQuickWebEngineView.loadProgressChanged() --> void" << "QQuickWebEngineView.loading --> bool" - << "QQuickWebEngineView.loadingChanged(QQuickWebEngineLoadRequest*) --> void" + << "QQuickWebEngineView.loadingChanged(QWebEngineLoadRequest) --> void" << "QQuickWebEngineView.navigationHistory --> QQuickWebEngineHistory*" << "QQuickWebEngineView.navigationRequested(QQuickWebEngineNavigationRequest*) --> void" << "QQuickWebEngineView.newViewRequested(QQuickWebEngineNewViewRequest*) --> void" @@ -763,7 +756,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.setActiveFocusOnPress(bool) --> void" << "QQuickWebEngineView.settings --> QQuickWebEngineSettings*" << "QQuickWebEngineView.stop() --> void" -#if QT_CONFIG(webengine_testsupport) +#if QT_CONFIG(webenginequick_testsupport) << "QQuickWebEngineView.testSupport --> QQuickWebEngineTestSupport*" << "QQuickWebEngineView.testSupportChanged() --> void" #endif @@ -773,8 +766,10 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.triggerWebAction(WebAction) --> void" << "QQuickWebEngineView.url --> QUrl" << "QQuickWebEngineView.urlChanged() --> void" - << "QQuickWebEngineView.userScripts --> QQmlListProperty<QQuickWebEngineScript>" + << "QQuickWebEngineView.userScripts --> QQuickWebEngineScriptCollection*" +#if QT_CONFIG(webengine_webchannel) << "QQuickWebEngineView.webChannel --> QQmlWebChannel*" +#endif << "QQuickWebEngineView.webChannelChanged() --> void" << "QQuickWebEngineView.webChannelWorld --> uint" << "QQuickWebEngineView.webChannelWorldChanged(uint) --> void" diff --git a/tests/auto/quick/qmltests/BLACKLIST b/tests/auto/quick/qmltests/BLACKLIST index 3d98566f5..e5a575f06 100644 --- a/tests/auto/quick/qmltests/BLACKLIST +++ b/tests/auto/quick/qmltests/BLACKLIST @@ -1,2 +1,5 @@ +[CertificateError::test_error] +macos + [NewViewRequest::test_loadNewViewRequest] macos diff --git a/tests/auto/quick/qmltests/data/TestWebEngineView.qml b/tests/auto/quick/qmltests/data/TestWebEngineView.qml index 9033f2441..f82589f7d 100644 --- a/tests/auto/quick/qmltests/data/TestWebEngineView.qml +++ b/tests/auto/quick/qmltests/data/TestWebEngineView.qml @@ -105,8 +105,8 @@ WebEngineView { TestResult { id: testResult } - onLoadingChanged: { - loadStatus = loadRequest.status + onLoadingChanged: function(load) { + loadStatus = load.status } onWindowCloseRequested: { diff --git a/tests/auto/quick/qmltests2/data/accepttypes.html b/tests/auto/quick/qmltests/data/accepttypes.html index aff39f96e..aff39f96e 100644 --- a/tests/auto/quick/qmltests2/data/accepttypes.html +++ b/tests/auto/quick/qmltests/data/accepttypes.html diff --git a/tests/auto/quick/qmltests2/data/alert.html b/tests/auto/quick/qmltests/data/alert.html index 89715a727..89715a727 100644 --- a/tests/auto/quick/qmltests2/data/alert.html +++ b/tests/auto/quick/qmltests/data/alert.html diff --git a/tests/auto/quick/qmltests2/data/confirm.html b/tests/auto/quick/qmltests/data/confirm.html index a4fc5b532..a4fc5b532 100644 --- a/tests/auto/quick/qmltests2/data/confirm.html +++ b/tests/auto/quick/qmltests/data/confirm.html diff --git a/tests/auto/quick/qmltests2/data/confirmclose.html b/tests/auto/quick/qmltests/data/confirmclose.html index c2acbb67f..c2acbb67f 100644 --- a/tests/auto/quick/qmltests2/data/confirmclose.html +++ b/tests/auto/quick/qmltests/data/confirmclose.html diff --git a/tests/auto/quick/qmltests2/data/directoryupload.html b/tests/auto/quick/qmltests/data/directoryupload.html index adc408ebb..adc408ebb 100644 --- a/tests/auto/quick/qmltests2/data/directoryupload.html +++ b/tests/auto/quick/qmltests/data/directoryupload.html diff --git a/tests/auto/quick/qmltests2/data/favicon-candidates-gray.html b/tests/auto/quick/qmltests/data/favicon-candidates-gray.html index ebea35b02..ebea35b02 100644 --- a/tests/auto/quick/qmltests2/data/favicon-candidates-gray.html +++ b/tests/auto/quick/qmltests/data/favicon-candidates-gray.html diff --git a/tests/auto/quick/qmltests2/data/favicon-misc.html b/tests/auto/quick/qmltests/data/favicon-misc.html index 9e788bdf4..9e788bdf4 100644 --- a/tests/auto/quick/qmltests2/data/favicon-misc.html +++ b/tests/auto/quick/qmltests/data/favicon-misc.html diff --git a/tests/auto/quick/qmltests2/data/favicon-multi-gray.html b/tests/auto/quick/qmltests/data/favicon-multi-gray.html index 24b71640f..24b71640f 100644 --- a/tests/auto/quick/qmltests2/data/favicon-multi-gray.html +++ b/tests/auto/quick/qmltests/data/favicon-multi-gray.html diff --git a/tests/auto/quick/qmltests2/data/favicon-multi.html b/tests/auto/quick/qmltests/data/favicon-multi.html index cc5f3fd66..cc5f3fd66 100644 --- a/tests/auto/quick/qmltests2/data/favicon-multi.html +++ b/tests/auto/quick/qmltests/data/favicon-multi.html diff --git a/tests/auto/quick/qmltests2/data/favicon-shortcut.html b/tests/auto/quick/qmltests/data/favicon-shortcut.html index 786cdb816..786cdb816 100644 --- a/tests/auto/quick/qmltests2/data/favicon-shortcut.html +++ b/tests/auto/quick/qmltests/data/favicon-shortcut.html diff --git a/tests/auto/quick/qmltests2/data/favicon-single.html b/tests/auto/quick/qmltests/data/favicon-single.html index eb4675c75..eb4675c75 100644 --- a/tests/auto/quick/qmltests2/data/favicon-single.html +++ b/tests/auto/quick/qmltests/data/favicon-single.html diff --git a/tests/auto/quick/qmltests2/data/favicon-touch.html b/tests/auto/quick/qmltests/data/favicon-touch.html index 271783434..271783434 100644 --- a/tests/auto/quick/qmltests2/data/favicon-touch.html +++ b/tests/auto/quick/qmltests/data/favicon-touch.html diff --git a/tests/auto/quick/qmltests2/data/favicon-unavailable.html b/tests/auto/quick/qmltests/data/favicon-unavailable.html index c45664294..c45664294 100644 --- a/tests/auto/quick/qmltests2/data/favicon-unavailable.html +++ b/tests/auto/quick/qmltests/data/favicon-unavailable.html diff --git a/tests/auto/quick/qmltests2/data/favicon2.html b/tests/auto/quick/qmltests/data/favicon2.html index 81c2690fe..81c2690fe 100644 --- a/tests/auto/quick/qmltests2/data/favicon2.html +++ b/tests/auto/quick/qmltests/data/favicon2.html diff --git a/tests/auto/quick/qmltests2/data/icons/gray128.png b/tests/auto/quick/qmltests/data/icons/gray128.png Binary files differindex bf1cfaba0..bf1cfaba0 100644 --- a/tests/auto/quick/qmltests2/data/icons/gray128.png +++ b/tests/auto/quick/qmltests/data/icons/gray128.png diff --git a/tests/auto/quick/qmltests2/data/icons/gray16.png b/tests/auto/quick/qmltests/data/icons/gray16.png Binary files differindex 2a1a91a76..2a1a91a76 100644 --- a/tests/auto/quick/qmltests2/data/icons/gray16.png +++ b/tests/auto/quick/qmltests/data/icons/gray16.png diff --git a/tests/auto/quick/qmltests2/data/icons/gray255.png b/tests/auto/quick/qmltests/data/icons/gray255.png Binary files differindex 549169551..549169551 100644 --- a/tests/auto/quick/qmltests2/data/icons/gray255.png +++ b/tests/auto/quick/qmltests/data/icons/gray255.png diff --git a/tests/auto/quick/qmltests2/data/icons/gray32.png b/tests/auto/quick/qmltests/data/icons/gray32.png Binary files differindex b269a528f..b269a528f 100644 --- a/tests/auto/quick/qmltests2/data/icons/gray32.png +++ b/tests/auto/quick/qmltests/data/icons/gray32.png diff --git a/tests/auto/quick/qmltests2/data/icons/gray64.png b/tests/auto/quick/qmltests/data/icons/gray64.png Binary files differindex e02559e5b..e02559e5b 100644 --- a/tests/auto/quick/qmltests2/data/icons/gray64.png +++ b/tests/auto/quick/qmltests/data/icons/gray64.png diff --git a/tests/auto/quick/qmltests2/data/icons/grayicons.ico b/tests/auto/quick/qmltests/data/icons/grayicons.ico Binary files differindex 8d8fee839..8d8fee839 100644 --- a/tests/auto/quick/qmltests2/data/icons/grayicons.ico +++ b/tests/auto/quick/qmltests/data/icons/grayicons.ico diff --git a/tests/auto/quick/qmltests2/data/icons/qt144.png b/tests/auto/quick/qmltests/data/icons/qt144.png Binary files differindex 050b1e066..050b1e066 100644 --- a/tests/auto/quick/qmltests2/data/icons/qt144.png +++ b/tests/auto/quick/qmltests/data/icons/qt144.png diff --git a/tests/auto/quick/qmltests2/data/icons/qt32.ico b/tests/auto/quick/qmltests/data/icons/qt32.ico Binary files differindex 2f6fcb5bc..2f6fcb5bc 100644 --- a/tests/auto/quick/qmltests2/data/icons/qt32.ico +++ b/tests/auto/quick/qmltests/data/icons/qt32.ico diff --git a/tests/auto/quick/qmltests2/data/icons/qtmulti.ico b/tests/auto/quick/qmltests/data/icons/qtmulti.ico Binary files differindex 81e5a22e8..81e5a22e8 100644 --- a/tests/auto/quick/qmltests2/data/icons/qtmulti.ico +++ b/tests/auto/quick/qmltests/data/icons/qtmulti.ico diff --git a/tests/auto/quick/qmltests2/data/icons/small-favicon.png b/tests/auto/quick/qmltests/data/icons/small-favicon.png Binary files differindex 8cf9a50a4..8cf9a50a4 100644 --- a/tests/auto/quick/qmltests2/data/icons/small-favicon.png +++ b/tests/auto/quick/qmltests/data/icons/small-favicon.png diff --git a/tests/auto/quick/qmltests2/data/multifileupload.html b/tests/auto/quick/qmltests/data/multifileupload.html index d41ea15c0..d41ea15c0 100644 --- a/tests/auto/quick/qmltests2/data/multifileupload.html +++ b/tests/auto/quick/qmltests/data/multifileupload.html diff --git a/tests/auto/quick/qmltests2/data/prompt.html b/tests/auto/quick/qmltests/data/prompt.html index 3293c0dcf..3293c0dcf 100644 --- a/tests/auto/quick/qmltests2/data/prompt.html +++ b/tests/auto/quick/qmltests/data/prompt.html diff --git a/tests/auto/quick/qmltests2/data/singlefileupload.html b/tests/auto/quick/qmltests/data/singlefileupload.html index ac91c2c0d..ac91c2c0d 100644 --- a/tests/auto/quick/qmltests2/data/singlefileupload.html +++ b/tests/auto/quick/qmltests/data/singlefileupload.html diff --git a/tests/auto/quick/qmltests2/data/titleupdate.js b/tests/auto/quick/qmltests/data/titleupdate.js index c86139c13..c86139c13 100644 --- a/tests/auto/quick/qmltests2/data/titleupdate.js +++ b/tests/auto/quick/qmltests/data/titleupdate.js diff --git a/tests/auto/quick/qmltests_ssl/data/tst_certificateError.qml b/tests/auto/quick/qmltests/data/tst_certificateError.qml index 48ba601ac..d6c7edfd8 100644 --- a/tests/auto/quick/qmltests_ssl/data/tst_certificateError.qml +++ b/tests/auto/quick/qmltests/data/tst_certificateError.qml @@ -85,7 +85,7 @@ TestWebEngineView { if (deferError) error.defer() else if (acceptCertificate) - error.ignoreCertificateError() + error.acceptCertificate() else error.rejectCertificate() } @@ -100,7 +100,7 @@ TestWebEngineView { let error = spyError.signalArguments[0][0] if (data.acceptCertificate) - error.ignoreCertificateError() + error.acceptCertificate() else error.rejectCertificate() } diff --git a/tests/auto/quick/qmltests/data/tst_download.qml b/tests/auto/quick/qmltests/data/tst_download.qml index 0674be491..a26060046 100644 --- a/tests/auto/quick/qmltests/data/tst_download.qml +++ b/tests/auto/quick/qmltests/data/tst_download.qml @@ -51,7 +51,6 @@ TestWebEngineView { property string downloadedSetPath: "" property int downloadDirectoryChanged: 0 property int downloadFileNameChanged: 0 - property int downloadPathChanged: 0 property bool setDirectoryFirst: false TempDir { id: tempDir } @@ -92,9 +91,6 @@ TestWebEngineView { function onDownloadFileNameChanged() { downloadFileNameChanged++; } - function onPathChanged() { - downloadPathChanged++; - } } WebEngineProfile { @@ -149,7 +145,6 @@ TestWebEngineView { downloadInterruptReason = null downloadDirectoryChanged = 0 downloadFileNameChanged = 0 - downloadPathChanged = 0 downloadDirectory = "" downloadFileName = "" downloadedPath = "" @@ -165,7 +160,7 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 1) compare(downloadUrl, webEngineView.url) compare(suggestedFileName, "download.zip") - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested) + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested) verify(!downloadInterruptReason) } @@ -189,11 +184,11 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 1) compare(downloadUrl, webEngineView.url) compare(suggestedFileName, "download.zip") - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested) - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress) + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested) + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadInProgress) downloadFinishedSpy.wait() compare(totalBytes, receivedBytes) - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted) + tryCompare(downloadState, "2", WebEngineDownloadRequest.DownloadCompleted) verify(!downloadInterruptReason) } @@ -206,8 +201,8 @@ TestWebEngineView { compare(downloadUrl, webEngineView.url) compare(suggestedFileName, "download.zip") compare(downloadFinishedSpy.count, 1) - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadCancelled) - tryCompare(webEngineView, "downloadInterruptReason", WebEngineDownloadItem.UserCanceled) + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadCancelled) + tryCompare(webEngineView, "downloadInterruptReason", WebEngineDownloadRequest.UserCanceled) } function test_downloadLocation() { @@ -240,15 +235,14 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 1); compare(downloadUrl, webEngineView.url); compare(suggestedFileName, "download.zip"); - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested); - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress); + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested); + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadInProgress); compare(downloadedPath, testDownloadProfile.downloadPath + downloadDirectory + downloadFileName); compare(downloadDirectoryChanged, 1); compare(downloadFileNameChanged, 1); - compare(downloadPathChanged, 2); downloadFinishedSpy.wait(); compare(totalBytes, receivedBytes); - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted); + tryCompare(downloadState, "2", WebEngineDownloadRequest.DownloadCompleted); verify(!downloadInterruptReason); } @@ -263,15 +257,14 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 1); compare(downloadUrl, webEngineView.url); compare(suggestedFileName, "download.zip"); - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested); - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress); + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested); + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadInProgress); compare(downloadedPath, testDownloadProfile.downloadPath + downloadDirectory + "download.zip"); compare(downloadDirectoryChanged, 1); compare(downloadFileNameChanged, 0); - compare(downloadPathChanged, 1); downloadFinishedSpy.wait(); compare(totalBytes, receivedBytes); - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted); + tryCompare(downloadState, "2", WebEngineDownloadRequest.DownloadCompleted); verify(!downloadInterruptReason); // Download the same file to another directory with suggested file name. @@ -280,22 +273,20 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 0); downloadDirectoryChanged = 0; downloadFileNameChanged = 0; - downloadPathChanged = 0; downloadDirectory = "/test_downloadToDirectoryWithSuggestedFileName1/"; webEngineView.url = Qt.resolvedUrl("download.zip"); downLoadRequestedSpy.wait(); compare(downLoadRequestedSpy.count, 1); compare(downloadUrl, webEngineView.url); compare(suggestedFileName, "download.zip"); - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested); - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress); + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested); + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadInProgress); compare(downloadedPath, testDownloadProfile.downloadPath + downloadDirectory + "download.zip"); compare(downloadDirectoryChanged, 1); compare(downloadFileNameChanged, 0); - compare(downloadPathChanged, 1); downloadFinishedSpy.wait(); compare(totalBytes, receivedBytes); - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted); + tryCompare(downloadState, "2", WebEngineDownloadRequest.DownloadCompleted); verify(!downloadInterruptReason); // Download same file to same directory second time -> file name should be unified. @@ -304,44 +295,20 @@ TestWebEngineView { compare(downLoadRequestedSpy.count, 0); downloadDirectoryChanged = 0; downloadFileNameChanged = 0; - downloadPathChanged = 0; downloadDirectory = "/test_downloadToDirectoryWithSuggestedFileName1/"; webEngineView.url = Qt.resolvedUrl("download.zip"); downLoadRequestedSpy.wait(); compare(downLoadRequestedSpy.count, 1); compare(downloadUrl, webEngineView.url); compare(suggestedFileName, "download.zip"); - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested); - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress); + compare(downloadState[0], WebEngineDownloadRequest.DownloadRequested); + tryCompare(downloadState, "1", WebEngineDownloadRequest.DownloadInProgress); compare(downloadedPath, testDownloadProfile.downloadPath + downloadDirectory + "download (1).zip"); compare(downloadDirectoryChanged, 1); compare(downloadFileNameChanged, 1); - compare(downloadPathChanged, 1); - downloadFinishedSpy.wait(); - compare(totalBytes, receivedBytes); - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted); - verify(!downloadInterruptReason); -} - - function test_downloadWithSetPath() { - compare(downLoadRequestedSpy.count, 0); - compare(downloadDirectoryChanged, 0); - compare(downloadFileNameChanged, 0); - downloadedSetPath = "/test_downloadWithSetPath/test.zip"; - webEngineView.url = Qt.resolvedUrl("download.zip"); - downLoadRequestedSpy.wait(); - compare(downLoadRequestedSpy.count, 1); - compare(downloadUrl, webEngineView.url); - compare(suggestedFileName, "download.zip"); - compare(downloadState[0], WebEngineDownloadItem.DownloadRequested); - tryCompare(downloadState, "1", WebEngineDownloadItem.DownloadInProgress); - compare(downloadedPath, testDownloadProfile.downloadPath + downloadedSetPath); - compare(downloadDirectoryChanged, 1); - compare(downloadFileNameChanged, 1); - compare(downloadPathChanged, 2); downloadFinishedSpy.wait(); compare(totalBytes, receivedBytes); - tryCompare(downloadState, "2", WebEngineDownloadItem.DownloadCompleted); + tryCompare(downloadState, "2", WebEngineDownloadRequest.DownloadCompleted); verify(!downloadInterruptReason); } } diff --git a/tests/auto/quick/qmltests2/data/tst_favicon.qml b/tests/auto/quick/qmltests/data/tst_favicon.qml index ea5d20f17..fc8b90542 100644 --- a/tests/auto/quick/qmltests2/data/tst_favicon.qml +++ b/tests/auto/quick/qmltests/data/tst_favicon.qml @@ -47,8 +47,8 @@ TestWebEngineView { return success } - errorPage.onLoadingChanged: { - errorPageLoadStatus = loadRequest.status + errorPage.onLoadingChanged: function(load) { + errorPageLoadStatus = load.status } } diff --git a/tests/auto/quick/qmltests2/data/tst_faviconDownload.qml b/tests/auto/quick/qmltests/data/tst_faviconDownload.qml index 7d9c39814..7d9c39814 100644 --- a/tests/auto/quick/qmltests2/data/tst_faviconDownload.qml +++ b/tests/auto/quick/qmltests/data/tst_faviconDownload.qml diff --git a/tests/auto/quick/qmltests2/data/tst_filePicker.qml b/tests/auto/quick/qmltests/data/tst_filePicker.qml index 4313c8d9e..4313c8d9e 100644 --- a/tests/auto/quick/qmltests2/data/tst_filePicker.qml +++ b/tests/auto/quick/qmltests/data/tst_filePicker.qml diff --git a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml index d1c894699..4cfbbf090 100644 --- a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml +++ b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml @@ -126,8 +126,8 @@ TestWebEngineView { signalName: "loadFinished" } - onLoadingChanged: { - if (loadRequest.status == WebEngineLoadRequest.LoadSucceededStatus) { + onLoadingChanged: function(load) { + if (load.status == WebEngineView.LoadSucceededStatus) { loadFinished() } } diff --git a/tests/auto/quick/qmltests2/data/tst_inputMethod.qml b/tests/auto/quick/qmltests/data/tst_inputMethod.qml index 00f85cb71..00f85cb71 100644 --- a/tests/auto/quick/qmltests2/data/tst_inputMethod.qml +++ b/tests/auto/quick/qmltests/data/tst_inputMethod.qml diff --git a/tests/auto/quick/qmltests2/data/tst_javaScriptDialogs.qml b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml index a521ea0d6..a521ea0d6 100644 --- a/tests/auto/quick/qmltests2/data/tst_javaScriptDialogs.qml +++ b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml diff --git a/tests/auto/quick/qmltests2/data/tst_linkHovered.qml b/tests/auto/quick/qmltests/data/tst_linkHovered.qml index faf943c55..faf943c55 100644 --- a/tests/auto/quick/qmltests2/data/tst_linkHovered.qml +++ b/tests/auto/quick/qmltests/data/tst_linkHovered.qml diff --git a/tests/auto/quick/qmltests2/data/tst_loadFail.qml b/tests/auto/quick/qmltests/data/tst_loadFail.qml index 298f5b0fe..c27ae8b0f 100644 --- a/tests/auto/quick/qmltests2/data/tst_loadFail.qml +++ b/tests/auto/quick/qmltests/data/tst_loadFail.qml @@ -49,28 +49,28 @@ TestWebEngineView { return success } - errorPage.onLoadingChanged: { - errorPageLoadStatus = loadRequest.status + errorPage.onLoadingChanged: function(load) { + errorPageLoadStatus = load.status loadRequestArray.push({ - "status": loadRequest.status, - "url": loadRequest.url.toString(), - "errorDomain": loadRequest.errorDomain, + "status": load.status, + "url": load.url.toString(), + "errorDomain": load.errorDomain, "isErrorPage": true }) } } - onLoadingChanged: { - if (loadRequest.status == WebEngineView.LoadFailedStatus) { - test.compare(loadRequest.url, unavailableUrl) - test.compare(loadRequest.errorDomain, WebEngineView.InternalErrorDomain) + onLoadingChanged: function(load) { + if (load.status == WebEngineView.LoadFailedStatus) { + test.compare(load.url, unavailableUrl) + test.compare(load.errorDomain, WebEngineView.InternalErrorDomain) } loadRequestArray.push({ - "status": loadRequest.status, - "url": loadRequest.url.toString(), - "errorDomain": loadRequest.errorDomain, + "status": load.status, + "url": load.url.toString(), + "errorDomain": load.errorDomain, "isErrorPage": false }) } diff --git a/tests/auto/quick/qmltests/data/tst_loadUrl.qml b/tests/auto/quick/qmltests/data/tst_loadUrl.qml index 08987e4c3..b60a00faf 100644 --- a/tests/auto/quick/qmltests/data/tst_loadUrl.qml +++ b/tests/auto/quick/qmltests/data/tst_loadUrl.qml @@ -37,10 +37,10 @@ TestWebEngineView { property var loadRequestArray: [] - onLoadingChanged: { + onLoadingChanged: function(load) { loadRequestArray.push({ - "status": loadRequest.status, - "url": loadRequest.url, + "status": load.status, + "url": load.url, "activeUrl": webEngineView.url }); } diff --git a/tests/auto/quick/qmltests2/data/tst_mouseClick.qml b/tests/auto/quick/qmltests/data/tst_mouseClick.qml index 6c314d44c..6c314d44c 100644 --- a/tests/auto/quick/qmltests2/data/tst_mouseClick.qml +++ b/tests/auto/quick/qmltests/data/tst_mouseClick.qml diff --git a/tests/auto/quick/qmltests/data/tst_newViewRequest.qml b/tests/auto/quick/qmltests/data/tst_newViewRequest.qml index 891b140e2..fd720befe 100644 --- a/tests/auto/quick/qmltests/data/tst_newViewRequest.qml +++ b/tests/auto/quick/qmltests/data/tst_newViewRequest.qml @@ -40,9 +40,9 @@ TestWebEngineView { property string viewType: "" property var loadRequestArray: [] - onLoadingChanged: { + onLoadingChanged: function(load) { loadRequestArray.push({ - "status": loadRequest.status, + "status": load.status, }); } diff --git a/tests/auto/quick/qmltests/data/tst_userScripts.qml b/tests/auto/quick/qmltests/data/tst_userScripts.qml index f4fcc30ab..4d0bd28bf 100644 --- a/tests/auto/quick/qmltests/data/tst_userScripts.qml +++ b/tests/auto/quick/qmltests/data/tst_userScripts.qml @@ -31,32 +31,33 @@ import QtTest 1.0 import QtWebEngine 1.2 Item { - WebEngineScript { - id: changeDocumentTitleScript - sourceUrl: Qt.resolvedUrl("change-document-title.js") - injectionPoint: WebEngineScript.DocumentReady + + function changeDocumentTitleScript() { + return { name: "changeDocumentTitleScript", + sourceUrl: Qt.resolvedUrl("change-document-title.js"), + injectionPoint: WebEngineScript.DocumentReady } } - WebEngineScript { - id: appendDocumentTitleScript - sourceUrl: Qt.resolvedUrl("append-document-title.js") - injectionPoint: WebEngineScript.DocumentReady + function appendDocumentTitleScript() { + return { sourceUrl: Qt.resolvedUrl("append-document-title.js"), + injectionPoint: WebEngineScript.DocumentReady } } - WebEngineScript { - id: bigUserScript - sourceUrl: Qt.resolvedUrl("big-user-script.js") - injectionPoint: WebEngineScript.DocumentReady + function bigUserScript() { + return { sourceUrl: Qt.resolvedUrl("big-user-script.js"), + injectionPoint: WebEngineScript.DocumentReady } } - WebEngineScript { - id: scriptWithMetadata - sourceUrl: Qt.resolvedUrl("script-with-metadata.js") + function scriptWithMetadata() { + var script = WebEngine.script() + script.sourceUrl = Qt.resolvedUrl("script-with-metadata.js") + return script } - WebEngineScript { - id: scriptWithBadMatchMetadata - sourceUrl: Qt.resolvedUrl("script-with-bad-match-metadata.js") + function scriptWithBadMatchMetadata() { + var script = WebEngine.script() + script.sourceUrl = Qt.resolvedUrl("script-with-bad-match-metadata.js") + return script } TestWebEngineView { @@ -79,21 +80,22 @@ Item { onNavigationRequested: { var urlString = request.url.toString(); if (urlString.indexOf("test1.html") !== -1) - userScripts = [ changeDocumentTitleScript ]; + userScripts.collection = [ changeDocumentTitleScript() ]; else if (urlString.indexOf("test2.html") !== -1) - userScripts = [ appendDocumentTitleScript ]; + userScripts.collection = [ appendDocumentTitleScript() ]; else - userScripts = []; + userScripts.collection = []; } } TestCase { name: "WebEngineViewUserScripts" + function init() { webEngineView.url = ""; - webEngineView.userScripts = []; - webEngineView.profile.userScripts = []; + webEngineView.userScripts.collection = []; + webEngineView.profile.userScripts.collection = []; } function test_oneScript() { @@ -101,7 +103,8 @@ Item { webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "Test page 1"); - webEngineView.userScripts = [ changeDocumentTitleScript ]; + webEngineView.userScripts.collection = [ changeDocumentTitleScript() ] + compare(webEngineView.title, "Test page 1"); webEngineView.reload(); @@ -112,7 +115,7 @@ Item { webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "New title"); - webEngineView.userScripts = []; + webEngineView.userScripts.collection = []; compare(webEngineView.title, "New title"); webEngineView.reload(); @@ -124,23 +127,25 @@ Item { webEngineView.url = Qt.resolvedUrl("test1.html"); webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "Test page 1"); - - webEngineView.userScripts = [ changeDocumentTitleScript, appendDocumentTitleScript ]; + var script1 = changeDocumentTitleScript(); + var script2 = appendDocumentTitleScript(); + script2.injectionPoint = WebEngineScript.Deferred; + webEngineView.userScripts.collection = [ script1, script2 ]; // Make sure the scripts are loaded in order. - appendDocumentTitleScript.injectionPoint = WebEngineScript.Deferred webEngineView.reload(); webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "New title with appendix"); - appendDocumentTitleScript.injectionPoint = WebEngineScript.DocumentReady - changeDocumentTitleScript.injectionPoint = WebEngineScript.Deferred + script2.injectionPoint = WebEngineScript.DocumentReady + script1.injectionPoint = WebEngineScript.Deferred + webEngineView.userScripts.collection = [ script1, script2 ]; webEngineView.reload(); webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "New title"); // Make sure we can remove scripts from the preload list. - webEngineView.userScripts = [ appendDocumentTitleScript ]; + webEngineView.userScripts.collection = [ script2 ]; webEngineView.reload(); webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView, "title", "Test page 1 with appendix"); @@ -163,17 +168,18 @@ Item { } function test_bigScript() { - webEngineView.userScripts = [ bigUserScript ]; + webEngineView.userScripts.collection = [ bigUserScript() ]; webEngineView.url = Qt.resolvedUrl("test1.html"); webEngineView.waitForLoadSucceeded(); tryCompare(webEngineView , "title", "Big user script changed title"); } function test_parseMetadataHeader() { - compare(scriptWithMetadata.name, "Test script"); - compare(scriptWithMetadata.injectionPoint, WebEngineScript.DocumentReady); + var script = scriptWithMetadata() + compare(script.name, "Test script"); + compare(script.injectionPoint, WebEngineScript.DocumentReady); - webEngineView.userScripts = [ scriptWithMetadata ]; + webEngineView.userScripts.collection = [ script ]; // @include *data/test*.html webEngineView.url = Qt.resolvedUrl("test1.html"); @@ -197,10 +203,11 @@ Item { } function test_dontInjectBadUrlPatternsEverywhere() { - compare(scriptWithBadMatchMetadata.name, "Test bad match script"); - compare(scriptWithBadMatchMetadata.injectionPoint, WebEngineScript.DocumentReady); + var script = scriptWithBadMatchMetadata(); + compare(script.name, "Test bad match script"); + compare(script.injectionPoint, WebEngineScript.DocumentReady); - webEngineView.userScripts = [ scriptWithBadMatchMetadata ]; + webEngineView.userScripts.collection = [ script ]; // @match some:junk webEngineView.url = Qt.resolvedUrl("test2.html"); @@ -209,7 +216,7 @@ Item { } function test_profileWideScript() { - webEngineView.profile.userScripts = [ changeDocumentTitleScript ]; + webEngineView.profile.userScripts.collection = [ changeDocumentTitleScript() ]; webEngineView.url = Qt.resolvedUrl("test1.html"); webEngineView.waitForLoadSucceeded(); diff --git a/tests/auto/quick/qmltests2/data/tst_viewSoure.qml b/tests/auto/quick/qmltests/data/tst_viewSoure.qml index 28f7e8344..1ee687f34 100644 --- a/tests/auto/quick/qmltests2/data/tst_viewSoure.qml +++ b/tests/auto/quick/qmltests/data/tst_viewSoure.qml @@ -41,18 +41,18 @@ TestWebEngineView { property var loadRequestArray: [] testSupport: WebEngineTestSupport { - errorPage.onLoadingChanged: { + errorPage.onLoadingChanged: function(load) { loadRequestArray.push({ - "status": loadRequest.status, - "url": loadRequest.url + "status": load.status, + "url": load.url }) } } - onLoadingChanged: { + onLoadingChanged: function(load) { loadRequestArray.push({ - "status": loadRequest.status, - "url": loadRequest.url + "status": load.status, + "url": load.url }); } @@ -94,7 +94,7 @@ TestWebEngineView { function test_viewSourceURL_data() { var testLocalUrl = "view-source:" + Qt.resolvedUrl("test1.html"); - var testLocalUrlWithoutScheme = "view-source:" + Qt.resolvedUrl("test1.html").substring(7); + var testLocalUrlWithoutScheme = "view-source:" + Qt.resolvedUrl("test1.html").toString().substring(7); return [ { tag: "view-source:", userInputUrl: "view-source:", loadSucceed: true, url: "view-source:", title: "view-source:" }, diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml index 4ba3be4b9..4ba3be4b9 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml index 9933fc2f7..9933fc2f7 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml index 745f533f5..745f533f5 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml index 36efa7680..36efa7680 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml index e61f4c230..e61f4c230 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml index 7c5b16eab..7c5b16eab 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/qmldir b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/qmldir index cf8ac0512..cf8ac0512 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/QtWebEngine/Controls1Delegates/qmldir +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/qmldir diff --git a/tests/auto/quick/qmltests2/mock-delegates/TestParams/FilePickerParams.qml b/tests/auto/quick/qmltests/mock-delegates/TestParams/FilePickerParams.qml index 02b0da1d4..02b0da1d4 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/TestParams/FilePickerParams.qml +++ b/tests/auto/quick/qmltests/mock-delegates/TestParams/FilePickerParams.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/TestParams/JSDialogParams.qml b/tests/auto/quick/qmltests/mock-delegates/TestParams/JSDialogParams.qml index 70696803c..70696803c 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/TestParams/JSDialogParams.qml +++ b/tests/auto/quick/qmltests/mock-delegates/TestParams/JSDialogParams.qml diff --git a/tests/auto/quick/qmltests2/mock-delegates/TestParams/qmldir b/tests/auto/quick/qmltests/mock-delegates/TestParams/qmldir index 5807f1e6e..5807f1e6e 100644 --- a/tests/auto/quick/qmltests2/mock-delegates/TestParams/qmldir +++ b/tests/auto/quick/qmltests/mock-delegates/TestParams/qmldir diff --git a/tests/auto/quick/qmltests/qmltests.pro b/tests/auto/quick/qmltests/qmltests.pro index a50bfd7e6..e5e84d3c7 100644 --- a/tests/auto/quick/qmltests/qmltests.pro +++ b/tests/auto/quick/qmltests/qmltests.pro @@ -1,46 +1,25 @@ +include($$QTWEBENGINE_OUT_ROOT/src/webenginequick/qtwebenginequick-config.pri) # workaround for QTBUG-68093 +QT_FOR_CONFIG += webenginequick-private + include(../tests.pri) -include(../../shared/http.pri) QT += qmltest - +DEFINES += QUICK_TEST_SOURCE_DIR=\\\"$$re_escape($$OUT_PWD$${QMAKE_DIR_SEP}webengine.qmltests)\\\" IMPORTPATH += $$PWD/data -OTHER_FILES += \ - $$PWD/data/TestWebEngineView.qml \ - $$PWD/data/append-document-title.js \ - $$PWD/data/big-user-script.js \ - $$PWD/data/change-document-title.js \ - $$PWD/data/download.zip \ - $$PWD/data/directoryupload.html \ - $$PWD/data/favicon.html \ - $$PWD/data/forms.html \ - $$PWD/data/geolocation.html \ - $$PWD/data/javascript.html \ - $$PWD/data/link.html \ - $$PWD/data/localStorage.html \ - $$PWD/data/multifileupload.html \ - $$PWD/data/redirect.html \ - $$PWD/data/script-with-metadata.js \ - $$PWD/data/singlefileupload.html \ - $$PWD/data/test1.html \ - $$PWD/data/test2.html \ - $$PWD/data/test3.html \ - $$PWD/data/test4.html \ - $$PWD/data/test-iframe.html \ - $$PWD/data/keyboardModifierMapping.html \ - $$PWD/data/keyboardEvents.html \ - $$PWD/data/titleupdate.js \ +QML_TESTS = \ $$PWD/data/tst_action.qml \ $$PWD/data/tst_activeFocusOnPress.qml \ $$PWD/data/tst_audioMuted.qml \ - $$PWD/data/tst_contextMenu.qml \ $$PWD/data/tst_desktopBehaviorLoadHtml.qml \ $$PWD/data/tst_download.qml \ - $$PWD/data/tst_filePicker.qml \ $$PWD/data/tst_findText.qml \ $$PWD/data/tst_focusOnNavigation.qml \ + $$PWD/data/tst_fullScreenRequest.qml \ $$PWD/data/tst_geopermission.qml \ $$PWD/data/tst_getUserMedia.qml \ + $$PWD/data/tst_keyboardEvents.qml \ + $$PWD/data/tst_keyboardModifierMapping.qml \ $$PWD/data/tst_loadHtml.qml \ $$PWD/data/tst_loadProgress.qml \ $$PWD/data/tst_loadRecursionCrash.qml \ @@ -54,16 +33,125 @@ OTHER_FILES += \ $$PWD/data/tst_properties.qml \ $$PWD/data/tst_runJavaScript.qml \ $$PWD/data/tst_scrollPosition.qml \ + $$PWD/data/tst_settings.qml \ $$PWD/data/tst_titleChanged.qml \ $$PWD/data/tst_unhandledKeyEventPropagation.qml \ $$PWD/data/tst_userScripts.qml \ - $$PWD/data/tst_viewSource.qml \ - $$PWD/data/tst_webchannel.qml \ - $$PWD/data/tst_settings.qml \ - $$PWD/data/tst_keyboardModifierMapping.qml \ - $$PWD/data/tst_keyboardEvents.qml \ - $$PWD/data/webchannel-test.html \ + $$PWD/data/tst_viewSource.qml + +qtConfig(webengine-webchannel) { + QML_TESTS += $$PWD/data/tst_webchannel.qml +} + +qtConfig(ssl) { + include(../../shared/https.pri) + QML_TESTS += $$PWD/data/tst_certificateError.qml +} else { + include(../../shared/http.pri) +} + +qtConfig(webenginequick-testsupport) { + QML_TESTS += \ + $$PWD/data/tst_favicon.qml \ + $$PWD/data/tst_faviconDownload.qml \ + $$PWD/data/tst_inputMethod.qml \ + $$PWD/data/tst_linkHovered.qml \ + $$PWD/data/tst_loadFail.qml \ + $$PWD/data/tst_mouseClick.qml \ + $$PWD/data/tst_viewSoure.qml + qtHaveModule(quickcontrols): QML_TESTS += $$PWD/data/tst_javaScriptDialogs.qml +} else { + PLUGIN_EXTENSION = .so + PLUGIN_PREFIX = lib + macos: PLUGIN_PREFIX = .dylib + win32 { + PLUGIN_EXTENSION = .dll + PLUGIN_PREFIX = + } + + TESTSUPPORT_MODULE = $$shell_path($$[QT_INSTALL_QML]/QtWebEngine/testsupport/$${PLUGIN_PREFIX}qtwebenginetestsupportplugin$${PLUGIN_EXTENSION}) + BUILD_DIR = $$shell_path($$clean_path($$OUT_PWD/../../../..)) + SRC_DIR = $$shell_path($$clean_path($$PWD/../../../..)) + + warning("QML Test Support API is disabled. This means some QML tests that use Test Support API will fail.") + warning("Use the following command to build Test Support module and rebuild WebEngineView API:") + warning("cd $$BUILD_DIR && qmake -r $$shell_path($$SRC_DIR/qtwebengine.pro -- --feature-testsupport=yes) && make -C $$shell_path($$BUILD_DIR/src/webengine) clean && make") + warning("After performing the command above make sure QML module \"QtWebEngine.testsupport\" is deployed at $$TESTSUPPORT_MODULE") +} + +qtHaveModule(quickcontrols) { + QML_TESTS += \ + $$PWD/data/tst_contextMenu.qml \ + $$PWD/data/tst_filePicker.qml +} + +OTHER_FILES += \ + $$PWD/data/TestWebEngineView.qml \ + $$PWD/data/accepttypes.html \ + $$PWD/data/alert.html \ + $$PWD/data/confirm.html \ + $$PWD/data/confirmclose.html \ + $$PWD/data/append-document-title.js \ + $$PWD/data/big-user-script.js \ + $$PWD/data/change-document-title.js \ + $$PWD/data/download.zip \ + $$PWD/data/directoryupload.html \ + $$PWD/data/favicon.html \ + $$PWD/data/favicon2.html \ + $$PWD/data/favicon-candidates-gray.html \ + $$PWD/data/favicon-misc.html \ + $$PWD/data/favicon-multi.html \ + $$PWD/data/favicon-multi-gray.html \ + $$PWD/data/favicon-single.html \ + $$PWD/data/favicon-shortcut.html \ + $$PWD/data/favicon-touch.html \ + $$PWD/data/favicon-unavailable.html \ + $$PWD/data/forms.html \ + $$PWD/data/geolocation.html \ + $$PWD/data/javascript.html \ + $$PWD/data/link.html \ + $$PWD/data/localStorage.html \ + $$PWD/data/multifileupload.html \ + $$PWD/data/redirect.html \ + $$PWD/data/script-with-metadata.js \ + $$PWD/data/singlefileupload.html \ + $$PWD/data/test1.html \ + $$PWD/data/test2.html \ + $$PWD/data/test3.html \ + $$PWD/data/test4.html \ + $$PWD/data/test-iframe.html \ + $$PWD/data/keyboardModifierMapping.html \ + $$PWD/data/keyboardEvents.html \ + $$PWD/data/titleupdate.js \ $$PWD/data/icons/favicon.png \ + $$PWD/data/icons/gray128.png \ + $$PWD/data/icons/gray16.png \ + $$PWD/data/icons/gray255.png \ + $$PWD/data/icons/gray32.png \ + $$PWD/data/icons/gray64.png \ + $$PWD/data/icons/grayicons.ico \ + $$PWD/data/icons/qt144.png \ + $$PWD/data/icons/qt32.ico \ + $$PWD/data/icons/qtmulti.ico \ + $$PWD/data/icons/small-favicon.png \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml \ + $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/qmldir \ + $$PWD/mock-delegates/TestParams/FilePickerParams.qml \ + $$PWD/mock-delegates/TestParams/JSDialogParams.qml \ + $$PWD/mock-delegates/TestParams/qmldir + +OTHER_FILES += $$QML_TESTS + +!build_pass:!isEmpty(QML_TESTS) { + for (file, QML_TESTS): QML_TESTS_CONTENT += "$${file}" + TEST_FILE = $$OUT_PWD/webengine.qmltests + write_file($$TEST_FILE, QML_TESTS_CONTENT) +} load(qt_build_paths) -DEFINES += QUICK_TEST_SOURCE_DIR=\\\"$$re_escape($$PWD$${QMAKE_DIR_SEP}data)\\\" + diff --git a/tests/auto/quick/qmltests/tst_qmltests.cpp b/tests/auto/quick/qmltests/tst_qmltests.cpp index 5677f9047..906de29ad 100644 --- a/tests/auto/quick/qmltests/tst_qmltests.cpp +++ b/tests/auto/quick/qmltests/tst_qmltests.cpp @@ -28,10 +28,14 @@ #include <httpserver.h> +#if QT_CONFIG(ssl) +#include <httpsserver.h> +#endif + #include <QtCore/QScopedPointer> #include <QTemporaryDir> #include <QtQuickTest/quicktest.h> -#include <QtWebEngine/QQuickWebEngineProfile> +#include <QtWebEngineQuick/QQuickWebEngineProfile> #include <QQmlEngine> #include "qt_webengine_quicktest.h" @@ -130,7 +134,7 @@ int main(int argc, char **argv) QLocale::setDefault(QLocale("en")); static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")}; - QVector<const char *> w_argv(argc); \ + QList<const char *> w_argv(argc); \ for (int i = 0; i < argc; ++i) \ w_argv[i] = argv[i]; \ for (int i = 0; i < params.size(); ++i) \ @@ -151,6 +155,12 @@ int main(int argc, char **argv) return server; }); +#if QT_CONFIG(ssl) + qmlRegisterSingletonType<HttpsServer>( + "Test.Shared", 1, 0, "HttpsServer", + [&](QQmlEngine *, QJSEngine *) { return new HttpsServer; }); +#endif + int i = quick_test_main(argc, argv, "qmltests", QUICK_TEST_SOURCE_DIR); return i; } diff --git a/tests/auto/quick/qmltests2/data/favicon.html b/tests/auto/quick/qmltests2/data/favicon.html deleted file mode 100644 index e1b84a9cc..000000000 --- a/tests/auto/quick/qmltests2/data/favicon.html +++ /dev/null @@ -1,10 +0,0 @@ -<html> -<head> -<link type="image/png" href="icons/favicon.png" sizes="48x48" rel="icon" /> -</head> -<body> -<p>It's expected that you see a favicon displayed for this page when you open it as a local file.</p> -<p>The favicon looks like this:</p> -<img id='image' src="icons/favicon.png"/> -</body> -</html> diff --git a/tests/auto/quick/qmltests2/data/icons/favicon.png b/tests/auto/quick/qmltests2/data/icons/favicon.png Binary files differdeleted file mode 100644 index 35717cca5..000000000 --- a/tests/auto/quick/qmltests2/data/icons/favicon.png +++ /dev/null diff --git a/tests/auto/quick/qmltests2/data/test1.html b/tests/auto/quick/qmltests2/data/test1.html deleted file mode 100644 index 5c09f06ed..000000000 --- a/tests/auto/quick/qmltests2/data/test1.html +++ /dev/null @@ -1,6 +0,0 @@ -<html> -<head><title>Test page 1</title></head> -<body> -Hello. -</body> -</html> diff --git a/tests/auto/quick/qmltests2/data/test2.html b/tests/auto/quick/qmltests2/data/test2.html deleted file mode 100644 index 629c2a063..000000000 --- a/tests/auto/quick/qmltests2/data/test2.html +++ /dev/null @@ -1,6 +0,0 @@ -<html> -<head><title>Test page with huge link area</title></head> -<body> -<a title="A title" href="test1.html"><img width=200 height=200></a> -</body> -</html> diff --git a/tests/auto/quick/qmltests2/qmltests2.pro b/tests/auto/quick/qmltests2/qmltests2.pro deleted file mode 100644 index 98e33972b..000000000 --- a/tests/auto/quick/qmltests2/qmltests2.pro +++ /dev/null @@ -1,79 +0,0 @@ -include(../tests.pri) - -QT += qmltest - -IMPORTPATH += $$PWD/data - -OTHER_FILES += \ - $$PWD/data/accepttypes.html \ - $$PWD/data/alert.html \ - $$PWD/data/confirm.html \ - $$PWD/data/confirmclose.html \ - $$PWD/data/directoryupload.html \ - $$PWD/data/favicon.html \ - $$PWD/data/favicon2.html \ - $$PWD/data/favicon-candidates-gray.html \ - $$PWD/data/favicon-misc.html \ - $$PWD/data/favicon-multi.html \ - $$PWD/data/favicon-multi-gray.html \ - $$PWD/data/favicon-single.html \ - $$PWD/data/favicon-shortcut.html \ - $$PWD/data/favicon-touch.html \ - $$PWD/data/favicon-unavailable.html \ - $$PWD/data/multifileupload.html \ - $$PWD/data/prompt.html \ - $$PWD/data/singlefileupload.html \ - $$PWD/data/test1.html \ - $$PWD/data/test2.html \ - $$PWD/data/titleupdate.js \ - $$PWD/data/tst_favicon.qml \ - $$PWD/data/tst_faviconDownload.qml \ - $$PWD/data/tst_inputMethod.qml \ - $$PWD/data/tst_javaScriptDialogs.qml \ - $$PWD/data/tst_linkHovered.qml \ - $$PWD/data/tst_loadFail.qml \ - $$PWD/data/tst_mouseClick.qml \ - $$PWD/data/tst_viewSource.qml \ - $$PWD/data/icons/favicon.png \ - $$PWD/data/icons/gray128.png \ - $$PWD/data/icons/gray16.png \ - $$PWD/data/icons/gray255.png \ - $$PWD/data/icons/gray32.png \ - $$PWD/data/icons/gray64.png \ - $$PWD/data/icons/grayicons.ico \ - $$PWD/data/icons/qt144.png \ - $$PWD/data/icons/qt32.ico \ - $$PWD/data/icons/qtmulti.ico \ - $$PWD/data/icons/small-favicon.png \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/AlertDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/ConfirmDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/FilePicker.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/Menu.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/MenuItem.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/PromptDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/qmldir \ - $$PWD/mock-delegates/TestParams/FilePickerParams.qml \ - $$PWD/mock-delegates/TestParams/JSDialogParams.qml \ - $$PWD/mock-delegates/TestParams/qmldir \ - -load(qt_build_paths) -DEFINES += QUICK_TEST_SOURCE_DIR=\\\"$$re_escape($$PWD$${QMAKE_DIR_SEP}data)\\\" - -!qtConfig(webengine-testsupport) { - PLUGIN_EXTENSION = .so - PLUGIN_PREFIX = lib - osx: PLUGIN_PREFIX = .dylib - win32 { - PLUGIN_EXTENSION = .dll - PLUGIN_PREFIX = - } - - TESTSUPPORT_MODULE = $$shell_path($$[QT_INSTALL_QML]/QtWebEngine/testsupport/$${PLUGIN_PREFIX}qtwebenginetestsupportplugin$${PLUGIN_EXTENSION}) - BUILD_DIR = $$shell_path($$clean_path($$OUT_PWD/../../../..)) - SRC_DIR = $$shell_path($$clean_path($$PWD/../../../..)) - - warning("QML Test Support API is disabled. This means some QML tests that use Test Support API will fail.") - warning("Use the following command to build Test Support module and rebuild WebEngineView API:") - warning("cd $$BUILD_DIR && qmake -r $$shell_path($$SRC_DIR/qtwebengine.pro -- --feature-testsupport=yes) && make -C $$shell_path($$BUILD_DIR/src/webengine) clean && make") - warning("After performing the command above make sure QML module \"QtWebEngine.testsupport\" is deployed at $$TESTSUPPORT_MODULE") -} diff --git a/tests/auto/quick/qmltests2/tst_qmltests2.cpp b/tests/auto/quick/qmltests2/tst_qmltests2.cpp deleted file mode 100644 index 8c81ed7f5..000000000 --- a/tests/auto/quick/qmltests2/tst_qmltests2.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtCore/QScopedPointer> -#include <QtQuickTest/quicktest.h> -#include <QtWebEngine/QQuickWebEngineProfile> -#include "qt_webengine_quicktest.h" - -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) -#include <fcntl.h> -#include <signal.h> -#include <unistd.h> -#endif - -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) -static bool debuggerPresent() -{ - int fd = open("/proc/self/status", O_RDONLY); - if (fd == -1) - return false; - char buffer[2048]; - ssize_t size = read(fd, buffer, sizeof(buffer) - 1); - if (size == -1) { - close(fd); - return false; - } - buffer[size] = 0; - const char tracerPidToken[] = "\nTracerPid:"; - char *tracerPid = strstr(buffer, tracerPidToken); - if (!tracerPid) { - close(fd); - return false; - } - tracerPid += sizeof(tracerPidToken); - long int pid = strtol(tracerPid, &tracerPid, 10); - close(fd); - return pid != 0; -} - -static void stackTrace() -{ - bool ok = false; - const int disableStackDump = qEnvironmentVariableIntValue("QTEST_DISABLE_STACK_DUMP", &ok); - if (ok && disableStackDump == 1) - return; - - if (debuggerPresent()) - return; - - fprintf(stderr, "\n========= Received signal, dumping stack ==============\n"); - char cmd[512]; - qsnprintf(cmd, 512, "gdb --pid %d 2>/dev/null <<EOF\n" - "set prompt\n" - "set height 0\n" - "thread apply all where full\n" - "detach\n" - "quit\n" - "EOF\n", - (int)getpid()); - - if (system(cmd) == -1) - fprintf(stderr, "calling gdb failed\n"); - fprintf(stderr, "========= End of stack trace ==============\n"); -} - -static void sigSegvHandler(int signum) -{ - stackTrace(); - qFatal("Received signal %d", signum); -} -#endif - -int main(int argc, char **argv) -{ -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) - struct sigaction sigAction; - - sigemptyset(&sigAction.sa_mask); - sigAction.sa_handler = &sigSegvHandler; - sigAction.sa_flags = 0; - - sigaction(SIGSEGV, &sigAction, 0); -#endif - - // Inject the mock ui delegates module - qputenv("QML2_IMPORT_PATH", QByteArray(TESTS_SOURCE_DIR "qmltests2/mock-delegates")); - QScopedPointer<Application> app; - - // Force to use English language for testing due to error message checks - QLocale::setDefault(QLocale("en")); - - if (!QCoreApplication::instance()) { - app.reset(new Application(argc, argv)); - } - QtWebEngine::initialize(); - QQuickWebEngineProfile::defaultProfile()->setOffTheRecord(true); - - QTEST_SET_MAIN_SOURCE_PATH - - int i = quick_test_main(argc, argv, "qmltests2", QUICK_TEST_SOURCE_DIR); - return i; -} diff --git a/tests/auto/quick/qmltests_ssl/BLACKLIST b/tests/auto/quick/qmltests_ssl/BLACKLIST deleted file mode 100644 index d60926525..000000000 --- a/tests/auto/quick/qmltests_ssl/BLACKLIST +++ /dev/null @@ -1,2 +0,0 @@ -[CertificateError::test_error] -macos diff --git a/tests/auto/quick/qmltests_ssl/data/TestWebEngineView.qml b/tests/auto/quick/qmltests_ssl/data/TestWebEngineView.qml deleted file mode 100644 index 6db076ae8..000000000 --- a/tests/auto/quick/qmltests_ssl/data/TestWebEngineView.qml +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.0 -import QtTest 1.1 -import QtWebEngine 1.7 - -WebEngineView { - property var loadStatus: null - property bool windowCloseRequestedSignalEmitted: false - settings.focusOnNavigationEnabled: true - - function waitForLoadSucceeded(timeout) { - var success = _waitFor(function() { return loadStatus == WebEngineView.LoadSucceededStatus }, timeout) - loadStatus = null - return success - } - function waitForLoadFailed(timeout) { - var failure = _waitFor(function() { return loadStatus == WebEngineView.LoadFailedStatus }, timeout) - loadStatus = null - return failure - } - function waitForLoadStopped(timeout) { - var stop = _waitFor(function() { return loadStatus == WebEngineView.LoadStoppedStatus }, timeout) - loadStatus = null - return stop - } - function waitForWindowCloseRequested() { - return _waitFor(function() { return windowCloseRequestedSignalEmitted; }); - } - function _waitFor(predicate, timeout) { - if (timeout === undefined) - timeout = 12000; - var i = 0 - while (i < timeout && !predicate()) { - testResult.wait(50) - i += 50 - } - return predicate() - } - - function getActiveElementId() { - var activeElementId; - runJavaScript("document.activeElement.id", function(result) { - activeElementId = result; - }); - testCase.tryVerify(function() { return activeElementId != undefined }); - return activeElementId; - } - - function verifyElementHasFocus(element) { - testCase.tryVerify(function() { return getActiveElementId() == element; }, 5000, - "Element \"" + element + "\" has focus"); - } - - function setFocusToElement(element) { - runJavaScript("document.getElementById('" + element + "').focus()"); - verifyElementHasFocus(element); - } - - function getElementCenter(element) { - var center; - runJavaScript("(function() {" + - " var elem = document.getElementById('" + element + "');" + - " var rect = elem.getBoundingClientRect();" + - " return { 'x': (rect.left + rect.right) / 2, 'y': (rect.top + rect.bottom) / 2 };" + - "})();", function(result) { center = result } ); - testCase.tryVerify(function() { return center !== undefined; }); - return center; - } - - function getTextSelection() { - var textSelection; - runJavaScript("window.getSelection().toString()", function(result) { textSelection = result }); - testCase.tryVerify(function() { return textSelection !== undefined; }); - return textSelection; - } - - TestResult { id: testResult } - TestCase { id: testCase } - - onLoadingChanged: { - loadStatus = loadRequest.status - } - - onWindowCloseRequested: { - windowCloseRequestedSignalEmitted = true; - } - - function getBodyText() { - let text - runJavaScript('document.body.innerText', function(t) { text = t }) - testCase.tryVerify(function() { return text !== undefined }) - return text - } -} - diff --git a/tests/auto/quick/qmltests_ssl/qmltests_ssl.pro b/tests/auto/quick/qmltests_ssl/qmltests_ssl.pro deleted file mode 100644 index a8325e497..000000000 --- a/tests/auto/quick/qmltests_ssl/qmltests_ssl.pro +++ /dev/null @@ -1,10 +0,0 @@ -include(../tests.pri) -include(../../shared/https.pri) -QT += qmltest - -IMPORTPATH += $$PWD/data - -OTHER_FILES += $$PWD/data/tst_certificateError.qml - -load(qt_build_paths) -DEFINES += QUICK_TEST_SOURCE_DIR=\\\"$$re_escape($$PWD$${QMAKE_DIR_SEP}data)\\\" diff --git a/tests/auto/quick/qmltests_ssl/tst_qmltests_ssl.cpp b/tests/auto/quick/qmltests_ssl/tst_qmltests_ssl.cpp deleted file mode 100644 index 1f54ffd8e..000000000 --- a/tests/auto/quick/qmltests_ssl/tst_qmltests_ssl.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtWebEngineCore/qtwebenginecoreglobal.h> -#include <QtNetwork/qtnetwork-config.h> - -#if QT_CONFIG(ssl) -#include <httpsserver.h> -#endif - -#include <QtCore/QScopedPointer> -#include <QTemporaryDir> -#include <QtQuickTest/quicktest.h> -#include <QtWebEngine/QQuickWebEngineProfile> -#include <QQmlEngine> -#include "qt_webengine_quicktest.h" - -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) -#include <fcntl.h> -#include <signal.h> -#include <unistd.h> -#endif - -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) -static bool debuggerPresent() -{ - int fd = open("/proc/self/status", O_RDONLY); - if (fd == -1) - return false; - char buffer[2048]; - ssize_t size = read(fd, buffer, sizeof(buffer) - 1); - if (size == -1) { - close(fd); - return false; - } - buffer[size] = 0; - const char tracerPidToken[] = "\nTracerPid:"; - char *tracerPid = strstr(buffer, tracerPidToken); - if (!tracerPid) { - close(fd); - return false; - } - tracerPid += sizeof(tracerPidToken); - long int pid = strtol(tracerPid, &tracerPid, 10); - close(fd); - return pid != 0; -} - -static void stackTrace() -{ - bool ok = false; - const int disableStackDump = qEnvironmentVariableIntValue("QTEST_DISABLE_STACK_DUMP", &ok); - if (ok && disableStackDump == 1) - return; - - if (debuggerPresent()) - return; - - fprintf(stderr, "\n========= Received signal, dumping stack ==============\n"); - char cmd[512]; - qsnprintf(cmd, 512, "gdb --pid %d 2>/dev/null <<EOF\n" - "set prompt\n" - "set height 0\n" - "thread apply all where full\n" - "detach\n" - "quit\n" - "EOF\n", - (int)getpid()); - - if (system(cmd) == -1) - fprintf(stderr, "calling gdb failed\n"); - fprintf(stderr, "========= End of stack trace ==============\n"); -} - -static void sigSegvHandler(int signum) -{ - stackTrace(); - qFatal("Received signal %d", signum); -} -#endif - -class TempDir : public QObject { - Q_OBJECT - -public: - Q_INVOKABLE QString path() { - Q_ASSERT(tempDir.isValid()); - return tempDir.isValid() ? tempDir.path() : QString(); - } - -private: - QTemporaryDir tempDir; -}; - -int main(int argc, char **argv) -{ -#if defined(Q_OS_LINUX) && defined(QT_DEBUG) - struct sigaction sigAction; - - sigemptyset(&sigAction.sa_mask); - sigAction.sa_handler = &sigSegvHandler; - sigAction.sa_flags = 0; - - sigaction(SIGSEGV, &sigAction, 0); -#endif - - QScopedPointer<Application> app; - - // Force to use English language for testing due to error message checks - QLocale::setDefault(QLocale("en")); - - static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")}; - QVector<const char *> w_argv(argc); \ - for (int i = 0; i < argc; ++i) \ - w_argv[i] = argv[i]; \ - for (int i = 0; i < params.size(); ++i) \ - w_argv.append(params[i].data()); \ - int w_argc = w_argv.size(); \ - - if (!QCoreApplication::instance()) { - app.reset(new Application(w_argc, const_cast<char **>(w_argv.data()))); - } - QtWebEngine::initialize(); - QQuickWebEngineProfile::defaultProfile()->setOffTheRecord(true); - qmlRegisterType<TempDir>("Test.util", 1, 0, "TempDir"); - - QTEST_SET_MAIN_SOURCE_PATH -#if QT_CONFIG(ssl) - qmlRegisterSingletonType<HttpsServer>("Test.Shared", 1, 0, "HttpsServer", [&] (QQmlEngine *, QJSEngine *) { return new HttpsServer; }); -#endif - int i = quick_test_main(argc, argv, "qmltests", QUICK_TEST_SOURCE_DIR); - return i; -} - -#include "tst_qmltests_ssl.moc" diff --git a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/qquickwebenginedefaultsurfaceformat.pro b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/qquickwebenginedefaultsurfaceformat.pro index 699186741..092973032 100644 --- a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/qquickwebenginedefaultsurfaceformat.pro +++ b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/qquickwebenginedefaultsurfaceformat.pro @@ -1,6 +1,6 @@ include(../tests.pri) exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc -QT_PRIVATE += core-private webengine-private webenginecore-private +QT_PRIVATE += core-private webenginequick-private webenginecore-private HEADERS += ../shared/util.h diff --git a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp index 734c4ff7a..016e8232f 100644 --- a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp +++ b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp @@ -126,10 +126,10 @@ void tst_QQuickWebEngineDefaultSurfaceFormat::customDefaultSurfaceFormat() QObject::connect( view, - &QQuickWebEngineView::loadingChanged, [](QQuickWebEngineLoadRequest* request) + &QQuickWebEngineView::loadingChanged, [](const QWebEngineLoadRequest &request) { - if (request->status() == QQuickWebEngineView::LoadSucceededStatus - || request->status() == QQuickWebEngineView::LoadFailedStatus) + if (request.status() == QWebEngineLoadRequest::LoadSucceededStatus + || request.status() == QWebEngineLoadRequest::LoadFailedStatus) QTimer::singleShot(100, qApp, &QCoreApplication::quit); } ); diff --git a/tests/auto/quick/qquickwebengineview/BLACKLIST b/tests/auto/quick/qquickwebengineview/BLACKLIST new file mode 100644 index 000000000..d4a35a76a --- /dev/null +++ b/tests/auto/quick/qquickwebengineview/BLACKLIST @@ -0,0 +1,2 @@ +[javascriptClipboard] +ubuntu-20.04 diff --git a/tests/auto/quick/qquickwebengineview/qquickwebengineview.pro b/tests/auto/quick/qquickwebengineview/qquickwebengineview.pro index 38c130aa3..ba3737108 100644 --- a/tests/auto/quick/qquickwebengineview/qquickwebengineview.pro +++ b/tests/auto/quick/qquickwebengineview/qquickwebengineview.pro @@ -1,6 +1,6 @@ include(../tests.pri) exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc -QT_PRIVATE += core_private gui-private webengine-private webenginecore-private +QT_PRIVATE += core_private gui-private webenginequick-private webenginecore-private HEADERS += ../shared/util.h diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp index 09998eaca..30441ac11 100644 --- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp +++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp @@ -37,10 +37,11 @@ #include <QtGui/qpa/qwindowsysteminterface.h> #include <QtQml/QQmlEngine> #include <QtTest/QtTest> -#include <QtWebEngine/QQuickWebEngineProfile> +#include <QtWebEngineQuick/QQuickWebEngineProfile> +#include <QtWebEngineQuick/QQuickWebEngineScriptCollection> #include <QtGui/private/qinputmethod_p.h> -#include <QtWebEngine/private/qquickwebengineview_p.h> -#include <QtWebEngine/private/qquickwebenginesettings_p.h> +#include <QtWebEngineQuick/private/qquickwebengineview_p.h> +#include <QtWebEngineQuick/private/qquickwebenginesettings_p.h> #include <QtWebEngineCore/private/qtwebenginecore-config_p.h> #include <qpa/qplatforminputcontext.h> @@ -197,7 +198,7 @@ void tst_QQuickWebEngineView::loadEmptyPageViewVisible() void tst_QQuickWebEngineView::loadEmptyPageViewHidden() { - QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webEngineView()->setUrl(urlFromTestPath("html/basic_page.html")); QVERIFY(waitForLoadSucceeded(webEngineView())); @@ -207,7 +208,7 @@ void tst_QQuickWebEngineView::loadEmptyPageViewHidden() void tst_QQuickWebEngineView::loadNonexistentFileUrl() { - QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webEngineView()->setUrl(urlFromTestPath("html/file_that_does_not_exist.html")); QVERIFY(waitForLoadFailed(webEngineView())); @@ -584,7 +585,7 @@ void tst_QQuickWebEngineView::interruptImeTextComposition() QTest::mouseClick(view->window(), Qt::LeftButton, {}, textInputCenter); } else if (eventType == "Touch") { QPoint textInputCenter = elementCenter(view, QStringLiteral("input2")); - QTouchDevice *touchDevice = QTest::createTouchDevice(); + QPointingDevice *touchDevice = QTest::createTouchDevice(); QTest::touchEvent(view->window(), touchDevice).press(0, textInputCenter, view->window()); QTest::touchEvent(view->window(), touchDevice).release(0, textInputCenter, view->window()); } @@ -770,9 +771,13 @@ void tst_QQuickWebEngineView::inputMethodHints() QTRY_COMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QString("a@b.com")); QVERIFY(input->flags().testFlag(QQuickItem::ItemAcceptsInputMethod)); QVERIFY(view->flags().testFlag(QQuickItem::ItemAcceptsInputMethod)); - QInputMethodQueryEvent query(Qt::ImHints); - QGuiApplication::sendEvent(input, &query); - QTRY_COMPARE(Qt::InputMethodHints(query.value(Qt::ImHints).toUInt() & Qt::ImhExclusiveInputMask), Qt::ImhEmailCharactersOnly); + { + QInputMethodQueryEvent query(Qt::ImHints); + QGuiApplication::sendEvent(input, &query); + QTRY_COMPARE( + Qt::InputMethodHints(query.value(Qt::ImHints).toUInt() & Qt::ImhExclusiveInputMask), + Qt::ImhEmailCharactersOnly); + } // The focus of an editable DIV is given directly to it, so no shadow root element // is necessary. This tests the WebPage::editorState() method ability to get the @@ -783,9 +788,13 @@ void tst_QQuickWebEngineView::inputMethodHints() QTRY_COMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QString("bla")); QVERIFY(input->flags().testFlag(QQuickItem::ItemAcceptsInputMethod)); QVERIFY(view->flags().testFlag(QQuickItem::ItemAcceptsInputMethod)); - query = QInputMethodQueryEvent(Qt::ImHints); - QGuiApplication::sendEvent(input, &query); - QTRY_COMPARE(Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()), Qt::ImhPreferLowercase | Qt::ImhNoPredictiveText | Qt::ImhMultiLine | Qt::ImhNoEditMenu | Qt::ImhNoTextHandles); + { + QInputMethodQueryEvent query(Qt::ImHints); + QGuiApplication::sendEvent(input, &query); + QTRY_COMPARE(Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()), + Qt::ImhPreferLowercase | Qt::ImhNoPredictiveText | Qt::ImhMultiLine + | Qt::ImhNoEditMenu | Qt::ImhNoTextHandles); + } } void tst_QQuickWebEngineView::setZoomFactor() @@ -875,6 +884,7 @@ public: QQuickItem(parent), m_eventCounter(0), m_child(child) { setFlag(ItemHasContents); setAcceptedMouseButtons(Qt::AllButtons); + setAcceptTouchEvents(true); setAcceptHoverEvents(true); } @@ -975,9 +985,7 @@ void tst_QQuickWebEngineView::inputEventForwardingDisabledWhenActiveFocusOnPress QTest::mousePress(view->window(), Qt::LeftButton); QTest::mouseRelease(view->window(), Qt::LeftButton); - QTouchDevice *device = new QTouchDevice; - device->setType(QTouchDevice::TouchScreen); - QWindowSystemInterface::registerTouchDevice(device); + QPointingDevice *device = QTest::createTouchDevice(); QTest::touchEvent(view->window(), device).press(0, QPoint(0,0), view->window()); QTest::touchEvent(view->window(), device).move(0, QPoint(1, 1), view->window()); @@ -1049,10 +1057,10 @@ void tst_QQuickWebEngineView::userScripts() QScopedPointer<QQuickWebEngineView> webEngineView2(newWebEngineView()); webEngineView2->setParentItem(m_window->contentItem()); - QQmlListReference list(webEngineView1->profile(), "userScripts"); - QQuickWebEngineScript script; + QQuickWebEngineScriptCollection *collection = webEngineView1->profile()->userScripts(); + QWebEngineScript script; script.setSourceCode("document.title = 'New title';"); - list.append(&script); + collection->insert(script); webEngineView1->setUrl(urlFromTestPath("html/basic_page.html")); QVERIFY(waitForLoadSucceeded(webEngineView1.data())); @@ -1062,7 +1070,7 @@ void tst_QQuickWebEngineView::userScripts() QVERIFY(waitForLoadSucceeded(webEngineView2.data())); QTRY_COMPARE(webEngineView2->title(), QStringLiteral("New title")); - list.clear(); + collection->clear(); } void tst_QQuickWebEngineView::javascriptClipboard_data() @@ -1161,7 +1169,7 @@ void tst_QQuickWebEngineView::javascriptClipboard() } void tst_QQuickWebEngineView::setProfile() { - QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*))); + QSignalSpy loadSpy(webEngineView(), SIGNAL(loadingChanged(QWebEngineLoadRequest))); webEngineView()->setUrl(urlFromTestPath("html/basic_page.html")); QVERIFY(waitForLoadSucceeded(webEngineView())); QCOMPARE(loadSpy.size(), 2); @@ -1176,11 +1184,11 @@ void tst_QQuickWebEngineView::setProfile() { void tst_QQuickWebEngineView::focusChild_data() { QTest::addColumn<QString>("interfaceName"); - QTest::addColumn<QVector<QAccessible::Role>>("ancestorRoles"); + QTest::addColumn<QList<QAccessible::Role>>("ancestorRoles"); - QTest::newRow("QQuickWebEngineView") << QString("QQuickWebEngineView") << QVector<QAccessible::Role>({QAccessible::Client}); - QTest::newRow("RenderWidgetHostViewQtDelegate") << QString("RenderWidgetHostViewQtDelegate") << QVector<QAccessible::Role>({QAccessible::Client}); - QTest::newRow("QQuickView") << QString("QQuickView") << QVector<QAccessible::Role>({QAccessible::Window, QAccessible::Client /* view */}); + QTest::newRow("QQuickWebEngineView") << QString("QQuickWebEngineView") << QList<QAccessible::Role>({QAccessible::Client}); + QTest::newRow("RenderWidgetHostViewQtDelegate") << QString("RenderWidgetHostViewQtDelegate") << QList<QAccessible::Role>({QAccessible::Client}); + QTest::newRow("QQuickView") << QString("QQuickView") << QList<QAccessible::Role>({QAccessible::Window, QAccessible::Client /* view */}); } void tst_QQuickWebEngineView::focusChild() @@ -1189,7 +1197,7 @@ void tst_QQuickWebEngineView::focusChild() QSKIP("Requires newer base Qt"); #endif auto traverseToWebDocumentAccessibleInterface = [](QAccessibleInterface *iface) -> QAccessibleInterface * { - QFETCH(QVector<QAccessible::Role>, ancestorRoles); + QFETCH(QList<QAccessible::Role>, ancestorRoles); for (int i = 0; i < ancestorRoles.size(); ++i) { if (iface->childCount() == 0 || iface->role() != ancestorRoles[i]) return nullptr; diff --git a/tests/auto/quick/qquickwebengineviewgraphics/qquickwebengineviewgraphics.pro b/tests/auto/quick/qquickwebengineviewgraphics/qquickwebengineviewgraphics.pro index a0ee3fd89..be6296f5e 100644 --- a/tests/auto/quick/qquickwebengineviewgraphics/qquickwebengineviewgraphics.pro +++ b/tests/auto/quick/qquickwebengineviewgraphics/qquickwebengineviewgraphics.pro @@ -1,4 +1,4 @@ include(../tests.pri) CONFIG -= testcase # remove, once this passes in the CI exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc -QT_PRIVATE += webengine-private gui-private webenginecore-private +QT_PRIVATE += webenginequick-private gui-private webenginecore-private diff --git a/tests/auto/quick/qtbug-70248/qtbug-70248.pro b/tests/auto/quick/qtbug-70248/qtbug-70248.pro index e1b18bc16..7223dcfa0 100644 --- a/tests/auto/quick/qtbug-70248/qtbug-70248.pro +++ b/tests/auto/quick/qtbug-70248/qtbug-70248.pro @@ -1,5 +1,5 @@ include(../tests.pri) -QT += webengine webengine-private +QT += webenginequick webenginequick-private RESOURCES += \ test.qrc diff --git a/tests/auto/quick/quick.pro b/tests/auto/quick/quick.pro index f02652ba1..1c1bf2ba9 100644 --- a/tests/auto/quick/quick.pro +++ b/tests/auto/quick/quick.pro @@ -1,5 +1,5 @@ -include($$QTWEBENGINE_OUT_ROOT/src/webengine/qtwebengine-config.pri) # workaround for QTBUG-68093 -QT_FOR_CONFIG += webengine-private +include($$QTWEBENGINE_OUT_ROOT/src/webenginequick/qtwebenginequick-config.pri) # workaround for QTBUG-68093 +QT_FOR_CONFIG += webenginequick-private TEMPLATE = subdirs @@ -10,17 +10,11 @@ SUBDIRS += \ publicapi \ qquickwebenginedefaultsurfaceformat \ qquickwebengineview \ - qtbug-70248 + qtbug-70248 \ + certificateerror -qtConfig(webengine-testsupport) { - SUBDIRS += \ - qmltests2 \ - qquickwebengineviewgraphics +qtConfig(webenginequick-testsupport) { + SUBDIRS += qquickwebengineviewgraphics } -qtConfig(ssl): SUBDIRS += qmltests_ssl - -lessThan(QT_MAJOR_VERSION, 6):lessThan(QT_MINOR_VERSION, 14): SUBDIRS -= qmltests qmltests2 qmltests_ssl - -# QTBUG-66055 -boot2qt: SUBDIRS -= inspectorserver qquickwebengineview qmltests qmltests2 +boot2qt: SUBDIRS -= inspectorserver qquickwebengineview qmltests diff --git a/tests/auto/quick/shared/util.h b/tests/auto/quick/shared/util.h index b7b7b1564..34afbbb45 100644 --- a/tests/auto/quick/shared/util.h +++ b/tests/auto/quick/shared/util.h @@ -34,8 +34,9 @@ #include <QSignalSpy> #include <QTimer> #include <QtTest/QtTest> -#include <QtWebEngine/private/qquickwebengineview_p.h> -#include <QtWebEngine/private/qquickwebengineloadrequest_p.h> +#include <QtWebEngineQuick/private/qquickwebengineview_p.h> +#include <QtWebEngineCore/QWebEngineLoadRequest> +#include <QtWebEngineQuick/private/qquickwebengineview_p.h> #include <QGuiApplication> #if !defined(TESTS_SOURCE_DIR) @@ -48,7 +49,7 @@ class LoadSpy : public QEventLoop { public: LoadSpy(QQuickWebEngineView *webEngineView) { - connect(webEngineView, SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*)), SLOT(onLoadingChanged(QQuickWebEngineLoadRequest*))); + connect(webEngineView, &QQuickWebEngineView::loadingChanged, this, &LoadSpy::onLoadingChanged); } ~LoadSpy() { } @@ -58,11 +59,11 @@ Q_SIGNALS: void loadFailed(); private Q_SLOTS: - void onLoadingChanged(QQuickWebEngineLoadRequest *loadRequest) + void onLoadingChanged(const QWebEngineLoadRequest &request) { - if (loadRequest->status() == QQuickWebEngineView::LoadSucceededStatus) + if (request.status() == QWebEngineLoadRequest::LoadSucceededStatus) emit loadSucceeded(); - else if (loadRequest->status() == QQuickWebEngineView::LoadFailedStatus) + else if (request.status() == QWebEngineLoadRequest::LoadFailedStatus) emit loadFailed(); } }; @@ -74,15 +75,15 @@ public: LoadStartedCatcher(QQuickWebEngineView *webEngineView) : m_webEngineView(webEngineView) { - connect(m_webEngineView, SIGNAL(loadingChanged(QQuickWebEngineLoadRequest*)), this, SLOT(onLoadingChanged(QQuickWebEngineLoadRequest*))); + connect(m_webEngineView, &QQuickWebEngineView::loadingChanged, this, &LoadStartedCatcher::onLoadingChanged); } virtual ~LoadStartedCatcher() { } public Q_SLOTS: - void onLoadingChanged(QQuickWebEngineLoadRequest *loadRequest) + void onLoadingChanged(const QWebEngineLoadRequest &request) { - if (loadRequest->status() == QQuickWebEngineView::LoadStartedStatus) + if (request.status() == QWebEngineLoadRequest::LoadStartedStatus) QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); } @@ -173,7 +174,7 @@ int main(int argc, char *argv[]) \ { \ QtWebEngine::initialize(); \ \ - QVector<const char *> w_argv(argc); \ + QList<const char *> w_argv(argc); \ for (int i = 0; i < argc; ++i) \ w_argv[i] = argv[i]; \ for (int i = 0; i < params.size(); ++i) \ diff --git a/tests/auto/quick/tests.pri b/tests/auto/quick/tests.pri index 1bf69da43..8cf4c0af5 100644 --- a/tests/auto/quick/tests.pri +++ b/tests/auto/quick/tests.pri @@ -1,5 +1,5 @@ -include($$QTWEBENGINE_OUT_ROOT/src/webengine/qtwebengine-config.pri) # workaround for QTBUG-68093 -QT_FOR_CONFIG += webengine-private +include($$QTWEBENGINE_OUT_ROOT/src/webenginequick/qtwebenginequick-config.pri) # workaround for QTBUG-68093 +QT_FOR_CONFIG += webenginequick-private TEMPLATE = app @@ -13,7 +13,7 @@ INCLUDEPATH += \ $$PWD \ ../shared -QT += testlib network quick webengine +QT += testlib network quick webenginequick # This define is used by some tests to look up resources in the source tree DEFINES += TESTS_SOURCE_DIR=\\\"$$PWD/\\\" diff --git a/tests/auto/shared/httpsserver.h b/tests/auto/shared/httpsserver.h index 32c8e8345..219d5f7a1 100644 --- a/tests/auto/shared/httpsserver.h +++ b/tests/auto/shared/httpsserver.h @@ -55,7 +55,7 @@ struct SslTcpServer : QTcpServer return; } - connect(socket, QOverload<QSslSocket::SocketError>::of(&QSslSocket::error), + connect(socket, QOverload<QSslSocket::SocketError>::of(&QSslSocket::errorOccurred), [] (QSslSocket::SocketError e) { qWarning() << "! Socket Error:" << e; }); connect(socket, QOverload<const QList<QSslError> &>::of(&QSslSocket::sslErrors), [] (const QList<QSslError> &le) { qWarning() << "! SSL Errors:\n" << le; }); diff --git a/tests/auto/widgets/accessibility/BLACKLIST b/tests/auto/widgets/accessibility/BLACKLIST new file mode 100644 index 000000000..41d3635d2 --- /dev/null +++ b/tests/auto/widgets/accessibility/BLACKLIST @@ -0,0 +1,2 @@ +[focusChild] +* diff --git a/tests/auto/widgets/accessibility/tst_accessibility.cpp b/tests/auto/widgets/accessibility/tst_accessibility.cpp index 0c235382a..bad99664a 100644 --- a/tests/auto/widgets/accessibility/tst_accessibility.cpp +++ b/tests/auto/widgets/accessibility/tst_accessibility.cpp @@ -151,11 +151,11 @@ void tst_Accessibility::hierarchy() void tst_Accessibility::focusChild_data() { QTest::addColumn<QString>("interfaceName"); - QTest::addColumn<QVector<QAccessible::Role>>("ancestorRoles"); + QTest::addColumn<QList<QAccessible::Role>>("ancestorRoles"); - QTest::newRow("QWebEngineView") << QString("QWebEngineView") << QVector<QAccessible::Role>({QAccessible::Client}); - QTest::newRow("RenderWidgetHostViewQtDelegate") << QString("RenderWidgetHostViewQtDelegate") << QVector<QAccessible::Role>({QAccessible::Client}); - QTest::newRow("QMainWindow") << QString("QMainWindow") << QVector<QAccessible::Role>({QAccessible::Window, QAccessible::Client /* central widget */, QAccessible::Client /* view */}); + QTest::newRow("QWebEngineView") << QString("QWebEngineView") << QList<QAccessible::Role>({QAccessible::Client}); + QTest::newRow("RenderWidgetHostViewQtDelegate") << QString("RenderWidgetHostViewQtDelegate") << QList<QAccessible::Role>({QAccessible::Client}); + QTest::newRow("QMainWindow") << QString("QMainWindow") << QList<QAccessible::Role>({QAccessible::Window, QAccessible::Client /* central widget */, QAccessible::Client /* view */}); } void tst_Accessibility::focusChild() @@ -164,7 +164,7 @@ void tst_Accessibility::focusChild() QSKIP("Requires newer base Qt"); #endif auto traverseToWebDocumentAccessibleInterface = [](QAccessibleInterface *iface) -> QAccessibleInterface * { - QFETCH(QVector<QAccessible::Role>, ancestorRoles); + QFETCH(QList<QAccessible::Role>, ancestorRoles); for (int i = 0; i < ancestorRoles.size(); ++i) { if (iface->childCount() == 0 || iface->role() != ancestorRoles[i]) return nullptr; @@ -404,8 +404,10 @@ void tst_Accessibility::roles_data() QTest::newRow("ax::mojom::Role::kDocEpilogue") << QString("<div role='doc-epilogue'></div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kDocErrata") << QString("<div role='doc-errata'></div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kDocExample") << QString("<div role='doc-example'></div>") << 0 << QAccessible::Section; + QTest::newRow("ax::mojom::Role::kDocFooter") << QString("<section role='doc-pagefooter'>a</section>") << 0 << QAccessible::Footer; QTest::newRow("ax::mojom::Role::kDocForeword") << QString("<div role='doc-foreword'></div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kDocGlossary") << QString("<div role='doc-glossary'></div>") << 0 << QAccessible::Section; + QTest::newRow("ax::mojom::Role::kDocHeader") << QString("<section role='doc-pageheader'>a</section>") << 0 << QAccessible::Heading; QTest::newRow("ax::mojom::Role::kDocIndex") << QString("<div role='doc-index'></div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kDocIntroduction") << QString("<div role='doc-introduction'></div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kDocNotice") << QString("<div role='doc-notice'></div>") << 0 << QAccessible::Section; @@ -424,7 +426,7 @@ void tst_Accessibility::roles_data() QTest::newRow("ax::mojom::Role::kFeed") << QString("<div role='feed'>a</div>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kFigcaption") << QString("<figcaption>a</figcaption>") << 0 << QAccessible::Heading; QTest::newRow("ax::mojom::Role::kFigure") << QString("<figure>a</figure>") << 0 << QAccessible::Section; - QTest::newRow("ax::mojom::Role::kFooter") << QString("<footer>a</footer>") << 0 << QAccessible::Footer; + QTest::newRow("ax::mojom::Role::kFooter") << QString("<footer>a</footer>") << 0 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kFooterAsNonLandmark") << QString("<article><footer>a</footer><article>") << 1 << QAccessible::Section; QTest::newRow("ax::mojom::Role::kForm") << QString("<form></form>") << 0 << QAccessible::Form; QTest::newRow("ax::mojom::Role::kGraphicsDocument") << QString("<div role='graphics-document'></div>") << 0 << QAccessible::Document; diff --git a/tests/auto/widgets/certificateerror/tst_certificateerror.cpp b/tests/auto/widgets/certificateerror/tst_certificateerror.cpp index 0bea04155..9865162cb 100644 --- a/tests/auto/widgets/certificateerror/tst_certificateerror.cpp +++ b/tests/auto/widgets/certificateerror/tst_certificateerror.cpp @@ -59,11 +59,18 @@ struct PageWithCertificateErrorHandler : QWebEnginePage QSignalSpy loadSpy; QScopedPointer<QWebEngineCertificateError> error; - bool certificateError(const QWebEngineCertificateError &e) override { + void certificateError(QWebEngineCertificateError e) override + { error.reset(new QWebEngineCertificateError(e)); - if (deferError) + if (deferError) { error->defer(); - return acceptCertificate; + return; + } + + if (acceptCertificate) + error->acceptCertificate(); + else + error->rejectCertificate(); } }; @@ -104,17 +111,14 @@ void tst_CertificateError::handleError() QCOMPARE(chain[1].serialNumber(), "6d:52:fb:b4:57:3b:b2:03:c8:62:7b:7e:44:45:5c:d3:08:87:74:17"); if (deferError) { - QVERIFY(page.error->deferred()); - QVERIFY(!page.error->answered()); QCOMPARE(page.loadSpy.count(), 0); QCOMPARE(toPlainTextSync(&page), QString()); if (acceptCertificate) - page.error->ignoreCertificateError(); + page.error->acceptCertificate(); else page.error->rejectCertificate(); - QVERIFY(page.error->answered()); page.error.reset(); } QTRY_COMPARE_WITH_TIMEOUT(page.loadSpy.count(), 1, 30000); diff --git a/tests/auto/widgets/loadsignals/tst_loadsignals.cpp b/tests/auto/widgets/loadsignals/tst_loadsignals.cpp index 4ff47d96e..a0fa97e02 100644 --- a/tests/auto/widgets/loadsignals/tst_loadsignals.cpp +++ b/tests/auto/widgets/loadsignals/tst_loadsignals.cpp @@ -331,12 +331,12 @@ void tst_LoadSignals::fileDownload() // allow the download QTemporaryDir tempDir; QVERIFY(tempDir.isValid()); - QWebEngineDownloadItem::DownloadState downloadState = QWebEngineDownloadItem::DownloadRequested; + QWebEngineDownloadRequest::DownloadState downloadState = QWebEngineDownloadRequest::DownloadRequested; ScopedConnection sc1 = connect(&profile, &QWebEngineProfile::downloadRequested, - [&downloadState, &tempDir](QWebEngineDownloadItem *item) { - connect(item, &QWebEngineDownloadItem::stateChanged, - [&downloadState](QWebEngineDownloadItem::DownloadState newState) { + [&downloadState, &tempDir](QWebEngineDownloadRequest *item) { + connect(item, &QWebEngineDownloadRequest::stateChanged, + [&downloadState](QWebEngineDownloadRequest::DownloadState newState) { downloadState = newState; }); item->setDownloadDirectory(tempDir.path()); @@ -348,7 +348,7 @@ void tst_LoadSignals::fileDownload() QTest::sendKeyEvent(QTest::Release, view.focusProxy(), Qt::Key_Return, QString("\r"), Qt::NoModifier); // Download must have occurred - QTRY_COMPARE(downloadState, QWebEngineDownloadItem::DownloadCompleted); + QTRY_COMPARE(downloadState, QWebEngineDownloadRequest::DownloadCompleted); QTRY_COMPARE(loadFinishedSpy.size() + loadStartedSpy.size(), 4); // verify no more signals is emitted by waiting for another loadStarted or loadFinished diff --git a/tests/auto/widgets/offscreen/offscreen.pro b/tests/auto/widgets/offscreen/offscreen.pro index b8e5632f9..2469f9a53 100644 --- a/tests/auto/widgets/offscreen/offscreen.pro +++ b/tests/auto/widgets/offscreen/offscreen.pro @@ -1,5 +1,5 @@ include(../tests.pri) -QT += webengine +QT += webenginewidgets qpa.name = QT_QPA_PLATFORM qpa.value = offscreen QT_TOOL_ENV += qpa diff --git a/tests/auto/widgets/offscreen/tst_offscreen.cpp b/tests/auto/widgets/offscreen/tst_offscreen.cpp index 7573b0537..81cbe95f3 100644 --- a/tests/auto/widgets/offscreen/tst_offscreen.cpp +++ b/tests/auto/widgets/offscreen/tst_offscreen.cpp @@ -26,7 +26,6 @@ ** ****************************************************************************/ -#include "qtwebengineglobal.h" #include <QTest> #include <QSignalSpy> #include <QWebEngineProfile> diff --git a/tests/auto/widgets/origins/origins.pro b/tests/auto/widgets/origins/origins.pro index 8b2fca2e4..6cf0b2b92 100644 --- a/tests/auto/widgets/origins/origins.pro +++ b/tests/auto/widgets/origins/origins.pro @@ -1,6 +1,6 @@ include(../tests.pri) include(../../shared/http.pri) -CONFIG += c++14 + qtConfig(webengine-webchannel):qtHaveModule(websockets) { QT += websockets DEFINES += WEBSOCKETS diff --git a/tests/auto/widgets/origins/tst_origins.cpp b/tests/auto/widgets/origins/tst_origins.cpp index 93a496ac4..b9385516f 100644 --- a/tests/auto/widgets/origins/tst_origins.cpp +++ b/tests/auto/widgets/origins/tst_origins.cpp @@ -34,15 +34,16 @@ #include <QtWebEngineCore/qwebengineurlrequestjob.h> #include <QtWebEngineCore/qwebengineurlscheme.h> #include <QtWebEngineCore/qwebengineurlschemehandler.h> -#include <QtWebEngineWidgets/qwebenginepage.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> -#include <QtWebEngineWidgets/qwebenginesettings.h> +#include <QtWebEngineCore/qwebenginesettings.h> +#include <QtWebEngineCore/qwebengineprofile.h> +#include <QtWebEngineCore/qwebenginepage.h> + #if defined(WEBSOCKETS) #include <QtWebSockets/qwebsocket.h> #include <QtWebSockets/qwebsocketserver.h> #include <QtWebChannel/qwebchannel.h> #endif -#include <QtWidgets/qaction.h> +#include <qaction.h> #define QSL QStringLiteral #define QBAL QByteArrayLiteral @@ -170,7 +171,7 @@ public: profile->installUrlSchemeHandler(QBAL("cors"), this); } - QVector<QUrl> &requests() { return m_requests; } + QList<QUrl> &requests() { return m_requests; } private: void requestStarted(QWebEngineUrlRequestJob *job) override @@ -199,7 +200,7 @@ private: job->reply(mimeType, file); } - QVector<QUrl> m_requests; + QList<QUrl> m_requests; }; class tst_Origins final : public QObject { diff --git a/tests/auto/widgets/proxy/proxy.pro b/tests/auto/widgets/proxy/proxy.pro index 802dfad05..ce4ccbfcb 100644 --- a/tests/auto/widgets/proxy/proxy.pro +++ b/tests/auto/widgets/proxy/proxy.pro @@ -1,5 +1,5 @@ include(../tests.pri) -QT += core-private webengine webengine-private +QT += core-private webenginewidgets webenginewidgets-private HEADERS += \ proxy_server.h diff --git a/tests/auto/widgets/proxy/proxy_server.cpp b/tests/auto/widgets/proxy/proxy_server.cpp index 3bf915609..3e52de4f2 100644 --- a/tests/auto/widgets/proxy/proxy_server.cpp +++ b/tests/auto/widgets/proxy/proxy_server.cpp @@ -39,7 +39,7 @@ ProxyServer::ProxyServer(QObject *parent) : QObject(parent) void ProxyServer::setCredentials(const QByteArray &user, const QByteArray password) { m_auth.append(user); - m_auth.append(QChar(':')); + m_auth.append(':'); m_auth.append(password); m_auth = m_auth.toBase64(); m_authenticate = true; diff --git a/tests/auto/widgets/proxypac/proxypac.pri b/tests/auto/widgets/proxypac/proxypac.pri index b3b2856c8..f9f23da6f 100644 --- a/tests/auto/widgets/proxypac/proxypac.pri +++ b/tests/auto/widgets/proxypac/proxypac.pri @@ -1,5 +1,5 @@ TEMPLATE = app CONFIG += testcase -QT += testlib network webenginewidgets webengine +QT += testlib network webenginewidgets webenginecore HEADERS += $$PWD/proxyserver.h SOURCES += $$PWD/proxyserver.cpp $$PWD/tst_proxypac.cpp diff --git a/tests/auto/widgets/proxypac/tst_proxypac.cpp b/tests/auto/widgets/proxypac/tst_proxypac.cpp index dabbfb4e5..26f9b8aa3 100644 --- a/tests/auto/widgets/proxypac/tst_proxypac.cpp +++ b/tests/auto/widgets/proxypac/tst_proxypac.cpp @@ -26,7 +26,6 @@ ** ****************************************************************************/ -#include "qtwebengineglobal.h" #include "proxyserver.h" #include <QTest> #include <QSignalSpy> diff --git a/tests/auto/widgets/qwebenginedownloaditem/qwebenginedownloaditem.pro b/tests/auto/widgets/qwebenginedownloadrequest/qwebenginedownloadrequest.pro index 18a66c466..18a66c466 100644 --- a/tests/auto/widgets/qwebenginedownloaditem/qwebenginedownloaditem.pro +++ b/tests/auto/widgets/qwebenginedownloadrequest/qwebenginedownloadrequest.pro diff --git a/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp b/tests/auto/widgets/qwebenginedownloadrequest/tst_qwebenginedownloadrequest.cpp index 9a3e7b52e..a69ceaed0 100644 --- a/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp +++ b/tests/auto/widgets/qwebenginedownloadrequest/tst_qwebenginedownloadrequest.cpp @@ -34,14 +34,14 @@ #include <QTemporaryDir> #include <QTest> #include <QRegularExpression> -#include <QWebEngineDownloadItem> +#include <QWebEngineDownloadRequest> #include <QWebEnginePage> #include <QWebEngineProfile> #include <QWebEngineSettings> #include <QWebEngineView> #include <httpserver.h> -class tst_QWebEngineDownloadItem : public QObject +class tst_QWebEngineDownloadRequest : public QObject { Q_OBJECT @@ -79,9 +79,6 @@ private Q_SLOTS: void downloadToDefaultLocation(); void downloadToNonExistentDir(); void downloadToReadOnlyDir(); -#if QT_DEPRECATED_SINCE(5, 14) - void downloadPathValidation(); -#endif void downloadToDirectoryWithFileName_data(); void downloadToDirectoryWithFileName(); void downloadDataUrls_data(); @@ -92,34 +89,30 @@ private: void clickLink(QPoint linkPos); void simulateUserAction(QPoint linkPos, UserAction action); - QWebEngineDownloadItem::DownloadType expectedDownloadType( - UserAction userAction, - const QByteArray &contentDisposition = QByteArray()); - HttpServer *m_server; QWebEngineProfile *m_profile; QWebEnginePage *m_page; QWebEngineView *m_view; - QSet<QWebEngineDownloadItem *> m_requestedDownloads; - QSet<QWebEngineDownloadItem *> m_finishedDownloads; + QSet<QWebEngineDownloadRequest *> m_requestedDownloads; + QSet<QWebEngineDownloadRequest *> m_finishedDownloads; }; -Q_DECLARE_METATYPE(tst_QWebEngineDownloadItem::UserAction) -Q_DECLARE_METATYPE(tst_QWebEngineDownloadItem::FileAction) +Q_DECLARE_METATYPE(tst_QWebEngineDownloadRequest::UserAction) +Q_DECLARE_METATYPE(tst_QWebEngineDownloadRequest::FileAction) -void tst_QWebEngineDownloadItem::initTestCase() +void tst_QWebEngineDownloadRequest::initTestCase() { m_server = new HttpServer(); m_profile = new QWebEngineProfile; m_profile->setHttpCacheType(QWebEngineProfile::NoCache); m_profile->settings()->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, false); - connect(m_profile, &QWebEngineProfile::downloadRequested, [this](QWebEngineDownloadItem *item) { + connect(m_profile, &QWebEngineProfile::downloadRequested, [this](QWebEngineDownloadRequest *item) { m_requestedDownloads.insert(item); - connect(item, &QWebEngineDownloadItem::destroyed, [this, item](){ + connect(item, &QWebEngineDownloadRequest::destroyed, [this, item](){ m_requestedDownloads.remove(item); m_finishedDownloads.remove(item); }); - connect(item, &QWebEngineDownloadItem::finished, [this, item](){ + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [this, item](){ m_finishedDownloads.insert(item); }); }); @@ -130,14 +123,14 @@ void tst_QWebEngineDownloadItem::initTestCase() m_view->show(); } -void tst_QWebEngineDownloadItem::init() +void tst_QWebEngineDownloadRequest::init() { QVERIFY(m_server->start()); } -void tst_QWebEngineDownloadItem::cleanup() +void tst_QWebEngineDownloadRequest::cleanup() { - for (QWebEngineDownloadItem *item : m_finishedDownloads) { + for (QWebEngineDownloadRequest *item : m_finishedDownloads) { item->deleteLater(); } QTRY_COMPARE(m_requestedDownloads.count(), 0); @@ -147,7 +140,7 @@ void tst_QWebEngineDownloadItem::cleanup() m_profile->setDownloadPath(""); } -void tst_QWebEngineDownloadItem::cleanupTestCase() +void tst_QWebEngineDownloadRequest::cleanupTestCase() { delete m_view; delete m_page; @@ -155,7 +148,7 @@ void tst_QWebEngineDownloadItem::cleanupTestCase() delete m_server; } -void tst_QWebEngineDownloadItem::saveLink(QPoint linkPos) +void tst_QWebEngineDownloadRequest::saveLink(QPoint linkPos) { // Simulate right-clicking on link and choosing "save link as" from menu. QSignalSpy menuSpy(m_view, &QWebEngineView::customContextMenuRequested); @@ -172,7 +165,7 @@ void tst_QWebEngineDownloadItem::saveLink(QPoint linkPos) m_page->triggerAction(QWebEnginePage::DownloadLinkToDisk); } -void tst_QWebEngineDownloadItem::clickLink(QPoint linkPos) +void tst_QWebEngineDownloadRequest::clickLink(QPoint linkPos) { // Simulate left-clicking on link. QTRY_VERIFY(m_view->focusWidget()); @@ -180,7 +173,7 @@ void tst_QWebEngineDownloadItem::clickLink(QPoint linkPos) QTest::mouseClick(renderWidget, Qt::LeftButton, {}, linkPos); } -void tst_QWebEngineDownloadItem::simulateUserAction(QPoint linkPos, UserAction action) +void tst_QWebEngineDownloadRequest::simulateUserAction(QPoint linkPos, UserAction action) { switch (action) { case SaveLink: return saveLink(linkPos); @@ -188,17 +181,7 @@ void tst_QWebEngineDownloadItem::simulateUserAction(QPoint linkPos, UserAction a } } -QWebEngineDownloadItem::DownloadType tst_QWebEngineDownloadItem::expectedDownloadType( - UserAction userAction, const QByteArray &contentDisposition) -{ - if (userAction == SaveLink) - return QWebEngineDownloadItem::UserRequested; - if (contentDisposition == QByteArrayLiteral("attachment")) - return QWebEngineDownloadItem::Attachment; - return QWebEngineDownloadItem::DownloadAttribute; -} - -void tst_QWebEngineDownloadItem::downloadLink_data() +void tst_QWebEngineDownloadRequest::downloadLink_data() { QTest::addColumn<UserAction>("userAction"); QTest::addColumn<bool>("anchorHasDownloadAttribute"); @@ -209,7 +192,6 @@ void tst_QWebEngineDownloadItem::downloadLink_data() QTest::addColumn<QByteArray>("fileDisposition"); QTest::addColumn<bool>("fileHasReferer"); QTest::addColumn<FileAction>("fileAction"); - QTest::addColumn<QWebEngineDownloadItem::DownloadType>("downloadType"); // SaveLink should always trigger a download, even for empty files. QTest::newRow("save link to empty file") @@ -395,7 +377,7 @@ void tst_QWebEngineDownloadItem::downloadLink_data() /* fileAction */ << FileIsDownloaded; } -void tst_QWebEngineDownloadItem::downloadLink() +void tst_QWebEngineDownloadRequest::downloadLink() { QFETCH(UserAction, userAction); QFETCH(bool, anchorHasDownloadAttribute); @@ -452,33 +434,31 @@ void tst_QWebEngineDownloadItem::downloadLink() QUrl downloadUrl = m_server->url(slashFileName); int acceptedCount = 0; int finishedCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); QCOMPARE(item->isFinished(), false); QCOMPARE(item->totalBytes(), -1); QCOMPARE(item->receivedBytes(), 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->type(), expectedDownloadType(userAction, fileDisposition)); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); QCOMPARE(item->isSavePageDownload(), false); QCOMPARE(item->mimeType(), QString(fileMimeTypeDetected)); QCOMPARE(QDir(item->downloadDirectory()).filePath(item->downloadFileName()), suggestedPath); - QCOMPARE(item->savePageFormat(), QWebEngineDownloadItem::UnknownSaveFormat); + QCOMPARE(item->savePageFormat(), QWebEngineDownloadRequest::UnknownSaveFormat); QCOMPARE(item->url(), downloadUrl); - QCOMPARE(item->page(), m_page); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), fileContents.size()); QCOMPARE(item->receivedBytes(), fileContents.size()); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->type(), expectedDownloadType(userAction, fileDisposition)); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); QCOMPARE(item->isSavePageDownload(), false); QCOMPARE(item->mimeType(), QString(fileMimeTypeDetected)); QCOMPARE(QDir(item->downloadDirectory()).filePath(item->downloadFileName()), downloadPath); - QCOMPARE(item->savePageFormat(), QWebEngineDownloadItem::UnknownSaveFormat); + QCOMPARE(item->savePageFormat(), QWebEngineDownloadRequest::UnknownSaveFormat); QCOMPARE(item->url(), downloadUrl); - QCOMPARE(item->page(), m_page); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); finishedCount++; }); @@ -522,7 +502,7 @@ void tst_QWebEngineDownloadItem::downloadLink() QCOMPARE(file.readAll(), fileContents); } -void tst_QWebEngineDownloadItem::downloadTwoLinks_data() +void tst_QWebEngineDownloadRequest::downloadTwoLinks_data() { QTest::addColumn<UserAction>("action1"); QTest::addColumn<UserAction>("action2"); @@ -532,7 +512,7 @@ void tst_QWebEngineDownloadItem::downloadTwoLinks_data() QTest::newRow("Click+Click") << ClickLink << ClickLink; } -void tst_QWebEngineDownloadItem::downloadTwoLinks() +void tst_QWebEngineDownloadRequest::downloadTwoLinks() { QFETCH(UserAction, action1); QFETCH(UserAction, action2); @@ -565,29 +545,23 @@ void tst_QWebEngineDownloadItem::downloadTwoLinks() QString standardDir = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); int acceptedCount = 0; int finishedCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); QCOMPARE(item->isFinished(), false); QCOMPARE(item->totalBytes(), -1); QCOMPARE(item->receivedBytes(), 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->savePageFormat(), QWebEngineDownloadItem::UnknownSaveFormat); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); + QCOMPARE(item->savePageFormat(), QWebEngineDownloadRequest::UnknownSaveFormat); QCOMPARE(item->mimeType(), QStringLiteral("text/plain")); QString filePart = QChar('/') + item->url().fileName(); QString fileName = item->url().fileName(); QCOMPARE(QDir(item->downloadDirectory()).filePath(item->downloadFileName()), standardDir + filePart); // type() is broken due to race condition in DownloadManagerDelegateQt - if (action1 == ClickLink && action2 == ClickLink) { - if (filePart == QStringLiteral("/file1")) - QCOMPARE(item->type(), expectedDownloadType(action1)); - else if (filePart == QStringLiteral("/file2")) - QCOMPARE(item->type(), expectedDownloadType(action2, QByteArrayLiteral("attachment"))); - else + if (action1 == ClickLink && action2 == ClickLink && filePart != QStringLiteral("/file1") && filePart != QStringLiteral("/file2")) QFAIL(qPrintable("Unexpected file name: " + filePart)); - } - connect(item, &QWebEngineDownloadItem::finished, [&]() { + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&]() { finishedCount++; }); item->setDownloadDirectory(tmpDir.path()); @@ -613,20 +587,20 @@ void tst_QWebEngineDownloadItem::downloadTwoLinks() QTRY_COMPARE(finishedCount, 2); } -void tst_QWebEngineDownloadItem::downloadPage_data() +void tst_QWebEngineDownloadRequest::downloadPage_data() { QTest::addColumn<bool>("saveWithPageAction"); - QTest::addColumn<QWebEngineDownloadItem::SavePageFormat>("savePageFormat"); - QTest::newRow("SingleHtmlSaveFormat") << false << QWebEngineDownloadItem::SingleHtmlSaveFormat; - QTest::newRow("CompleteHtmlSaveFormat") << false << QWebEngineDownloadItem::CompleteHtmlSaveFormat; - QTest::newRow("MimeHtmlSaveFormat") << false << QWebEngineDownloadItem::MimeHtmlSaveFormat; - QTest::newRow("SavePageAction") << true << QWebEngineDownloadItem::MimeHtmlSaveFormat; + QTest::addColumn<QWebEngineDownloadRequest::SavePageFormat>("savePageFormat"); + QTest::newRow("SingleHtmlSaveFormat") << false << QWebEngineDownloadRequest::SingleHtmlSaveFormat; + QTest::newRow("CompleteHtmlSaveFormat") << false << QWebEngineDownloadRequest::CompleteHtmlSaveFormat; + QTest::newRow("MimeHtmlSaveFormat") << false << QWebEngineDownloadRequest::MimeHtmlSaveFormat; + QTest::newRow("SavePageAction") << true << QWebEngineDownloadRequest::MimeHtmlSaveFormat; } -void tst_QWebEngineDownloadItem::downloadPage() +void tst_QWebEngineDownloadRequest::downloadPage() { QFETCH(bool, saveWithPageAction); - QFETCH(QWebEngineDownloadItem::SavePageFormat, savePageFormat); + QFETCH(QWebEngineDownloadRequest::SavePageFormat, savePageFormat); // Set up HTTP server int indexRequestCount = 0; @@ -646,19 +620,18 @@ void tst_QWebEngineDownloadItem::downloadPage() QUrl downloadUrl = m_server->url("/"); int acceptedCount = 0; int finishedCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - QCOMPARE(item->state(), saveWithPageAction ? QWebEngineDownloadItem::DownloadRequested : QWebEngineDownloadItem::DownloadInProgress); + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { + QCOMPARE(item->state(), saveWithPageAction ? QWebEngineDownloadRequest::DownloadRequested : QWebEngineDownloadRequest::DownloadInProgress); QCOMPARE(item->isFinished(), false); QCOMPARE(item->totalBytes(), -1); QCOMPARE(item->receivedBytes(), 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->type(), QWebEngineDownloadItem::SavePage); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); QCOMPARE(item->isSavePageDownload(), true); // FIXME(juvaldma): why is mimeType always the same? QCOMPARE(item->mimeType(), QStringLiteral("application/x-mimearchive")); QCOMPARE(item->savePageFormat(), savePageFormat); QCOMPARE(item->url(), downloadUrl); - QCOMPARE(item->page(), m_page); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); if (saveWithPageAction) { QVERIFY(!item->downloadDirectory().isEmpty()); @@ -670,19 +643,18 @@ void tst_QWebEngineDownloadItem::downloadPage() QCOMPARE(QDir(item->downloadDirectory()).filePath(item->downloadFileName()), downloadPath); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), item->receivedBytes()); QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->type(), QWebEngineDownloadItem::SavePage); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); QCOMPARE(item->isSavePageDownload(), true); QCOMPARE(item->mimeType(), QStringLiteral("application/x-mimearchive")); QCOMPARE(QDir(item->downloadDirectory()).filePath(item->downloadFileName()), downloadPath); QCOMPARE(item->savePageFormat(), savePageFormat); QCOMPARE(item->url(), downloadUrl); - QCOMPARE(item->page(), m_page); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); finishedCount++; }); @@ -709,7 +681,7 @@ void tst_QWebEngineDownloadItem::downloadPage() QVERIFY(file.exists()); } -void tst_QWebEngineDownloadItem::downloadViaSetUrl() +void tst_QWebEngineDownloadRequest::downloadViaSetUrl() { // Reproduce the scenario described in QTBUG-63388 by triggering downloads // of the same file multiple times via QWebEnginePage::setUrl @@ -728,8 +700,8 @@ void tst_QWebEngineDownloadItem::downloadViaSetUrl() }); // Set up profile and download handler - QVector<QUrl> downloadUrls; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + QList<QUrl> downloadUrls; + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { downloadUrls.append(item->url()); }); @@ -760,7 +732,7 @@ void tst_QWebEngineDownloadItem::downloadViaSetUrl() } } -void tst_QWebEngineDownloadItem::downloadFileNot1() +void tst_QWebEngineDownloadRequest::downloadFileNot1() { // Trigger file download via download() but don't accept(). @@ -768,11 +740,11 @@ void tst_QWebEngineDownloadItem::downloadFileNot1() rr->sendResponse(404); }); - QPointer<QWebEngineDownloadItem> downloadItem; + QPointer<QWebEngineDownloadRequest> downloadItem; int downloadCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { QVERIFY(item); - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); downloadItem = item; downloadCount++; }); @@ -782,7 +754,7 @@ void tst_QWebEngineDownloadItem::downloadFileNot1() QVERIFY(!downloadItem); } -void tst_QWebEngineDownloadItem::downloadFileNot2() +void tst_QWebEngineDownloadRequest::downloadFileNot2() { // Trigger file download via download() but call cancel() instead of accept(). @@ -790,11 +762,11 @@ void tst_QWebEngineDownloadItem::downloadFileNot2() rr->sendResponse(404); }); - QPointer<QWebEngineDownloadItem> downloadItem; + QPointer<QWebEngineDownloadRequest> downloadItem; int downloadCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { QVERIFY(item); - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); item->cancel(); downloadItem = item; downloadCount++; @@ -803,19 +775,19 @@ void tst_QWebEngineDownloadItem::downloadFileNot2() m_page->download(m_server->url(QByteArrayLiteral("/file"))); QTRY_COMPARE(downloadCount, 1); QVERIFY(downloadItem); - QCOMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCancelled); + QCOMPARE(downloadItem->state(), QWebEngineDownloadRequest::DownloadCancelled); } -void tst_QWebEngineDownloadItem::downloadDeleted() +void tst_QWebEngineDownloadRequest::downloadDeleted() { - QPointer<QWebEngineDownloadItem> downloadItem; + QPointer<QWebEngineDownloadRequest> downloadItem; int downloadCount = 0, finishedCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { QVERIFY(item); - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); downloadItem = item; - connect(downloadItem, &QWebEngineDownloadItem::finished, [&]() { ++finishedCount; }); + connect(downloadItem, &QWebEngineDownloadRequest::isFinishedChanged, [&]() { ++finishedCount; }); ++downloadCount; // accept and schedule deletion, and check if it still finishes item->accept(); @@ -831,16 +803,16 @@ void tst_QWebEngineDownloadItem::downloadDeleted() QCOMPARE(finishedCount, 1); } -void tst_QWebEngineDownloadItem::downloadDeletedByProfile() +void tst_QWebEngineDownloadRequest::downloadDeletedByProfile() { QPointer<QWebEngineProfile> profile(new QWebEngineProfile); profile->setHttpCacheType(QWebEngineProfile::NoCache); profile->settings()->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, false); bool downloadFinished = false; - QPointer<QWebEngineDownloadItem> downloadItem; - connect(profile, &QWebEngineProfile::downloadRequested, [&] (QWebEngineDownloadItem *item) { - connect(item, &QWebEngineDownloadItem::finished, [&] () { + QPointer<QWebEngineDownloadRequest> downloadItem; + connect(profile, &QWebEngineProfile::downloadRequested, [&] (QWebEngineDownloadRequest *item) { + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&] () { downloadFinished = true; }); downloadItem = item; @@ -860,7 +832,7 @@ void tst_QWebEngineDownloadItem::downloadDeletedByProfile() QTRY_COMPARE(downloadItem.isNull(), true); } -void tst_QWebEngineDownloadItem::downloadUniqueFilename_data() +void tst_QWebEngineDownloadRequest::downloadUniqueFilename_data() { QTest::addColumn<QString>("baseName"); QTest::addColumn<QString>("extension"); @@ -869,7 +841,7 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilename_data() QTest::newRow("tar.gz") << QString("test(1.test)") << QString("tar.gz"); } -void tst_QWebEngineDownloadItem::downloadUniqueFilename() +void tst_QWebEngineDownloadRequest::downloadUniqueFilename() { QFETCH(QString, baseName); QFETCH(QString, extension); @@ -884,7 +856,8 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilename() // Set up HTTP server ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { + auto requestPath = QString::fromUtf8(rr->requestPath()); + if (rr->requestMethod() == "GET" && requestPath == ("/" + fileName)) { rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); rr->setResponseBody(QByteArrayLiteral("a")); @@ -895,16 +868,15 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilename() }); // Set up profile and download handler - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { suggestedFileName = item->suggestedFileName(); item->accept(); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), item->receivedBytes()); QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->type(), QWebEngineDownloadItem::Attachment); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); QCOMPARE(item->isSavePageDownload(), false); downloadedFilePath = QDir(item->downloadDirectory()).filePath(item->downloadFileName()); downloadFinished = true; @@ -926,7 +898,7 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilename() } } -void tst_QWebEngineDownloadItem::downloadUniqueFilenameWithTimestamp() +void tst_QWebEngineDownloadRequest::downloadUniqueFilenameWithTimestamp() { // Set up HTTP server QString baseName("test(1.test)"); @@ -941,7 +913,8 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilenameWithTimestamp() m_profile->setDownloadPath(tmpDir.path()); ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { + auto requestPath = QString::fromUtf8(rr->requestPath()); + if (rr->requestMethod() == "GET" && requestPath == ("/" + fileName)) { rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); rr->setResponseBody(QByteArrayLiteral("a")); @@ -952,16 +925,16 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilenameWithTimestamp() }); // Set up profile and download handler - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { suggestedFileName = item->suggestedFileName(); item->accept(); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), item->receivedBytes()); QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->page(), m_page); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); downloadFinished = true; downloadedFilePath = QDir(item->downloadDirectory()).filePath(item->downloadFileName()); }); @@ -1004,7 +977,7 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilenameWithTimestamp() } } -void tst_QWebEngineDownloadItem::downloadToDefaultLocation() +void tst_QWebEngineDownloadRequest::downloadToDefaultLocation() { QTemporaryDir tmpDir; QVERIFY(tmpDir.isValid()); @@ -1021,7 +994,7 @@ void tst_QWebEngineDownloadItem::downloadToDefaultLocation() QCOMPARE(m_profile->downloadPath(), QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); } -void tst_QWebEngineDownloadItem::downloadToNonExistentDir() +void tst_QWebEngineDownloadRequest::downloadToNonExistentDir() { QString baseName("test(1.test)"); QString extension("txt"); @@ -1036,7 +1009,8 @@ void tst_QWebEngineDownloadItem::downloadToNonExistentDir() // Set up HTTP server ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { + auto requestPath = QString::fromUtf8(rr->requestPath()); + if (rr->requestMethod() == "GET" && requestPath == ("/" + fileName)) { rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); rr->setResponseBody(QByteArrayLiteral("a")); @@ -1047,16 +1021,16 @@ void tst_QWebEngineDownloadItem::downloadToNonExistentDir() }); // Set up profile and download handler - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { suggestedFileName = item->suggestedFileName(); item->accept(); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), item->receivedBytes()); QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->page(), m_page); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); downloadFinished = true; downloadedFilePath = QDir(item->downloadDirectory()).filePath(item->downloadFileName()); }); @@ -1073,7 +1047,7 @@ void tst_QWebEngineDownloadItem::downloadToNonExistentDir() QCOMPARE(suggestedFileName, fileName); } -void tst_QWebEngineDownloadItem::downloadToReadOnlyDir() +void tst_QWebEngineDownloadRequest::downloadToReadOnlyDir() { #ifdef Q_OS_WIN QSKIP("Cannot change file permissions on Windows."); @@ -1092,7 +1066,8 @@ void tst_QWebEngineDownloadItem::downloadToReadOnlyDir() // Set up HTTP server ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { + auto requestPath = QString::fromUtf8(rr->requestPath()); + if (rr->requestMethod() == "GET" && requestPath == ("/" + fileName)) { rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); rr->setResponseBody(QByteArrayLiteral("a")); @@ -1102,12 +1077,12 @@ void tst_QWebEngineDownloadItem::downloadToReadOnlyDir() } }); - QPointer<QWebEngineDownloadItem> downloadItem; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { + QPointer<QWebEngineDownloadRequest> downloadItem; + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { suggestedFileName = item->suggestedFileName(); downloadItem = item; item->accept(); - connect(item, &QWebEngineDownloadItem::finished, [&]() { + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&]() { downloadFinished = true; }); downloadAccepted = true; @@ -1121,9 +1096,9 @@ void tst_QWebEngineDownloadItem::downloadToReadOnlyDir() QTRY_VERIFY(downloadAccepted); QVERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadInterrupted); + QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadRequest::DownloadInterrupted); QCOMPARE(downloadItem->isFinished(), false); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::FileAccessDenied); + QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadRequest::FileAccessDenied); QVERIFY(!QFile(downloadedFilePath).exists()); QCOMPARE(suggestedFileName, fileName); @@ -1133,125 +1108,7 @@ void tst_QWebEngineDownloadItem::downloadToReadOnlyDir() QFile(m_profile->downloadPath()).setPermissions(QFileDevice::WriteOwner); } -#if QT_DEPRECATED_SINCE(5, 14) -void tst_QWebEngineDownloadItem::downloadPathValidation() -{ - const QString fileName = "test.txt"; - QString downloadPath; - QString originalDownloadPath; - - QTemporaryDir tmpDir; - QVERIFY(tmpDir.isValid()); - m_profile->setDownloadPath(tmpDir.path()); - - // Set up HTTP server - ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { - rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); - rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); - rr->setResponseBody(QByteArrayLiteral("a")); - rr->sendResponse(); - } else { - rr->sendResponse(404); - } - }); - - // Set up profile and download handler - QPointer<QWebEngineDownloadItem> downloadItem; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - downloadItem = item; - originalDownloadPath = item->path(); - - item->setPath(downloadPath); - item->accept(); - - connect(item, &QWebEngineDownloadItem::stateChanged, [&, item](QWebEngineDownloadItem::DownloadState downloadState) { - if (downloadState == QWebEngineDownloadItem::DownloadInterrupted) { - item->cancel(); - } - }); - - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->isFinished(), true); - QCOMPARE(item->totalBytes(), item->receivedBytes()); - QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->page(), m_page); - }); - }); - - QString oldPath = QDir::currentPath(); - QDir::setCurrent(tmpDir.path()); - - // Set only the file name. - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = fileName; - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), fileName); - - // Set only the directory path. - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = tmpDir.path(); - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), originalDownloadPath); - - // Set only the directory path with separator. - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = tmpDir.path() + QDir::separator(); - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), originalDownloadPath); - - // Set only the directory with the current directory path without ending separator. - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = "."; - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), originalDownloadPath); - - // Set only the directory with the current directory path with ending separator. - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = "./"; - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), originalDownloadPath); - - downloadItem.clear(); - originalDownloadPath = ""; - downloadPath = "..."; - m_page->setUrl(m_server->url("/" + fileName)); - QTRY_VERIFY(downloadItem); -#if !defined(Q_OS_WIN) - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCancelled); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::FileFailed); - QCOMPARE(downloadItem->path(), downloadPath); -#else - // Windows interprets the "..." path as a valid path. It will be the current path. - QTRY_COMPARE(downloadItem->state(), QWebEngineDownloadItem::DownloadCompleted); - QCOMPARE(downloadItem->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(downloadItem->path(), originalDownloadPath); -#endif // !defined(Q_OS_WIN) - QDir::setCurrent(oldPath); -} -#endif - -void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName_data() +void tst_QWebEngineDownloadRequest::downloadToDirectoryWithFileName_data() { QTest::addColumn<bool>("setDirectoryFirst"); @@ -1259,7 +1116,7 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName_data() QTest::newRow("setFileNameFirst") << false; } -void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() +void tst_QWebEngineDownloadRequest::downloadToDirectoryWithFileName() { QFETCH(bool, setDirectoryFirst); QString downloadDirectory; @@ -1277,7 +1134,8 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() // Set up HTTP server ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - if (rr->requestMethod() == "GET" && rr->requestPath() == ("/" + fileName)) { + auto requestPath = QString::fromUtf8(rr->requestPath()); + if (rr->requestMethod() == "GET" && requestPath == ("/" + fileName)) { rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("application/octet-stream")); rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment")); rr->setResponseBody(QByteArrayLiteral("a")); @@ -1288,33 +1146,40 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() }); // Set up profile and download handler - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { + QSignalSpy fileNameSpy(item, &QWebEngineDownloadRequest::downloadFileNameChanged); + QSignalSpy directorySpy(item, &QWebEngineDownloadRequest::downloadDirectoryChanged); + bool isUniquifiedFileName = false; if (!downloadDirectory.isEmpty() && setDirectoryFirst) { + const QString &originalFileName = item->downloadFileName(); item->setDownloadDirectory(downloadDirectory); QCOMPARE(item->downloadDirectory(), downloadDirectory); + QCOMPARE(directorySpy.count(), 1); + isUniquifiedFileName = (originalFileName != item->downloadFileName()); + QCOMPARE(fileNameSpy.count(), isUniquifiedFileName ? 1 : 0); } if (!downloadFileName.isEmpty()) { item->setDownloadFileName(downloadFileName); QCOMPARE(item->downloadFileName(), downloadFileName); + QCOMPARE(fileNameSpy.count(), isUniquifiedFileName ? 2 : 1); } if (!downloadDirectory.isEmpty() && !setDirectoryFirst) { item->setDownloadDirectory(downloadDirectory); QCOMPARE(item->downloadDirectory(), downloadDirectory); + QCOMPARE(directorySpy.count(), 1); } - QCOMPARE(item->path(), QDir(item->downloadDirectory()).filePath(item->downloadFileName())); item->accept(); - connect(item, &QWebEngineDownloadItem::finished, [&, item]() { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadCompleted); + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, [&, item]() { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadCompleted); QCOMPARE(item->isFinished(), true); QCOMPARE(item->totalBytes(), item->receivedBytes()); QVERIFY(item->receivedBytes() > 0); - QCOMPARE(item->interruptReason(), QWebEngineDownloadItem::NoReason); - QCOMPARE(item->page(), m_page); + QCOMPARE(item->interruptReason(), QWebEngineDownloadRequest::NoReason); + QCOMPARE(QWebEnginePage::fromDownloadRequest(item), m_page); downloadFinished = true; downloadedFilePath = QDir(item->downloadDirectory()).filePath(item->downloadFileName()); downloadedSuggestedFileName = item->suggestedFileName(); @@ -1351,7 +1216,7 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() QCOMPARE(downloadedSuggestedFileName, fileName); // Download another file to the same directory and set file name by - // QWebEngineDownloadItem::setDownloadDirectory() and setDownloadFileName() to avoid uniquification. + // QWebEngineDownloadRequest::setDownloadDirectory() and setDownloadFileName() to avoid uniquification. downloadFinished = false; downloadDirectory = m_profile->downloadPath() + QDir::separator() + "test1" + QDir::separator(); downloadFileName = "test1.txt"; @@ -1372,7 +1237,7 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() QCOMPARE(downloadedSuggestedFileName, fileName); // Download the same file to same directory and set file name by - // QWebEngineDownloadItem::setDownloadDirectory() and setDownloadFileName() to avoid uniquification. + // QWebEngineDownloadRequest::setDownloadDirectory() and setDownloadFileName() to avoid uniquification. downloadFinished = false; downloadDirectory = m_profile->downloadPath() + QDir::separator() + "test2" + QDir::separator(); downloadFileName = "test1.txt"; @@ -1394,7 +1259,7 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName() QCOMPARE(downloadedSuggestedFileName, fileName); } -void tst_QWebEngineDownloadItem::downloadDataUrls_data() +void tst_QWebEngineDownloadRequest::downloadDataUrls_data() { QTest::addColumn<QByteArray>("htmlData"); QTest::addColumn<QString>("expectedFileName"); @@ -1404,7 +1269,7 @@ void tst_QWebEngineDownloadItem::downloadDataUrls_data() } -void tst_QWebEngineDownloadItem::downloadDataUrls() +void tst_QWebEngineDownloadRequest::downloadDataUrls() { QFETCH(QByteArray, htmlData); QFETCH(QString, expectedFileName); @@ -1423,8 +1288,8 @@ void tst_QWebEngineDownloadItem::downloadDataUrls() m_profile->setDownloadPath(tmpDir.path()); int downloadRequestCount = 0; - ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) { - QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested); + ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadRequest *item) { + QCOMPARE(item->state(), QWebEngineDownloadRequest::DownloadRequested); QCOMPARE(item->downloadFileName(), expectedFileName); downloadRequestCount++; }); @@ -1439,5 +1304,5 @@ void tst_QWebEngineDownloadItem::downloadDataUrls() QTRY_COMPARE(downloadRequestCount, 1); } -QTEST_MAIN(tst_QWebEngineDownloadItem) -#include "tst_qwebenginedownloaditem.moc" +QTEST_MAIN(tst_QWebEngineDownloadRequest) +#include "tst_qwebenginedownloadrequest.moc" diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 5df09357f..a8d0e1ac8 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -31,11 +31,12 @@ #include <QMenu> #include <QMimeDatabase> #include <QNetworkProxy> -#include <QOpenGLWidget> #include <QPaintEngine> #include <QPushButton> #include <QScreen> -#include <QStateMachine> +#if defined(QT_STATEMACHINE_LIB) +# include <QStateMachine> +#endif #include <QtGui/QClipboard> #include <QtTest/QtTest> #include <QTextCharFormat> @@ -46,7 +47,7 @@ #include <qnetworkcookiejar.h> #include <qnetworkreply.h> #include <qnetworkrequest.h> -#include <qwebenginedownloaditem.h> +#include <qwebenginedownloadrequest.h> #include <qwebenginefindtextresult.h> #include <qwebenginefullscreenrequest.h> #include <qwebenginehistory.h> @@ -130,8 +131,10 @@ private Q_SLOTS: void findTextCalledOnMatch(); void findTextActiveMatchOrdinal(); void deleteQWebEngineViewTwice(); +#if defined(QT_STATEMACHINE_LIB) void loadSignalsOrder_data(); void loadSignalsOrder(); +#endif void openWindowDefaultSize(); #ifdef Q_OS_MAC @@ -379,7 +382,7 @@ void tst_QWebEnginePage::geolocationRequestJS() QFETCH(int, errorCode); QWebEngineView view; JSTestPage *newPage = new JSTestPage(&view); - newPage->setView(&view); + view.setPage(newPage); newPage->setGeolocationPermission(allowed); connect(newPage, SIGNAL(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)), @@ -1100,11 +1103,11 @@ void tst_QWebEnginePage::findText() void tst_QWebEnginePage::findTextResult() { QSignalSpy findTextSpy(m_view->page(), &QWebEnginePage::findTextFinished); - auto signalResult = [&findTextSpy]() -> QVector<int> { + auto signalResult = [&findTextSpy]() -> QList<int> { if (findTextSpy.count() != 1) - return QVector<int>({-1, -1}); + return QList<int>({-1, -1}); auto r = findTextSpy.takeFirst().value(0).value<QWebEngineFindTextResult>(); - return QVector<int>({ r.numberOfMatches(), r.activeMatch() }); + return QList<int>({ r.numberOfMatches(), r.activeMatch() }); }; // findText will abort in blink if the view has an empty size. @@ -1116,21 +1119,21 @@ void tst_QWebEnginePage::findTextResult() QTRY_COMPARE(loadSpy.count(), 1); QCOMPARE(findTextSync(m_page, ""), false); - QCOMPARE(signalResult(), QVector<int>({0, 0})); + QCOMPARE(signalResult(), QList<int>({0, 0})); const QStringList words = { "foo", "bar" }; for (const QString &subString : words) { QCOMPARE(findTextSync(m_page, subString), true); - QCOMPARE(signalResult(), QVector<int>({1, 1})); + QCOMPARE(signalResult(), QList<int>({1, 1})); QCOMPARE(findTextSync(m_page, ""), false); - QCOMPARE(signalResult(), QVector<int>({0, 0})); + QCOMPARE(signalResult(), QList<int>({0, 0})); } QCOMPARE(findTextSync(m_page, "blahhh"), false); - QCOMPARE(signalResult(), QVector<int>({0, 0})); + QCOMPARE(signalResult(), QList<int>({0, 0})); QCOMPARE(findTextSync(m_page, ""), false); - QCOMPARE(signalResult(), QVector<int>({0, 0})); + QCOMPARE(signalResult(), QList<int>({0, 0})); } void tst_QWebEnginePage::findTextSuccessiveShouldCallAllCallbacks() @@ -1389,6 +1392,8 @@ void tst_QWebEnginePage::deleteQWebEngineViewTwice() } } +// TODO: Reimplement test without QStateMachine or add qtscxml module dependency +#if defined(QT_STATEMACHINE_LIB) class SpyForLoadSignalsOrder : public QStateMachine { Q_OBJECT public: @@ -1446,6 +1451,7 @@ void tst_QWebEnginePage::loadSignalsOrder() page.load(url); QTRY_VERIFY_WITH_TIMEOUT(loadSpy.isFinished(), 20000); } +#endif // defined(QT_STATEMACHINE_LIB) void tst_QWebEnginePage::renderWidgetHostViewNotShowTopLevel() { @@ -1712,9 +1718,9 @@ void tst_QWebEnginePage::savePage() QWebEnginePage *page = view.page(); connect(page->profile(), &QWebEngineProfile::downloadRequested, - [] (QWebEngineDownloadItem *item) + [] (QWebEngineDownloadRequest *item) { - connect(item, &QWebEngineDownloadItem::finished, + connect(item, &QWebEngineDownloadRequest::isFinishedChanged, &QTestEventLoop::instance(), &QTestEventLoop::exitLoop, Qt::QueuedConnection); }); @@ -1728,7 +1734,7 @@ void tst_QWebEnginePage::savePage() // Save the loaded page as HTML. QTemporaryDir tempDir(QDir::tempPath() + "/tst_qwebengineview-XXXXXX"); const QString filePath = tempDir.path() + "/thingumbob.html"; - page->save(filePath, QWebEngineDownloadItem::CompleteHtmlSaveFormat); + page->save(filePath, QWebEngineDownloadRequest::CompleteHtmlSaveFormat); QTestEventLoop::instance().enterLoop(10); // Load something else. @@ -1748,9 +1754,9 @@ void tst_QWebEnginePage::openWindowDefaultSize() QSignalSpy spyFinished(&page, &QWebEnginePage::loadFinished); QSignalSpy windowCreatedSpy(&page, SIGNAL(windowCreated())); QWebEngineView view; - page.setView(&view); + view.setPage(&page); page.settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true); - page.setUrl(QUrl("about:blank")); + view.setUrl(QUrl("about:blank")); view.show(); QTRY_COMPARE(spyFinished.count(), 1); @@ -2092,7 +2098,7 @@ private Q_SLOTS: void continueError() { - emit error(this->error()); + emit errorOccurred(this->error()); emit finished(); } }; @@ -2448,9 +2454,13 @@ void tst_QWebEnginePage::setContent_data() QString str = QString::fromUtf8("ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει"); QTest::newRow("UTF-8 plain text") << "text/plain; charset=utf-8" << str.toUtf8() << str; - QTextCodec *utf16 = QTextCodec::codecForName("UTF-16"); - if (utf16) - QTest::newRow("UTF-16 plain text") << "text/plain; charset=utf-16" << utf16->fromUnicode(str) << str; + QBuffer out16; + out16.open(QIODevice::WriteOnly); + QTextStream stream16(&out16); + stream16.setEncoding(QStringConverter::Utf16); + stream16 << str; + stream16.flush(); + QTest::newRow("UTF-16 plain text") << "text/plain; charset=utf-16" << out16.buffer() << str; str = QString::fromUtf8("Une chaîne de caractères à sa façon."); QTest::newRow("latin-1 plain text") << "text/plain; charset=iso-8859-1" << str.toLatin1() << str; @@ -4696,7 +4706,7 @@ void tst_QWebEnginePage::closeContents() QWebEngineView *dialogView = new QWebEngineView; QWebEnginePage *dialogPage = page.createdWindows[0]; - dialogPage->setView(dialogView); + dialogView->setPage(dialogPage); QCOMPARE(dialogPage->lifecycleState(), QWebEnginePage::LifecycleState::Active); // This should not crash. diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp index 1b0f95064..eb692f351 100644 --- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp +++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp @@ -35,11 +35,11 @@ #include <QtWebEngineCore/qwebenginecookiestore.h> #include <QtWebEngineCore/qwebengineurlscheme.h> #include <QtWebEngineCore/qwebengineurlschemehandler.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> -#include <QtWebEngineWidgets/qwebenginepage.h> -#include <QtWebEngineWidgets/qwebenginesettings.h> +#include <QtWebEngineCore/qwebenginesettings.h> +#include <QtWebEngineCore/qwebengineprofile.h> +#include <QtWebEngineCore/qwebenginepage.h> +#include <QtWebEngineCore/qwebenginedownloadrequest.h> #include <QtWebEngineWidgets/qwebengineview.h> -#include <QtWebEngineWidgets/qwebenginedownloaditem.h> #if QT_CONFIG(webengine_webchannel) #include <QWebChannel> @@ -116,7 +116,7 @@ void tst_QWebEngineProfile::init() QCOMPARE(profile->persistentCookiesPolicy(), QWebEngineProfile::AllowPersistentCookies); QCOMPARE(profile->cachePath(), QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/QtWebEngine/Default")); - QCOMPARE(profile->persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QCOMPARE(profile->persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/QtWebEngine/Default")); } @@ -136,7 +136,7 @@ void tst_QWebEngineProfile::privateProfile() QCOMPARE(otrProfile.httpCacheType(), QWebEngineProfile::MemoryHttpCache); QCOMPARE(otrProfile.persistentCookiesPolicy(), QWebEngineProfile::NoPersistentCookies); QCOMPARE(otrProfile.cachePath(), QString()); - QCOMPARE(otrProfile.persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QCOMPARE(otrProfile.persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/QtWebEngine/OffTheRecord")); // TBD: setters do not really work otrProfile.setCachePath(QStringLiteral("/home/foo/bar")); @@ -159,7 +159,7 @@ void tst_QWebEngineProfile::testProfile() QCOMPARE(profile.persistentCookiesPolicy(), QWebEngineProfile::AllowPersistentCookies); QCOMPARE(profile.cachePath(), QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/QtWebEngine/Test")); - QCOMPARE(profile.persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QCOMPARE(profile.persistentStoragePath(), QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/QtWebEngine/Test")); } @@ -832,10 +832,10 @@ void tst_QWebEngineProfile::httpAcceptLanguage() void tst_QWebEngineProfile::downloadItem() { - qRegisterMetaType<QWebEngineDownloadItem *>(); + qRegisterMetaType<QWebEngineDownloadRequest *>(); QWebEngineProfile testProfile; QWebEnginePage page(&testProfile); - QSignalSpy downloadSpy(&testProfile, SIGNAL(downloadRequested(QWebEngineDownloadItem *))); + QSignalSpy downloadSpy(&testProfile, SIGNAL(downloadRequested(QWebEngineDownloadRequest *))); page.load(QUrl::fromLocalFile(QCoreApplication::applicationFilePath())); QTRY_COMPARE(downloadSpy.count(), 1); } @@ -845,9 +845,9 @@ void tst_QWebEngineProfile::changePersistentPath() TestServer server; QVERIFY(server.start()); - AutoDir dataDir1(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + AutoDir dataDir1(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/QtWebEngine/Test")); - AutoDir dataDir2(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + AutoDir dataDir2(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/QtWebEngine/Test2")); QWebEngineProfile testProfile(QStringLiteral("Test")); @@ -871,7 +871,7 @@ void tst_QWebEngineProfile::changeHttpUserAgent() TestServer server; QVERIFY(server.start()); - QVector<QByteArray> userAgents; + QList<QByteArray> userAgents; connect(&server, &HttpServer::newRequest, [&](HttpReqRep *rr) { if (rr->requestPath() == "/hedgehog.html") userAgents.push_back(rr->requestHeader(QByteArrayLiteral("user-agent"))); @@ -898,7 +898,7 @@ void tst_QWebEngineProfile::changeHttpAcceptLanguage() TestServer server; QVERIFY(server.start()); - QVector<QByteArray> languages; + QList<QByteArray> languages; connect(&server, &HttpServer::newRequest, [&](HttpReqRep *rr) { if (rr->requestPath() == "/hedgehog.html") languages.push_back(rr->requestHeader(QByteArrayLiteral("accept-language"))); diff --git a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp index a690d516e..c141c0754 100644 --- a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp +++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp @@ -74,6 +74,7 @@ private Q_SLOTS: void noTransportWithoutWebChannel(); void scriptsInNestedIframes(); void matchQrcUrl(); + void injectionOrder(); }; void tst_QWebEngineScript::domEditing() @@ -322,8 +323,8 @@ void tst_QWebEngineScript::scriptModifications() QVERIFY(spyFinished.wait()); QCOMPARE(evaluateJavaScriptSync(&page, "document.body.innerText"), QVariant::fromValue(QStringLiteral("SUCCESS"))); QVERIFY(page.scripts().count() == 1); - QWebEngineScript s = page.scripts().findScript(QStringLiteral("String1")); - QVERIFY(page.scripts().remove(s)); + QList<QWebEngineScript> s = page.scripts().find(QStringLiteral("String1")); + QVERIFY(page.scripts().remove(s.first())); QVERIFY(page.scripts().count() == 0); } @@ -415,7 +416,7 @@ void tst_QWebEngineScript::webChannel() QCOMPARE(testObject.text(), QStringLiteral("test")); if (worldId != QWebEngineScript::MainWorld) - QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant(QVariant::Invalid)); + QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant()); } #endif void tst_QWebEngineScript::noTransportWithoutWebChannel() @@ -423,11 +424,11 @@ void tst_QWebEngineScript::noTransportWithoutWebChannel() QWebEnginePage page; page.setHtml(QStringLiteral("<html><body></body></html>")); - QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant(QVariant::Invalid)); + QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant()); page.triggerAction(QWebEnginePage::Reload); QSignalSpy spyFinished(&page, &QWebEnginePage::loadFinished); QVERIFY(spyFinished.wait()); - QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant(QVariant::Invalid)); + QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant()); } void tst_QWebEngineScript::scriptsInNestedIframes() @@ -488,9 +489,9 @@ void tst_QWebEngineScript::webChannelResettingAndUnsetting() // There should be no webChannelTransport yet. QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::MainWorld), - QVariant(QVariant::Invalid)); + QVariant()); QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::ApplicationWorld), - QVariant(QVariant::Invalid)); + QVariant()); QWebChannel channel; page.setWebChannel(&channel, QWebEngineScript::MainWorld); @@ -499,13 +500,13 @@ void tst_QWebEngineScript::webChannelResettingAndUnsetting() QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::MainWorld), QVariant(QVariantMap())); QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::ApplicationWorld), - QVariant(QVariant::Invalid)); + QVariant()); page.setWebChannel(&channel, QWebEngineScript::ApplicationWorld); // Now it should have moved to ApplicationWorld. QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::MainWorld), - QVariant(QVariant::Invalid)); + QVariant()); QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::ApplicationWorld), QVariant(QVariantMap())); @@ -513,9 +514,9 @@ void tst_QWebEngineScript::webChannelResettingAndUnsetting() // And now it should be gone again. QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::MainWorld), - QVariant(QVariant::Invalid)); + QVariant()); QCOMPARE(evaluateJavaScriptSyncInWorld(&page, "qt.webChannelTransport", QWebEngineScript::ApplicationWorld), - QVariant(QVariant::Invalid)); + QVariant()); } void tst_QWebEngineScript::webChannelWithExistingQtObject() @@ -523,7 +524,7 @@ void tst_QWebEngineScript::webChannelWithExistingQtObject() QWebEnginePage page; evaluateJavaScriptSync(&page, "qt = 42"); - QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant(QVariant::Invalid)); + QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant()); QWebChannel channel; page.setWebChannel(&channel); @@ -614,6 +615,54 @@ document.title = 'New title'; QCOMPARE(page.title(), "New title"); } +// Add many scripts and check order of execution. +void tst_QWebEngineScript::injectionOrder() +{ + QWebEngineProfile profile; + class Page : public QWebEnginePage + { + public: + Page(QWebEngineProfile *profile) : QWebEnginePage(profile) {} + QVector<QString> log; + + protected: + void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel, const QString &message, int, + const QString &) override + { + log.append(message); + } + } page(&profile); + QWebEngineScript::InjectionPoint points[] = { + QWebEngineScript::DocumentCreation, + QWebEngineScript::DocumentReady, + QWebEngineScript::Deferred, + }; + int nPoints = 3; + int nCollections = 2; + int nScripts = 5; + + QVector<QString> expected; + for (int iPoint = 0; iPoint != nPoints; ++iPoint) { + for (int iCollection = 0; iCollection != nCollections; ++iCollection) { + for (int iScript = 0; iScript != nScripts; ++iScript) { + QWebEngineScript script; + script.setName(QString("%1%2%3").arg(iPoint).arg(iCollection).arg(iScript)); + expected.append(script.name()); + script.setInjectionPoint(points[iPoint]); + script.setWorldId(QWebEngineScript::MainWorld); + script.setSourceCode(QStringLiteral("console.error('%1');").arg(script.name())); + if (iCollection == 0) + profile.scripts()->insert(script); + else + page.scripts().insert(script); + } + } + } + + page.load(QUrl("qrc:/resources/test_iframe_inner.html")); + QTRY_COMPARE(page.log, expected); +} + QTEST_MAIN(tst_QWebEngineScript) #include "tst_qwebenginescript.moc" diff --git a/tests/auto/widgets/qwebenginesettings/BLACKLIST b/tests/auto/widgets/qwebenginesettings/BLACKLIST new file mode 100644 index 000000000..d4a35a76a --- /dev/null +++ b/tests/auto/widgets/qwebenginesettings/BLACKLIST @@ -0,0 +1,2 @@ +[javascriptClipboard] +ubuntu-20.04 diff --git a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp index a09901e69..a7c3ccb3c 100644 --- a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp +++ b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp @@ -177,7 +177,7 @@ void tst_QWebEngineSettings::setInAcceptNavigationRequest() { NavigationRequestOverride page; QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool))); - QWebEngineSettings::defaultSettings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); QVERIFY(!page.settings()->testAttribute(QWebEngineSettings::JavascriptEnabled)); page.load(QUrl("about:blank")); diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 4854b3603..284f84d9f 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -28,8 +28,9 @@ #include <qwebengineview.h> #include <qwebenginepage.h> #include <qwebenginesettings.h> -#include <qnetworkrequest.h> +#include <qaction.h> #include <qdiriterator.h> +#include <qnetworkrequest.h> #include <qstackedlayout.h> #include <qtemporarydir.h> #include <QClipboard> @@ -45,7 +46,6 @@ #include <QTcpServer> #include <QTcpSocket> #include <QStyle> -#include <QtWidgets/qaction.h> #include <QWebEngineProfile> #include <QtCore/qregularexpression.h> @@ -312,7 +312,7 @@ void tst_QWebEngineView::changePage() if (!fromIsNullPage) { QVERIFY(!pageFrom->iconUrl().isEmpty()); QCOMPARE(spyIconUrl.last().value(0).toUrl(), pageFrom->iconUrl()); - QCOMPARE(spyIcon.last().value(0), QVariant::fromValue(pageFrom->icon())); + QCOMPARE(spyIcon.last().value(0).value<QIcon>(), pageFrom->icon()); } QScopedPointer<QWebEnginePage> pageTo(new QWebEnginePage); @@ -341,7 +341,7 @@ void tst_QWebEngineView::changePage() QCOMPARE(pageFrom->iconUrl() == pageTo->iconUrl(), iconIsSame); if (!iconIsSame) { QCOMPARE(spyIconUrl.last().value(0).toUrl(), pageTo->iconUrl()); - QCOMPARE(spyIcon.last().value(0), QVariant::fromValue(pageTo->icon())); + QCOMPARE(spyIcon.last().value(0).value<QIcon>(), pageTo->icon()); } // verify no emits on destroy with the same number of signals in spy @@ -578,10 +578,10 @@ void tst_QWebEngineView::focusInputTypes() class KeyEventRecordingWidget : public QWidget { public: - QList<QKeyEvent> pressEvents; - QList<QKeyEvent> releaseEvents; - void keyPressEvent(QKeyEvent *e) override { pressEvents << *e; } - void keyReleaseEvent(QKeyEvent *e) override { releaseEvents << *e; } + QList<QKeyEvent *> pressEvents; + QList<QKeyEvent *> releaseEvents; + void keyPressEvent(QKeyEvent *e) override { pressEvents << e->clone(); } + void keyReleaseEvent(QKeyEvent *e) override { releaseEvents << e->clone(); } }; void tst_QWebEngineView::unhandledKeyEventPropagation() @@ -627,15 +627,15 @@ void tst_QWebEngineView::unhandledKeyEventPropagation() // The page will consume the Tab key to change focus between elements while the arrow // keys won't be used. QCOMPARE(parentWidget.pressEvents.size(), 3); - QCOMPARE(parentWidget.pressEvents[0].key(), (int)Qt::Key_Right); - QCOMPARE(parentWidget.pressEvents[1].key(), (int)Qt::Key_Left); - QCOMPARE(parentWidget.pressEvents[2].key(), (int)Qt::Key_Y); + QCOMPARE(parentWidget.pressEvents[0]->key(), (int)Qt::Key_Right); + QCOMPARE(parentWidget.pressEvents[1]->key(), (int)Qt::Key_Left); + QCOMPARE(parentWidget.pressEvents[2]->key(), (int)Qt::Key_Y); // Key releases will all come back unconsumed. - QCOMPARE(parentWidget.releaseEvents[0].key(), (int)Qt::Key_Right); - QCOMPARE(parentWidget.releaseEvents[1].key(), (int)Qt::Key_Tab); - QCOMPARE(parentWidget.releaseEvents[2].key(), (int)Qt::Key_Left); - QCOMPARE(parentWidget.releaseEvents[3].key(), (int)Qt::Key_Y); + QCOMPARE(parentWidget.releaseEvents[0]->key(), (int)Qt::Key_Right); + QCOMPARE(parentWidget.releaseEvents[1]->key(), (int)Qt::Key_Tab); + QCOMPARE(parentWidget.releaseEvents[2]->key(), (int)Qt::Key_Left); + QCOMPARE(parentWidget.releaseEvents[3]->key(), (int)Qt::Key_Y); } void tst_QWebEngineView::horizontalScrollbarTest() @@ -923,7 +923,7 @@ public: private: int m_eventCounter; - QVector<QString> m_eventHistory; + QList<QString> m_eventHistory; }; void tst_QWebEngineView::doNotSendMouseKeyboardEventsWhenDisabled() @@ -1230,7 +1230,7 @@ void tst_QWebEngineView::mixLangLocale() QFETCH(QString, locale); QFETCH(QByteArray, formattedNumber); - QLocale::setDefault(locale); + QLocale::setDefault(QLocale(locale)); QWebEngineView view; QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished); @@ -1704,7 +1704,7 @@ void tst_QWebEngineView::inputFieldOverridesShortcuts() }; // The input form is not focused. The action is triggered on pressing Shift+Delete. - action->setShortcut(Qt::SHIFT + Qt::Key_Delete); + action->setShortcut(Qt::SHIFT | Qt::Key_Delete); QTest::keyClick(view.windowHandle(), Qt::Key_Delete, Qt::ShiftModifier); QTRY_VERIFY(actionTriggered); QCOMPARE(inputFieldValue(), QString("x")); @@ -1740,7 +1740,7 @@ void tst_QWebEngineView::inputFieldOverridesShortcuts() // A Ctrl-1 action is no default Qt key binding and should be triggerable. evaluateJavaScriptSync(view.page(), "document.getElementById('input1').focus();"); QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("input1")); - action->setShortcut(Qt::CTRL + Qt::Key_1); + action->setShortcut(Qt::CTRL | Qt::Key_1); QTest::keyClick(view.windowHandle(), Qt::Key_1, Qt::ControlModifier); QTRY_VERIFY(actionTriggered); QCOMPARE(inputFieldValue(), QString("yxx")); @@ -3374,6 +3374,12 @@ void tst_QWebEngineView::switchPage() QWebEnginePage page2(&profile); QSignalSpy loadFinishedSpy1(&page1, SIGNAL(loadFinished(bool))); QSignalSpy loadFinishedSpy2(&page2, SIGNAL(loadFinished(bool))); + // TODO fixme: page without the view has no real widget behind, so + // reading graphical content will fail, add view for now. + QWebEngineView webView1; + QWebEngineView webView2; + webView1.setPage(&page1); + webView2.setPage(&page2); page1.setHtml("<html><body bgcolor=\"#000000\"></body></html>"); page2.setHtml("<html><body bgcolor=\"#ffffff\"></body></html>"); QTRY_VERIFY(loadFinishedSpy1.count() && loadFinishedSpy2.count()); @@ -3417,7 +3423,7 @@ void tst_QWebEngineView::setViewDeletesImplicitPage() QWebEngineView view; QPointer<QWebEnginePage> implicitPage = view.page(); QWebEnginePage explicitPage; - explicitPage.setView(&view); + view.setPage(&explicitPage); QCOMPARE(view.page(), &explicitPage); QVERIFY(!implicitPage); // should be deleted } @@ -3438,8 +3444,8 @@ void tst_QWebEngineView::setViewPreservesExplicitPage() QWebEngineView view; QPointer<QWebEnginePage> explicitPage1 = new QWebEnginePage(&view); QPointer<QWebEnginePage> explicitPage2 = new QWebEnginePage(&view); - explicitPage1->setView(&view); - explicitPage2->setView(&view); + view.setPage(explicitPage1.data()); + view.setPage(explicitPage2.data()); QCOMPARE(view.page(), explicitPage2.data()); QVERIFY(explicitPage1); // should not be deleted } diff --git a/tests/auto/widgets/spellchecking/tst_spellchecking.cpp b/tests/auto/widgets/spellchecking/tst_spellchecking.cpp index 801e2a76c..258071559 100644 --- a/tests/auto/widgets/spellchecking/tst_spellchecking.cpp +++ b/tests/auto/widgets/spellchecking/tst_spellchecking.cpp @@ -28,9 +28,8 @@ #include "util.h" #include <QtTest/QtTest> -#include <QtWebEngineWidgets/qwebenginecontextmenudata.h> -#include <QtWebEngineWidgets/qwebengineprofile.h> -#include <QtWebEngineWidgets/qwebenginepage.h> +#include <QtWebEngineCore/qwebengineprofile.h> +#include <QtWebEngineCore/qwebenginepage.h> #include <QtWebEngineWidgets/qwebengineview.h> #include <qwebenginesettings.h> @@ -47,10 +46,7 @@ public: QTest::mouseRelease(widget, Qt::RightButton, {}, position); } - const QWebEngineContextMenuData& data() - { - return m_data; - } + QWebEngineContextMenuRequest *data() { return m_data; } signals: void menuReady(); @@ -58,11 +54,11 @@ signals: protected: void contextMenuEvent(QContextMenuEvent *) { - m_data = page()->contextMenuData(); + m_data = lastContextMenuRequest(); emit menuReady(); } private: - QWebEngineContextMenuData m_data; + QWebEngineContextMenuRequest *m_data; }; class tst_Spellchecking : public QObject @@ -204,17 +200,17 @@ void tst_Spellchecking::spellcheck() return false; } - if (!m_view->data().isValid()) { + if (!m_view->data()) { detail = "invalid data"; return false; } - if (!m_view->data().isContentEditable()) { + if (!m_view->data()->isContentEditable()) { detail = "content is not editable"; return false; } - if (m_view->data().misspelledWord().isEmpty()) { + if (m_view->data()->misspelledWord().isEmpty()) { detail = "no misspelled word"; return false; }; @@ -224,10 +220,10 @@ void tst_Spellchecking::spellcheck() } (), qPrintable(QString("Context menu: %1").arg(detail))); // check misspelled word - QCOMPARE(m_view->data().misspelledWord(), QStringLiteral("lowe")); + QCOMPARE(m_view->data()->misspelledWord(), QStringLiteral("lowe")); // check suggestions - QCOMPARE(m_view->data().spellCheckerSuggestions(), suggestions); + QCOMPARE(m_view->data()->spellCheckerSuggestions(), suggestions); // check replace word m_view->page()->replaceMisspelledWord("love"); diff --git a/tests/auto/widgets/tests.pri b/tests/auto/widgets/tests.pri index 97954aedc..e69820ffe 100644 --- a/tests/auto/widgets/tests.pri +++ b/tests/auto/widgets/tests.pri @@ -4,7 +4,6 @@ QT_FOR_CONFIG += webenginecore-private TEMPLATE = app CONFIG += testcase -CONFIG += c++14 VPATH += $$_PRO_FILE_PWD_ TARGET = tst_$$TARGET diff --git a/tests/auto/widgets/touchinput/tst_touchinput.cpp b/tests/auto/widgets/touchinput/tst_touchinput.cpp index 3c7d8ccbb..359b11eb2 100644 --- a/tests/auto/widgets/touchinput/tst_touchinput.cpp +++ b/tests/auto/widgets/touchinput/tst_touchinput.cpp @@ -31,11 +31,11 @@ #include <QtGui/qpa/qwindowsysteminterface.h> #include <QSignalSpy> #include <QTest> -#include <QTouchDevice> +#include <QPointingDevice> #include <QWebEngineSettings> #include <QWebEngineView> -static QTouchDevice* s_touchDevice = nullptr; +static QPointingDevice* s_touchDevice = nullptr; class TouchInputTest : public QObject { diff --git a/tests/auto/widgets/util.h b/tests/auto/widgets/util.h index 461baf9ac..3be9a91b9 100644 --- a/tests/auto/widgets/util.h +++ b/tests/auto/widgets/util.h @@ -226,7 +226,7 @@ static inline QRect elementGeometry(QWebEnginePage *page, const QString &id) #define W_QTEST_MAIN(TestObject, params) \ int main(int argc, char *argv[]) \ { \ - QVector<const char *> w_argv(argc); \ + QList<const char *> w_argv(argc); \ for (int i = 0; i < argc; ++i) \ w_argv[i] = argv[i]; \ for (int i = 0; i < params.size(); ++i) \ diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro index 2dc1eefcd..4ec9e5d63 100644 --- a/tests/auto/widgets/widgets.pro +++ b/tests/auto/widgets/widgets.pro @@ -14,7 +14,7 @@ SUBDIRS += \ proxypac \ schemes \ shutdown \ - qwebenginedownloaditem \ + qwebenginedownloadrequest \ qwebenginepage \ qwebenginehistory \ qwebengineprofile \ @@ -51,4 +51,4 @@ boot2qt: SUBDIRS -= accessibility defaultsurfaceformat devtools \ qwebengineprofile \ qwebengineview -win32: SUBDIRS -= offscreen +darwin|win32: SUBDIRS -= offscreen |