summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/quick/qmltests/data/TestWebEngineView.qml7
-rw-r--r--tests/auto/quick/qmltests/data/tst_certificateError.qml114
-rw-r--r--tests/auto/quick/qmltests/qmltests.pro1
-rw-r--r--tests/auto/quick/qmltests/tst_qmltests.cpp4
-rw-r--r--tests/auto/shared/httpreqrep.h4
5 files changed, 128 insertions, 2 deletions
diff --git a/tests/auto/quick/qmltests/data/TestWebEngineView.qml b/tests/auto/quick/qmltests/data/TestWebEngineView.qml
index f5e83c5d2..6db076ae8 100644
--- a/tests/auto/quick/qmltests/data/TestWebEngineView.qml
+++ b/tests/auto/quick/qmltests/data/TestWebEngineView.qml
@@ -111,5 +111,12 @@ WebEngineView {
onWindowCloseRequested: {
windowCloseRequestedSignalEmitted = true;
}
+
+ function getBodyText() {
+ let text
+ runJavaScript('document.body.innerText', function(t) { text = t })
+ testCase.tryVerify(function() { return text !== undefined })
+ return text
+ }
}
diff --git a/tests/auto/quick/qmltests/data/tst_certificateError.qml b/tests/auto/quick/qmltests/data/tst_certificateError.qml
new file mode 100644
index 000000000..0629be175
--- /dev/null
+++ b/tests/auto/quick/qmltests/data/tst_certificateError.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+import QtTest 1.0
+import QtWebEngine 1.9
+
+import Test.Shared 1.0 as Shared
+
+TestWebEngineView {
+ id: view; width: 320; height: 320
+
+ property bool deferError: false
+ property bool acceptCertificate: false
+
+ onCertificateError: function(error) {
+ if (deferError)
+ error.defer()
+ else if (acceptCertificate)
+ error.ignoreCertificateError()
+ else
+ error.rejectCertificate()
+ }
+
+ SignalSpy {
+ id: spyError
+ target: view
+ signalName: 'certificateError'
+ }
+
+ TestCase {
+ name: 'CertificateError'
+ when: windowShown
+
+ function initTestCase() {
+ Shared.HttpsServer.setExpectError(true)
+ Shared.HttpsServer.newRequest.connect(function (request) {
+ request.setResponseBody('<html><body>Test</body></html>')
+ request.sendResponse()
+ })
+ view.settings.errorPageEnabled = false
+ }
+
+ function init() {
+ verify(Shared.HttpsServer.start())
+ }
+
+ function cleanup() {
+ Shared.HttpsServer.stop()
+ view.deferError = false
+ view.acceptCertificate = false
+ spyError.clear()
+ }
+
+ function test_error_data() {
+ return [
+ { tag: 'reject', deferError: false, acceptCertificate: false, expectedContent: '' },
+ { tag: 'defer_reject', deferError: true, acceptCertificate: false, expectedContent: '' },
+ { tag: 'defer_accept', deferError: true, acceptCertificate: true, expectedContent: 'Test' },
+ ]
+ }
+
+ function test_error(data) {
+ view.deferError = data.deferError
+ view.acceptCertificate = data.acceptCertificate
+ view.url = Shared.HttpsServer.url()
+
+ if (data.deferError) {
+ spyError.wait()
+ compare(spyError.count, 1)
+ compare('', view.getBodyText())
+
+ let error = spyError.signalArguments[0][0]
+ if (data.acceptCertificate)
+ error.ignoreCertificateError()
+ else
+ error.rejectCertificate()
+ }
+
+ if (data.acceptCertificate)
+ verify(view.waitForLoadSucceeded())
+ else
+ verify(view.waitForLoadFailed())
+
+ compare(spyError.count, 1)
+ compare(data.expectedContent, view.getBodyText())
+ }
+ }
+}
diff --git a/tests/auto/quick/qmltests/qmltests.pro b/tests/auto/quick/qmltests/qmltests.pro
index 5c57f7ad9..6bec6dc0d 100644
--- a/tests/auto/quick/qmltests/qmltests.pro
+++ b/tests/auto/quick/qmltests/qmltests.pro
@@ -1,4 +1,5 @@
include(../tests.pri)
+include(../../shared/https.pri)
QT += qmltest
diff --git a/tests/auto/quick/qmltests/tst_qmltests.cpp b/tests/auto/quick/qmltests/tst_qmltests.cpp
index 9e8d25222..0d830931d 100644
--- a/tests/auto/quick/qmltests/tst_qmltests.cpp
+++ b/tests/auto/quick/qmltests/tst_qmltests.cpp
@@ -26,6 +26,8 @@
**
****************************************************************************/
+#include <httpsserver.h>
+
#include <QtCore/QScopedPointer>
#include <QTemporaryDir>
#include <QtQuickTest/quicktest.h>
@@ -144,6 +146,8 @@ int main(int argc, char **argv)
QTEST_SET_MAIN_SOURCE_PATH
+ qmlRegisterSingletonType<HttpsServer>("Test.Shared", 1, 0, "HttpsServer", [&] (QQmlEngine *, QJSEngine *) { return new HttpsServer; });
+
int i = quick_test_main(argc, argv, "qmltests", QUICK_TEST_SOURCE_DIR);
return i;
}
diff --git a/tests/auto/shared/httpreqrep.h b/tests/auto/shared/httpreqrep.h
index bee8119eb..1666b17d0 100644
--- a/tests/auto/shared/httpreqrep.h
+++ b/tests/auto/shared/httpreqrep.h
@@ -40,7 +40,7 @@ class HttpReqRep : public QObject
public:
explicit HttpReqRep(QTcpSocket *socket, QObject *parent = nullptr);
- void sendResponse();
+ Q_INVOKABLE void sendResponse();
void close();
// Request parameters (only valid after requestReceived())
@@ -61,7 +61,7 @@ public:
m_responseHeaders[key.toLower()] = std::move(value);
}
QByteArray responseBody() const { return m_responseBody; }
- void setResponseBody(QByteArray content)
+ Q_INVOKABLE void setResponseBody(QByteArray content)
{
m_responseHeaders["content-length"] = QByteArray::number(content.size());
m_responseBody = std::move(content);