summaryrefslogtreecommitdiffstats
path: root/tests/auto/core
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/auto/core
parent3cac9bc0dad2c4a8d231707c94340a509d712b8a (diff)
Change some QNAM tests to use URLRequestInterceptor
Change-Id: I83536664df15375622e1b24496685ae19ab829c1 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'tests/auto/core')
-rw-r--r--tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp104
1 files changed, 103 insertions, 1 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"