diff options
-rw-r--r-- | tests/auto/core/certificateerror/tst_certificateerror.cpp | 17 | ||||
-rw-r--r-- | tests/auto/quick/qmltests/data/tst_certificateError.qml | 17 |
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/core/certificateerror/tst_certificateerror.cpp b/tests/auto/core/certificateerror/tst_certificateerror.cpp index a2b15a1ae..da679fa8a 100644 --- a/tests/auto/core/certificateerror/tst_certificateerror.cpp +++ b/tests/auto/core/certificateerror/tst_certificateerror.cpp @@ -43,6 +43,7 @@ public: private Q_SLOTS: void handleError_data(); void handleError(); + void fatalError(); }; struct PageWithCertificateErrorHandler : QWebEnginePage @@ -131,5 +132,21 @@ void tst_CertificateError::handleError() QCOMPARE(toPlainTextSync(&page), expectedContent); } +void tst_CertificateError::fatalError() +{ + PageWithCertificateErrorHandler page(false, false); + page.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); + QSignalSpy loadFinishedSpy(&page, &QWebEnginePage::loadFinished); + + page.setUrl(QUrl("https://revoked.badssl.com")); + if (!loadFinishedSpy.wait(10000)) + QSKIP("Couldn't load page from network, skipping test."); + QTRY_VERIFY(page.error); + QVERIFY(!page.error->isOverridable()); + + // Fatal certificate errors are implicitly rejected. This should not cause crash. + page.error->rejectCertificate(); +} + QTEST_MAIN(tst_CertificateError) #include <tst_certificateerror.moc> diff --git a/tests/auto/quick/qmltests/data/tst_certificateError.qml b/tests/auto/quick/qmltests/data/tst_certificateError.qml index a707f4a74..bad24bf0f 100644 --- a/tests/auto/quick/qmltests/data/tst_certificateError.qml +++ b/tests/auto/quick/qmltests/data/tst_certificateError.qml @@ -121,5 +121,22 @@ TestWebEngineView { verify(error.overridable) compare(error.type, WebEngineCertificateError.CertificateAuthorityInvalid) } + + function test_fatalError() { + var handleCertificateError = function(error) { + verify(!error.overrideable); + // QQuickWebEngineViewPrivate::allowCertificateError() will implicitly reject + // fatal errors and it should not crash if already rejected in handler. + error.rejectCertificate(); + } + view.certificateError.connect(handleCertificateError); + + view.url = Qt.resolvedUrl('https://revoked.badssl.com'); + if (!view.waitForLoadFailed(10000)) + skip("Couldn't load page from network, skipping test."); + compare(spyError.count, 1); + + view.certificateError.disconnect(handleCertificateError); + } } } |