summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp')
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp78
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.");
}