summaryrefslogtreecommitdiffstats
path: root/tests/auto/core
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-09-14 10:07:07 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-09-14 18:54:49 +0200
commita3c77682ce67420ac3fba4d81847bbe170b387eb (patch)
treec22938dae751405e5f78881a7683ab3176c77a5c /tests/auto/core
parentd3882688a8fd70ccd4c42afd2485c3b5d3810547 (diff)
parent1c6d01b846f2152e7215c98cfa09e668c880da7e (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: src/3rdparty src/core/certificate_error_controller.cpp src/core/certificate_error_controller.h src/core/compositor/compositor.cpp src/core/compositor/compositor.h src/core/compositor/display_gl_output_surface.cpp src/core/content_browser_client_qt.cpp src/core/core_chromium.pri src/core/delegated_frame_host_client_qt.cpp src/core/ozone/gl_share_context_qt.h src/core/ozone/surface_factory_qt.cpp src/core/permission_manager_qt.cpp src/core/render_widget_host_view_qt.cpp src/core/render_widget_host_view_qt.h src/core/web_engine_context.cpp src/core/web_engine_settings.cpp src/core/web_event_factory.cpp tests/auto/widgets/qwebenginedownloadrequest/tst_qwebenginedownloadrequest.cpp Change-Id: Ice14c3c350b139e800c7c7011b7cef1fc7010669
Diffstat (limited to 'tests/auto/core')
-rw-r--r--tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp7
-rw-r--r--tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp76
2 files changed, 34 insertions, 49 deletions
diff --git a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
index 638b2e028..5290d5373 100644
--- a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
+++ b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
@@ -260,19 +260,18 @@ void tst_QWebEngineCookieStore::basicFilterOverHTTP()
connect(&httpServer, &HttpServer::newRequest, [&cookieRequestHeader](HttpReqRep *rr) {
if (rr->requestPath().size() <= 1) {
cookieRequestHeader = rr->requestHeader(QByteArrayLiteral("Cookie"));
- rr->setResponseStatus(200);
if (cookieRequestHeader.isEmpty())
rr->setResponseHeader(QByteArrayLiteral("Set-Cookie"), QByteArrayLiteral("Test=test"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool)));
QSignalSpy cookieAddedSpy(client, SIGNAL(cookieAdded(const QNetworkCookie &)));
QSignalSpy cookieRemovedSpy(client, SIGNAL(cookieRemoved(const QNetworkCookie &)));
+ QSignalSpy serverSpy(&httpServer, SIGNAL(newRequest(HttpReqRep *)));
page.load(httpServer.url());
@@ -308,6 +307,8 @@ void tst_QWebEngineCookieStore::basicFilterOverHTTP()
QVERIFY(cookieRequestHeader.isEmpty());
QCOMPARE(cookieAddedSpy.count(), 1);
+ // Wait for last GET /favicon.ico
+ QTRY_COMPARE(serverSpy.count(), 8);
(void) httpServer.stop();
}
diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
index 4b5ecb615..33edf25f1 100644
--- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
+++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
@@ -118,29 +118,42 @@ struct RequestInfo {
static const QByteArray kHttpHeaderReferrerValue = QByteArrayLiteral("http://somereferrer.com/");
static const QByteArray kHttpHeaderRefererName = QByteArrayLiteral("referer");
+static const QUrl kRedirectUrl = QUrl("qrc:///resources/content.html");
class TestRequestInterceptor : public QWebEngineUrlRequestInterceptor
{
public:
QList<RequestInfo> requestInfos;
- bool shouldIntercept;
+ bool shouldRedirect = false;
QMap<QUrl, QSet<QUrl>> requestInitiatorUrls;
+ QMap<QByteArray, QByteArray> headers;
void interceptRequest(QWebEngineUrlRequestInfo &info) override
{
QCOMPARE(QThread::currentThread() == QCoreApplication::instance()->thread(), !property("deprecated").toBool());
+
// Since 63 we also intercept some unrelated blob requests..
if (info.requestUrl().scheme() == QLatin1String("blob"))
return;
- info.block(info.requestMethod() != QByteArrayLiteral("GET"));
- if (shouldIntercept && info.requestUrl().toString().endsWith(QLatin1String("__placeholder__")))
- info.redirect(QUrl("qrc:///resources/content.html"));
- // Set referrer header
- info.setHttpHeader(kHttpHeaderRefererName, kHttpHeaderReferrerValue);
+ bool block = info.requestMethod() != QByteArrayLiteral("GET");
+ bool redirect = shouldRedirect && info.requestUrl() != kRedirectUrl;
+
+ if (block) {
+ info.block(true);
+ } else if (redirect) {
+ info.redirect(kRedirectUrl);
+ } else {
+ // set additional headers if any required by test
+ for (auto it = headers.begin(); it != headers.end(); ++it) info.setHttpHeader(it.key(), it.value());
+ }
requestInitiatorUrls[info.requestUrl()].insert(info.initiator());
requestInfos.append(info);
+
+ // MEMO avoid unintentionally changing request when it is not needed for test logic
+ // since api behavior depends on 'changed' state of the info object
+ Q_ASSERT(info.changed() == (block || redirect || !headers.empty()));
}
bool shouldSkipRequest(const RequestInfo &requestInfo)
@@ -182,42 +195,9 @@ public:
return false;
}
- TestRequestInterceptor(bool intercept)
- : shouldIntercept(intercept)
- {
- }
-};
-
-class TestServer : public HttpServer
-{
-public:
- TestServer()
- {
- connect(this, &HttpServer::newRequest, this, &TestServer::onNewRequest);
- }
-
-private:
- void onNewRequest(HttpReqRep *rr)
+ TestRequestInterceptor(bool redirect)
+ : shouldRedirect(redirect)
{
- const QDir resourceDir(TESTS_SOURCE_DIR "qwebengineurlrequestinterceptor/resources");
- QString path = rr->requestPath();
- path.remove(0, 1);
-
- if (rr->requestMethod() != "GET" || !resourceDir.exists(path))
- {
- rr->setResponseStatus(404);
- rr->sendResponse();
- return;
- }
-
- QFile file(resourceDir.filePath(path));
- file.open(QIODevice::ReadOnly);
- QByteArray data = file.readAll();
- rr->setResponseBody(data);
- QMimeDatabase db;
- QMimeType mime = db.mimeTypeForFileNameAndData(file.fileName(), data);
- rr->setResponseHeader(QByteArrayLiteral("content-type"), mime.name().toUtf8());
- rr->sendResponse();
}
};
@@ -252,7 +232,7 @@ void tst_QWebEngineUrlRequestInterceptor::interceptRequest()
QFETCH(InterceptorSetter, setter);
QWebEngineProfile profile;
profile.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false);
- TestRequestInterceptor interceptor(/* intercept */ true);
+ TestRequestInterceptor interceptor(/* intercept */ false);
(profile.*setter)(&interceptor);
QWebEnginePage page(&profile);
QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool)));
@@ -272,6 +252,7 @@ void tst_QWebEngineUrlRequestInterceptor::interceptRequest()
QVERIFY(!success.toBool());
loadSpy.clear();
+ interceptor.shouldRedirect = true;
page.load(QUrl("qrc:///resources/__placeholder__"));
QTRY_COMPARE(loadSpy.count(), 1);
success = loadSpy.takeFirst().takeFirst();
@@ -372,6 +353,8 @@ void tst_QWebEngineUrlRequestInterceptor::requestedUrl()
QCOMPARE(page.requestedUrl(), QUrl("qrc:///resources/__placeholder__"));
QCOMPARE(page.url(), QUrl("qrc:///resources/content.html"));
+ interceptor.shouldRedirect = false;
+
page.setUrl(QUrl("qrc:/non-existent.html"));
QTRY_COMPARE(spy.count(), 2);
QVERIFY(interceptor.requestInfos.count() >= 3);
@@ -663,12 +646,12 @@ void tst_QWebEngineUrlRequestInterceptor::passRefererHeader()
const QByteArray headerValue = rr->requestHeader(kHttpHeaderRefererName);
QCOMPARE(headerValue, kHttpHeaderReferrerValue);
succeeded = headerValue == kHttpHeaderReferrerValue;
- rr->setResponseStatus(200);
rr->sendResponse();
});
QWebEngineProfile profile;
- TestRequestInterceptor interceptor(true);
+ TestRequestInterceptor interceptor(false);
+ interceptor.headers.insert(kHttpHeaderRefererName, kHttpHeaderReferrerValue);
(profile.*setter)(&interceptor);
QWebEnginePage page(&profile);
@@ -762,7 +745,8 @@ void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker()
{
QFETCH(InterceptorSetter, setter);
- TestServer server;
+ HttpServer server;
+ server.setResourceDirs({ TESTS_SOURCE_DIR "qwebengineurlrequestinterceptor/resources" });
QVERIFY(server.start());
QWebEngineProfile profile(QStringLiteral("Test"));
@@ -776,7 +760,7 @@ void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker()
QTRY_COMPARE(page->messages.count(), 1);
QCOMPARE(page->levels.at(0), QWebEnginePage::InfoMessageLevel);
- QUrl firstPartyUrl = QUrl(server.url().toString() + "sw.js");
+ QUrl firstPartyUrl = QUrl(server.url().toString(QUrl::RemovePort));
QList<RequestInfo> infos;
// Service Worker
QTRY_VERIFY(interceptor.hasUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeServiceWorker));