diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-01-12 17:27:23 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-01-19 18:10:16 +0100 |
commit | 6e8e53757c684c30d9547bf7fb3f5ce0b7e3f0c8 (patch) | |
tree | dea719067942d3d32ac082e5304f95d6fa9605e8 /tests | |
parent | 52f0ca90445c633c68694fde84b4630a13c3c14e (diff) |
Add testing of redirect by interceptor
Looks the same in the interceptor, but different in the jobs.
Extra combinations not yet tested.
Change-Id: Ib9c34029e5dd293d30380ce42495905fbcab12b7
Reviewed-by: Kirill Burtsev <kirill.burtsev@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/core/origins/resources/redirect.css | 2 | ||||
-rw-r--r-- | tests/auto/core/origins/resources/redirect.html | 2 | ||||
-rw-r--r-- | tests/auto/core/origins/tst_origins.cpp | 93 |
3 files changed, 76 insertions, 21 deletions
diff --git a/tests/auto/core/origins/resources/redirect.css b/tests/auto/core/origins/resources/redirect.css index 41d7560cc..9c4308c07 100644 --- a/tests/auto/core/origins/resources/redirect.css +++ b/tests/auto/core/origins/resources/redirect.css @@ -1,6 +1,6 @@ @font-face { font-family: 'MyWebFont'; - src: url('redirect1:/resources/Akronim-Regular.woff2') format('woff2'); + src: url('redirect:redirect-secure/resources/Akronim-Regular.woff2') format('woff2'); } body { diff --git a/tests/auto/core/origins/resources/redirect.html b/tests/auto/core/origins/resources/redirect.html index 04948e14b..bc4a9b80e 100644 --- a/tests/auto/core/origins/resources/redirect.html +++ b/tests/auto/core/origins/resources/redirect.html @@ -2,7 +2,7 @@ <html> <head> <title>redirect</title> - <link rel="stylesheet" href="redirect1:/resources/redirect.css"> + <link rel="stylesheet" href="redirect:redirect-secure/resources/redirect.css"> </head> <body> Text diff --git a/tests/auto/core/origins/tst_origins.cpp b/tests/auto/core/origins/tst_origins.cpp index 1731bee8a..32bcf9b9f 100644 --- a/tests/auto/core/origins/tst_origins.cpp +++ b/tests/auto/core/origins/tst_origins.cpp @@ -31,6 +31,7 @@ #include <QtCore/qfile.h> #include <QtTest/QtTest> +#include <QtWebEngineCore/qwebengineurlrequestinterceptor.h> #include <QtWebEngineCore/qwebengineurlrequestjob.h> #include <QtWebEngineCore/qwebengineurlscheme.h> #include <QtWebEngineCore/qwebengineurlschemehandler.h> @@ -48,6 +49,8 @@ #define QSL QStringLiteral #define QBAL QByteArrayLiteral +Q_LOGGING_CATEGORY(lc, "qt.webengine.tests") + void registerSchemes() { { @@ -125,14 +128,14 @@ void registerSchemes() } { - QWebEngineUrlScheme scheme(QBAL("redirect1")); + QWebEngineUrlScheme scheme(QBAL("redirect")); scheme.setFlags(QWebEngineUrlScheme::CorsEnabled); QWebEngineUrlScheme::registerScheme(scheme); } { - QWebEngineUrlScheme scheme(QBAL("redirect2")); - scheme.setFlags(QWebEngineUrlScheme::CorsEnabled); + QWebEngineUrlScheme scheme(QBAL("redirect-secure")); + scheme.setFlags(QWebEngineUrlScheme::SecureScheme); QWebEngineUrlScheme::registerScheme(scheme); } @@ -175,8 +178,9 @@ public: profile->installUrlSchemeHandler(QBAL("HostSyntax-ContentSecurityPolicyIgnored"), this); profile->installUrlSchemeHandler(QBAL("HostAndPortSyntax"), this); profile->installUrlSchemeHandler(QBAL("HostPortAndUserInformationSyntax"), this); - profile->installUrlSchemeHandler(QBAL("redirect1"), this); - profile->installUrlSchemeHandler(QBAL("redirect2"), this); + profile->installUrlSchemeHandler(QBAL("redirect"), this); + profile->installUrlSchemeHandler(QBAL("redirect-local"), this); + profile->installUrlSchemeHandler(QBAL("redirect-secure"), this); profile->installUrlSchemeHandler(QBAL("cors"), this); profile->installUrlSchemeHandler(QBAL("local"), this); profile->installUrlSchemeHandler(QBAL("local-cors"), this); @@ -190,10 +194,15 @@ private: QUrl url = job->requestUrl(); m_requests << url; - if (url.scheme() == QBAL("redirect1")) { - url.setScheme(QBAL("redirect2")); - job->redirect(url); - return; + if (url.scheme().startsWith("redirect")) { + QString path = url.path(); + int idx = path.indexOf(QChar('/')); + if (idx > 0) { + url.setScheme(path.first(idx)); + url.setPath(path.mid(idx, -1)); + job->redirect(url); + return; + } } QString pathPrefix = QDir(QT_TESTCASE_SOURCEDIR).canonicalPath(); @@ -217,6 +226,30 @@ private: QList<QUrl> m_requests; }; +class TestRequestInterceptor : public QWebEngineUrlRequestInterceptor +{ +public: + TestRequestInterceptor() = default; + void interceptRequest(QWebEngineUrlRequestInfo &info) override + { + qCDebug(lc) << this << "Type:" << info.resourceType() << info.requestMethod() << "Navigation:" << info.navigationType() + << info.requestUrl() << "Initiator:" << info.initiator(); + + QUrl url = info.requestUrl(); + requests << url; + if (url.scheme().startsWith("redirect")) { + QString path = url.path(); + int idx = path.indexOf(QChar('/')); + if (idx > 0) { + url.setScheme(path.first(idx)); + url.setPath(path.mid(idx, -1)); + info.redirect(url); + } + } + } + QList<QUrl> requests; +}; + class tst_Origins final : public QObject { Q_OBJECT @@ -245,7 +278,8 @@ private Q_SLOTS: void serviceWorker(); void viewSource(); void createObjectURL(); - void redirect(); + void redirectScheme(); + void redirectInterceptor(); private: bool verifyLoad(const QUrl &url) @@ -999,17 +1033,38 @@ void tst_Origins::createObjectURL() QVERIFY(eval(QSL("result")).toString().startsWith(QSL("blob:tst:"))); } -void tst_Origins::redirect() +void tst_Origins::redirectScheme() { - QVERIFY(verifyLoad(QSL("redirect1:/resources/redirect.html"))); + QVERIFY(verifyLoad(QSL("redirect:redirect-secure/resources/redirect.html"))); QTRY_COMPARE(m_handler->requests().size(), 7); - QCOMPARE(m_handler->requests()[0], QUrl(QStringLiteral("redirect1:/resources/redirect.html"))); - QCOMPARE(m_handler->requests()[1], QUrl(QStringLiteral("redirect2:/resources/redirect.html"))); - QCOMPARE(m_handler->requests()[2], QUrl(QStringLiteral("redirect1:/resources/redirect.css"))); - QCOMPARE(m_handler->requests()[3], QUrl(QStringLiteral("redirect2:/resources/redirect.css"))); - QCOMPARE(m_handler->requests()[4], QUrl(QStringLiteral("redirect1:/resources/Akronim-Regular.woff2"))); - QCOMPARE(m_handler->requests()[5], QUrl(QStringLiteral("redirect1:/resources/Akronim-Regular.woff2"))); - QCOMPARE(m_handler->requests()[6], QUrl(QStringLiteral("redirect2:/resources/Akronim-Regular.woff2"))); + QCOMPARE(m_handler->requests()[0], QUrl(QStringLiteral("redirect:redirect-secure/resources/redirect.html"))); + QCOMPARE(m_handler->requests()[1], QUrl(QStringLiteral("redirect-secure:/resources/redirect.html"))); + QCOMPARE(m_handler->requests()[2], QUrl(QStringLiteral("redirect:redirect-secure/resources/redirect.css"))); + QCOMPARE(m_handler->requests()[3], QUrl(QStringLiteral("redirect-secure:/resources/redirect.css"))); + QCOMPARE(m_handler->requests()[4], QUrl(QStringLiteral("redirect:redirect-secure/resources/Akronim-Regular.woff2"))); + QCOMPARE(m_handler->requests()[5], QUrl(QStringLiteral("redirect:redirect-secure/resources/Akronim-Regular.woff2"))); + QCOMPARE(m_handler->requests()[6], QUrl(QStringLiteral("redirect-secure:/resources/Akronim-Regular.woff2"))); +} + +void tst_Origins::redirectInterceptor() +{ + TestRequestInterceptor interceptor; + m_profile.setUrlRequestInterceptor(&interceptor); + + QVERIFY(verifyLoad(QSL("redirect:redirect-secure/resources/redirect.html"))); + QTRY_COMPARE(interceptor.requests.size(), 7); + QTRY_COMPARE(m_handler->requests().size(), 3); + QCOMPARE(m_handler->requests()[0], QUrl(QStringLiteral("redirect-secure:/resources/redirect.html"))); + QCOMPARE(m_handler->requests()[1], QUrl(QStringLiteral("redirect-secure:/resources/redirect.css"))); + QCOMPARE(m_handler->requests()[2], QUrl(QStringLiteral("redirect-secure:/resources/Akronim-Regular.woff2"))); + + QCOMPARE(interceptor.requests[0], QUrl(QStringLiteral("redirect:redirect-secure/resources/redirect.html"))); + QCOMPARE(interceptor.requests[1], QUrl(QStringLiteral("redirect-secure:/resources/redirect.html"))); + QCOMPARE(interceptor.requests[2], QUrl(QStringLiteral("redirect:redirect-secure/resources/redirect.css"))); + QCOMPARE(interceptor.requests[3], QUrl(QStringLiteral("redirect-secure:/resources/redirect.css"))); + QCOMPARE(interceptor.requests[4], QUrl(QStringLiteral("redirect:redirect-secure/resources/Akronim-Regular.woff2"))); + QCOMPARE(interceptor.requests[5], QUrl(QStringLiteral("redirect:redirect-secure/resources/Akronim-Regular.woff2"))); + QCOMPARE(interceptor.requests[6], QUrl(QStringLiteral("redirect-secure:/resources/Akronim-Regular.woff2"))); } QTEST_MAIN(tst_Origins) |