diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-09-14 10:07:07 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-09-14 18:54:49 +0200 |
commit | a3c77682ce67420ac3fba4d81847bbe170b387eb (patch) | |
tree | c22938dae751405e5f78881a7683ab3176c77a5c /tests/auto/core | |
parent | d3882688a8fd70ccd4c42afd2485c3b5d3810547 (diff) | |
parent | 1c6d01b846f2152e7215c98cfa09e668c880da7e (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.cpp | 7 | ||||
-rw-r--r-- | tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp | 76 |
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)); |