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/auto/core/qwebengineurlrequestinterceptor | |
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/auto/core/qwebengineurlrequestinterceptor')
-rw-r--r-- | tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp | 104 |
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" |