diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-09-11 06:02:07 -0700 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-09-14 15:40:40 +0000 |
commit | cf7b421b9c268397e241b70cc7552ae370ed7e53 (patch) | |
tree | 2ea5dfdeb91abe701a055a7683dace4713221621 /tests | |
parent | 3cac9bc0dad2c4a8d231707c94340a509d712b8a (diff) |
Change some QNAM tests to use URLRequestInterceptor
Change-Id: I83536664df15375622e1b24496685ae19ab829c1
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp | 104 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 127 |
2 files changed, 103 insertions, 128 deletions
diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp index ed7d7ad09..a2f9e0c37 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp +++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp @@ -44,6 +44,7 @@ #include <QtWebEngineCore/qwebengineurlrequestinterceptor.h> #include <QtWebEngineWidgets/qwebenginepage.h> #include <QtWebEngineWidgets/qwebengineprofile.h> +#include <QtWebEngineWidgets/qwebenginesettings.h> #include <QtWebEngineWidgets/qwebengineview.h> class tst_QWebEngineUrlRequestInterceptor : public QObject @@ -62,6 +63,9 @@ private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void interceptRequest(); + void ipv6HostEncoding(); + void requestedUrl(); + void setUrlSameUrl(); }; tst_QWebEngineUrlRequestInterceptor::tst_QWebEngineUrlRequestInterceptor() @@ -88,7 +92,7 @@ void tst_QWebEngineUrlRequestInterceptor::cleanupTestCase() { } -class TestRequestInterceptor: public QWebEngineUrlRequestInterceptor +class TestRequestInterceptor : public QWebEngineUrlRequestInterceptor { public: QList<QUrl> observedUrls; @@ -151,5 +155,103 @@ void tst_QWebEngineUrlRequestInterceptor::interceptRequest() QCOMPARE(observer.observedUrls.count(), 1); } +class LocalhostContentProvider : public QWebEngineUrlRequestInterceptor +{ +public: + LocalhostContentProvider() { } + + bool interceptRequest(QWebEngineUrlRequestInfo &info) override + { + requestedUrls.append(info.requestUrl()); + info.redirect(QUrl("data:text/html,<p>hello")); + return true; + } + + QList<QUrl> requestedUrls; +}; + +void tst_QWebEngineUrlRequestInterceptor::ipv6HostEncoding() +{ + QWebEngineView view; + QWebEnginePage *page = view.page(); + LocalhostContentProvider contentProvider; + QSignalSpy spyLoadFinished(page, SIGNAL(loadFinished(bool))); + + page->profile()->setRequestInterceptor(&contentProvider); + + page->setHtml("<p>Hi", QUrl::fromEncoded("http://[::1]/index.html")); + QTRY_COMPARE(spyLoadFinished.count(), 1); + QCOMPARE(contentProvider.requestedUrls.count(), 0); + + evaluateJavaScriptSync(page, "var r = new XMLHttpRequest();" + "r.open('GET', 'http://[::1]/test.xml', false);" + "r.send(null);" + ); + + QCOMPARE(contentProvider.requestedUrls.count(), 1); + QCOMPARE(contentProvider.requestedUrls.at(0), QUrl::fromEncoded("http://[::1]/test.xml")); +} + +void tst_QWebEngineUrlRequestInterceptor::requestedUrl() +{ + QWebEnginePage page; + page.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); + + QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); + TestRequestInterceptor interceptor(/* intercept */ true); + page.profile()->setRequestInterceptor(&interceptor); + + page.setUrl(QUrl("qrc:///resources/__placeholder__")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(spy.count(), 1); + QCOMPARE(interceptor.observedUrls.at(0), QUrl("qrc:///resources/content.html")); + QCOMPARE(page.requestedUrl(), QUrl("qrc:///resources/__placeholder__")); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + + page.setUrl(QUrl("qrc:/non-existent.html")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(spy.count(), 2); + QCOMPARE(interceptor.observedUrls.at(2), QUrl("qrc:/non-existent.html")); + QCOMPARE(page.requestedUrl(), QUrl("qrc:///resources/__placeholder__")); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + + page.setUrl(QUrl("http://abcdef.abcdef")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(spy.count(), 3); + QCOMPARE(interceptor.observedUrls.at(3), QUrl("http://abcdef.abcdef/")); + QCOMPARE(page.requestedUrl(), QUrl("qrc:///resources/__placeholder__")); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); +} + +void tst_QWebEngineUrlRequestInterceptor::setUrlSameUrl() +{ + QWebEnginePage page; + TestRequestInterceptor interceptor(/* intercept */ true); + page.profile()->setRequestInterceptor(&interceptor); + + QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); + + page.setUrl(QUrl("qrc:///resources/__placeholder__")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + QCOMPARE(spy.count(), 1); + + page.setUrl(QUrl("qrc:///resources/__placeholder__")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + QCOMPARE(spy.count(), 2); + + // Now a case without redirect. + page.setUrl(QUrl("qrc:///resources/content.html")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + QCOMPARE(spy.count(), 3); + + page.setUrl(QUrl("qrc:///resources/__placeholder__")); + waitForSignal(&page, SIGNAL(loadFinished(bool))); + QCOMPARE(page.url(), QUrl("qrc:///resources/content.html")); + QCOMPARE(spy.count(), 4); +} + QTEST_MAIN(tst_QWebEngineUrlRequestInterceptor) #include "tst_qwebengineurlrequestinterceptor.moc" diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 05be75ccf..e6a6f9a7d 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -198,7 +198,6 @@ private Q_SLOTS: void symmetricUrl(); void progressSignal(); void urlChange(); - void requestedUrl(); void requestedUrlAfterSetAndLoadFailures(); void javaScriptWindowObjectCleared_data(); void javaScriptWindowObjectCleared(); @@ -210,7 +209,6 @@ private Q_SLOTS: void setHtmlWithStylesheetResource(); void setHtmlWithBaseURL(); void setHtmlWithJSAlert(); - void ipv6HostEncoding(); void metaData(); #if !defined(QT_NO_COMBOBOX) void popupFocus(); @@ -232,7 +230,6 @@ private Q_SLOTS: void setUrlToInvalid(); void setUrlHistory(); void setUrlUsingStateObject(); - void setUrlSameUrl(); void setUrlThenLoads_data(); void setUrlThenLoads(); void loadFinishedAfterNotFoundError(); @@ -3972,50 +3969,6 @@ protected: } }; -void tst_QWebEnginePage::requestedUrl() -{ -#if !defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) - QSKIP("QWEBENGINEPAGE_SETNETWORKACCESSMANAGER"); -#else - QWebEnginePage page; - - // in few seconds, the image should be completely loaded - QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); - FakeNetworkManager* networkManager = new FakeNetworkManager(&page); - page.setNetworkAccessManager(networkManager); - - page.setUrl(QUrl("qrc:/test1.html")); - waitForSignal(&page, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy.count(), 1); - QCOMPARE(page.requestedUrl(), QUrl("qrc:/test1.html")); - QCOMPARE(page.url(), QUrl("qrc:/test2.html")); - - page.setUrl(QUrl("qrc:/non-existent.html")); - waitForSignal(&page, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy.count(), 2); - QCOMPARE(page.requestedUrl(), QUrl("qrc:/non-existent.html")); - QCOMPARE(page.url(), QUrl("qrc:/non-existent.html")); - - page.setUrl(QUrl("http://abcdef.abcdef")); - waitForSignal(&page, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy.count(), 3); - QCOMPARE(page.requestedUrl(), QUrl("http://abcdef.abcdef/")); - QCOMPARE(page.url(), QUrl("http://abcdef.abcdef/")); - -#ifndef QT_NO_OPENSSL - qRegisterMetaType<QList<QSslError> >("QList<QSslError>"); - qRegisterMetaType<QNetworkReply* >("QNetworkReply*"); - - QSignalSpy spy2(page.networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>))); - page.setUrl(QUrl("qrc:/fake-ssl-error.html")); - waitForSignal(&page, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy2.count(), 1); - QCOMPARE(page.requestedUrl(), QUrl("qrc:/fake-ssl-error.html")); - QCOMPARE(page.url(), QUrl("qrc:/fake-ssl-error.html")); -#endif -#endif -} - void tst_QWebEnginePage::requestedUrlAfterSetAndLoadFailures() { QWebEnginePage page; @@ -4230,44 +4183,6 @@ void tst_QWebEnginePage::setHtmlWithJSAlert() QCOMPARE(toHtmlSync(&page), html); } -#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) -class TestNetworkManager : public QNetworkAccessManager -{ -public: - TestNetworkManager(QObject* parent) : QNetworkAccessManager(parent) {} - - QList<QUrl> requestedUrls; - -protected: - virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest &request, QIODevice* outgoingData) { - requestedUrls.append(request.url()); - QNetworkRequest redirectedRequest = request; - redirectedRequest.setUrl(QUrl("data:text/html,<p>hello")); - return QNetworkAccessManager::createRequest(op, redirectedRequest, outgoingData); - } -}; -#endif - -void tst_QWebEnginePage::ipv6HostEncoding() -{ -#if !defined(QWEBENGINEPAGE_EVALUATEJAVASCRIPT) - QSKIP("QWEBENGINEPAGE_EVALUATEJAVASCRIPT"); -#else - TestNetworkManager* networkManager = new TestNetworkManager(m_page); - m_page->setNetworkAccessManager(networkManager); - networkManager->requestedUrls.clear(); - - QUrl baseUrl = QUrl::fromEncoded("http://[::1]/index.html"); - m_view->setHtml("<p>Hi", baseUrl); - m_view->page()->evaluateJavaScript("var r = new XMLHttpRequest();" - "r.open('GET', 'http://[::1]/test.xml', false);" - "r.send(null);" - ); - QCOMPARE(networkManager->requestedUrls.count(), 1); - QCOMPARE(networkManager->requestedUrls.at(0), QUrl::fromEncoded("http://[::1]/test.xml")); -#endif -} - void tst_QWebEnginePage::metaData() { #if !defined(QWEBENGINEPAGE_METADATA) @@ -5021,48 +4936,6 @@ void tst_QWebEnginePage::setUrlUsingStateObject() QVERIFY(!m_page->history()->canGoBack()); } -void tst_QWebEnginePage::setUrlSameUrl() -{ -#if !defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) - QSKIP("QWEBENGINEPAGE_SETNETWORKACCESSMANAGER"); -#else - const QUrl url1("qrc:/resources/test1.html"); - const QUrl url2("qrc:/resources/test2.html"); - - QWebEnginePage page; - FakeNetworkManager* networkManager = new FakeNetworkManager(&page); - page.setNetworkAccessManager(networkManager); - - QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); - - page.setUrl(url1); - waitForSignal(&page, SIGNAL(loadFinished(bool))); - QVERIFY(page.url() != url1); // Nota bene: our QNAM redirects url1 to url2 - QCOMPARE(page.url(), url2); - QCOMPARE(spy.count(), 1); - - page.setUrl(url1); - waitForSignal(&page, SIGNAL(loadFinished(bool))); - QVERIFY(page.url() != url1); - QCOMPARE(page.url(), url2); - QCOMPARE(spy.count(), 2); - - // Now a case without redirect. The existing behavior we have for setUrl() - // is more like a "clear(); load()", so the page will be loaded again, even - // if urlToBeLoaded == url(). This test should be changed if we want to - // make setUrl() early return in this case. - page.setUrl(url2); - waitForSignal(&page, SIGNAL(loadFinished(bool))); - QCOMPARE(page.url(), url2); - QCOMPARE(spy.count(), 3); - - page.setUrl(url1); - waitForSignal(&page, SIGNAL(loadFinished(bool))); - QCOMPARE(page.url(), url2); - QCOMPARE(spy.count(), 4); -#endif -} - static inline QUrl extractBaseUrl(const QUrl& url) { return url.resolved(QUrl()); |