diff options
Diffstat (limited to 'tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp')
-rw-r--r-- | tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp index 3fc8fb45a..8b75067ee 100644 --- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp +++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp @@ -29,6 +29,7 @@ #include "../util.h" #include <QtCore/qbuffer.h> #include <QtTest/QtTest> +#include <QtWebEngineCore/qwebengineurlrequestinterceptor.h> #include <QtWebEngineCore/qwebengineurlrequestjob.h> #include <QtWebEngineCore/qwebenginecookiestore.h> #include <QtWebEngineCore/qwebengineurlscheme.h> @@ -55,6 +56,7 @@ private Q_SLOTS: void urlSchemeHandlerFailRequest(); void urlSchemeHandlerFailOnRead(); void urlSchemeHandlerStreaming(); + void urlSchemeHandlerRequestHeaders(); void urlSchemeHandlerInstallation(); void customUserAgent(); void httpAcceptLanguage(); @@ -62,7 +64,7 @@ private Q_SLOTS: void changePersistentPath(); void initiator(); void badDeleteOrder(); - void qtbug_72299(); // this should be the last test + void qtbug_71895(); // this should be the last test }; void tst_QWebEngineProfile::initTestCase() @@ -393,17 +395,17 @@ public: { } - qint64 readData(char *, qint64) Q_DECL_OVERRIDE + qint64 readData(char *, qint64) override { m_job->fail(QWebEngineUrlRequestJob::RequestFailed); return -1; } - qint64 writeData(const char *, qint64) Q_DECL_OVERRIDE + qint64 writeData(const char *, qint64) override { m_job->fail(QWebEngineUrlRequestJob::RequestFailed); return -1; } - void close() Q_DECL_OVERRIDE + void close() override { QIODevice::close(); deleteLater(); @@ -467,6 +469,64 @@ void tst_QWebEngineProfile::urlSchemeHandlerStreaming() QCOMPARE(toPlainTextSync(view.page()), QString::fromLatin1(result)); } +class ExtraHeaderInterceptor : public QWebEngineUrlRequestInterceptor +{ +public: + ExtraHeaderInterceptor() { } + + void setExtraHeader(const QByteArray &key, const QByteArray &value) + { + m_extraKey = key; + m_extraValue = value; + } + + void interceptRequest(QWebEngineUrlRequestInfo &info) override + { + if (info.requestUrl().scheme() == QLatin1String("myscheme")) + info.setHttpHeader(m_extraKey, m_extraValue); + } + + QByteArray m_extraKey; + QByteArray m_extraValue; +}; + +class RequestHeadersUrlSchemeHandler : public ReplyingUrlSchemeHandler +{ +public: + void setExpectedHeader(const QByteArray &key, const QByteArray &value) + { + m_expectedKey = key; + m_expectedValue = value; + } + void requestStarted(QWebEngineUrlRequestJob *job) override + { + const auto requestHeaders = job->requestHeaders(); + QVERIFY(requestHeaders.contains(m_expectedKey)); + QCOMPARE(requestHeaders.value(m_expectedKey), m_expectedValue); + ReplyingUrlSchemeHandler::requestStarted(job); + } + QByteArray m_expectedKey; + QByteArray m_expectedValue; +}; + +void tst_QWebEngineProfile::urlSchemeHandlerRequestHeaders() +{ + RequestHeadersUrlSchemeHandler handler; + ExtraHeaderInterceptor interceptor; + + handler.setExpectedHeader("Hello", "World"); + interceptor.setExtraHeader("Hello", "World"); + + QWebEngineProfile profile; + profile.installUrlSchemeHandler("myscheme", &handler); + profile.setRequestInterceptor(&interceptor); + + QWebEnginePage page(&profile); + QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool))); + page.load(QUrl(QStringLiteral("myscheme://whatever"))); + QVERIFY(loadFinishedSpy.wait()); +} + void tst_QWebEngineProfile::urlSchemeHandlerInstallation() { FailingUrlSchemeHandler handler; @@ -478,8 +538,9 @@ void tst_QWebEngineProfile::urlSchemeHandlerInstallation() QTest::ignoreMessage( QtWarningMsg, QRegularExpression("Cannot install a URL scheme handler overriding internal scheme.*")); + auto prevHandler = profile.urlSchemeHandler(scheme); profile.installUrlSchemeHandler(scheme, &handler); - QCOMPARE(profile.urlSchemeHandler(scheme), nullptr); + QCOMPARE(profile.urlSchemeHandler(scheme), prevHandler); } // Builtin schemes that *can* be overridden. @@ -649,7 +710,7 @@ void tst_QWebEngineProfile::badDeleteOrder() delete view; } -void tst_QWebEngineProfile::qtbug_72299() +void tst_QWebEngineProfile::qtbug_71895() { QWebEngineView view; QSignalSpy loadSpy(view.page(), SIGNAL(loadFinished(bool))); @@ -659,8 +720,9 @@ void tst_QWebEngineProfile::qtbug_72299() view.page()->profile()->setHttpCacheType(QWebEngineProfile::NoCache); view.page()->profile()->cookieStore()->deleteAllCookies(); view.page()->profile()->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies); - QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 1, 20000); - QVERIFY(loadSpy.front().front().toBool()); + bool gotSignal = loadSpy.count() || loadSpy.wait(20000); + if (!gotSignal) + QSKIP("Couldn't load page from network, skipping test."); } |