summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2015-09-11 06:02:07 -0700
committerSzabolcs David <davidsz@inf.u-szeged.hu>2015-09-14 15:40:40 +0000
commitcf7b421b9c268397e241b70cc7552ae370ed7e53 (patch)
tree2ea5dfdeb91abe701a055a7683dace4713221621 /tests
parent3cac9bc0dad2c4a8d231707c94340a509d712b8a (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.cpp104
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp127
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());