summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2018-01-15 17:57:05 +0100
committerJüri Valdmann <juri.valdmann@qt.io>2018-02-13 08:18:06 +0000
commit2a4a5b2ec17189d4ea8fa783cf219c65560e81f8 (patch)
tree547f48440093ec3fe77e3d787696aa242e82d794 /tests/auto
parent58fea877aa61cf0e7bc81d0c3c91f732c2791ff3 (diff)
Add support for registerProtocolHandler
Extend initialization of URLRequestContextGetterQt to create a content::ProtocolHandlerRegistry for each content::BrowserContext and add the registry's URL request interceptor to the front of the interceptor chain. Implement methods in WebContentsDelegateQt to add/remove protocol handlers to/from the ProtocolHandlerRegistry. Add permission request signal and classes for core, quick and widgets. Add widgets autotest. Add signal handlers to quicknanobrowser and simplebrowser. Task-number: QTBUG-62783 Change-Id: I808e7eb9a1cb4d7216686deed4895de14fe46310 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/quick/publicapi/tst_publicapi.cpp6
-rw-r--r--tests/auto/widgets/qwebenginepage/qwebenginepage.pro1
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp65
3 files changed, 72 insertions, 0 deletions
diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp
index 032324e45..52d8a0b41 100644
--- a/tests/auto/quick/publicapi/tst_publicapi.cpp
+++ b/tests/auto/quick/publicapi/tst_publicapi.cpp
@@ -67,6 +67,7 @@ static QList<const QMetaObject *> typesToCheck = QList<const QMetaObject *>()
<< &QQuickWebEngineSettings::staticMetaObject
<< &QQuickWebEngineFullScreenRequest::staticMetaObject
<< &QQuickWebEngineQuotaPermissionRequest::staticMetaObject
+ << &QQuickWebEngineRegisterProtocolHandlerPermissionRequest::staticMetaObject
<< &QQuickWebEngineSingleton::staticMetaObject
<< &QQuickWebEngineAuthenticationDialogRequest::staticMetaObject
<< &QQuickWebEngineJavaScriptDialogRequest::staticMetaObject
@@ -295,6 +296,10 @@ static QStringList expectedAPI = QStringList()
<< "QQuickWebEngineQuotaPermissionRequest.origin --> QUrl"
<< "QQuickWebEngineQuotaPermissionRequest.reject() --> void"
<< "QQuickWebEngineQuotaPermissionRequest.requestedSize --> qlonglong"
+ << "QQuickWebEngineRegisterProtocolHandlerPermissionRequest.accept() --> void"
+ << "QQuickWebEngineRegisterProtocolHandlerPermissionRequest.origin --> QUrl"
+ << "QQuickWebEngineRegisterProtocolHandlerPermissionRequest.protocol --> QString"
+ << "QQuickWebEngineRegisterProtocolHandlerPermissionRequest.reject() --> void"
<< "QQuickWebEngineScript.ApplicationWorld --> ScriptWorldId"
<< "QQuickWebEngineScript.Deferred --> InjectionPoint"
<< "QQuickWebEngineScript.DocumentCreation --> InjectionPoint"
@@ -653,6 +658,7 @@ static QStringList expectedAPI = QStringList()
<< "QQuickWebEngineView.quotaPermissionRequested(QQuickWebEngineQuotaPermissionRequest) --> void"
<< "QQuickWebEngineView.recentlyAudible --> bool"
<< "QQuickWebEngineView.recentlyAudibleChanged(bool) --> void"
+ << "QQuickWebEngineView.registerProtocolHandlerPermissionRequested(QQuickWebEngineRegisterProtocolHandlerPermissionRequest) --> void"
<< "QQuickWebEngineView.reload() --> void"
<< "QQuickWebEngineView.reloadAndBypassCache() --> void"
<< "QQuickWebEngineView.renderProcessTerminated(RenderProcessTerminationStatus,int) --> void"
diff --git a/tests/auto/widgets/qwebenginepage/qwebenginepage.pro b/tests/auto/widgets/qwebenginepage/qwebenginepage.pro
index 47c09e1ce..8e7453827 100644
--- a/tests/auto/widgets/qwebenginepage/qwebenginepage.pro
+++ b/tests/auto/widgets/qwebenginepage/qwebenginepage.pro
@@ -1,4 +1,5 @@
include(../tests.pri)
+include(../../shared/http.pri)
QT *= core-private
qtConfig(webengine-printing-and-pdf): DEFINES+=QWEBENGINEPAGE_PDFPRINTINGENABLED
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index a32d96b3a..fbed89dd3 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -40,6 +40,7 @@
#include <QtTest/QtTest>
#include <QTextCharFormat>
#include <QWebChannel>
+#include <httpserver.h>
#include <qnetworkcookiejar.h>
#include <qnetworkreply.h>
#include <qnetworkrequest.h>
@@ -49,6 +50,7 @@
#include <qwebenginepage.h>
#include <qwebengineprofile.h>
#include <qwebenginequotapermissionrequest.h>
+#include <qwebengineregisterprotocolhandlerpermissionrequest.h>
#include <qwebenginescript.h>
#include <qwebenginescriptcollection.h>
#include <qwebenginesettings.h>
@@ -210,6 +212,8 @@ private Q_SLOTS:
void viewSourceURL_data();
void viewSourceURL();
void proxyConfigWithUnexpectedHostPortPair();
+ void registerProtocolHandler_data();
+ void registerProtocolHandler();
private:
static QPoint elementCenter(QWebEnginePage *page, const QString &id);
@@ -4202,6 +4206,67 @@ void tst_QWebEnginePage::proxyConfigWithUnexpectedHostPortPair()
QTRY_COMPARE(loadFinishedSpy.count(), 1);
}
+void tst_QWebEnginePage::registerProtocolHandler_data()
+{
+ QTest::addColumn<bool>("permission");
+ QTest::newRow("accept") << true;
+ QTest::newRow("reject") << false;
+}
+
+void tst_QWebEnginePage::registerProtocolHandler()
+{
+ QFETCH(bool, permission);
+
+ HttpServer server;
+ QWebEnginePage page;
+ QSignalSpy loadSpy(&page, &QWebEnginePage::loadFinished);
+ QSignalSpy permissionSpy(&page, &QWebEnginePage::registerProtocolHandlerPermissionRequested);
+
+ page.setUrl(server.url("/"));
+ auto rr1 = waitForRequest(&server);
+ QVERIFY(rr1);
+ rr1->setResponseBody(QByteArrayLiteral("<html><body><a id=\"link\" href=\"mailto:foo@bar.com\">some text here</a></body></html>"));
+ rr1->sendResponse();
+ auto rr2 = waitForRequest(&server);
+ QVERIFY(rr2);
+ QCOMPARE(rr2->requestMethod(), QByteArrayLiteral("GET"));
+ QCOMPARE(rr2->requestPath(), QByteArrayLiteral("/favicon.ico"));
+ rr2->setResponseStatus(404);
+ rr2->sendResponse();
+ QTRY_COMPARE(loadSpy.count(), 1);
+ QCOMPARE(loadSpy.takeFirst().value(0).toBool(), true);
+
+ QString callFormat = QStringLiteral("window.navigator.registerProtocolHandler(\"%1\", \"%2\", \"%3\")");
+ QString protocol = QStringLiteral("mailto");
+ QString url = server.url("/mail").toString() + QStringLiteral("?uri=%s");
+ QString title;
+ QString call = callFormat.arg(protocol).arg(url).arg(title);
+ page.runJavaScript(call);
+
+ QTRY_COMPARE(permissionSpy.count(), 1);
+ auto request = permissionSpy.takeFirst().value(0).value<QWebEngineRegisterProtocolHandlerPermissionRequest>();
+ QCOMPARE(request.origin(), QUrl(url));
+ QCOMPARE(request.protocol(), protocol);
+ if (permission)
+ request.accept();
+ else
+ request.reject();
+
+ page.runJavaScript(QStringLiteral("document.getElementById(\"link\").click()"));
+
+ std::unique_ptr<HttpReqRep> rr3;
+ if (permission) {
+ rr3 = waitForRequest(&server);
+ QVERIFY(rr3);
+ QCOMPARE(rr3->requestMethod(), QByteArrayLiteral("GET"));
+ QCOMPARE(rr3->requestPath(), QByteArrayLiteral("/mail?uri=mailto%3Afoo%40bar.com"));
+ rr3->sendResponse();
+ }
+
+ QTRY_COMPARE(loadSpy.count(), 1);
+ QCOMPARE(loadSpy.takeFirst().value(0).toBool(), permission);
+}
+
static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")};
W_QTEST_MAIN(tst_QWebEnginePage, params)