diff options
-rw-r--r-- | examples/webenginewidgets/simplebrowser/webpage.cpp | 45 | ||||
-rw-r--r-- | examples/webenginewidgets/simplebrowser/webpage.h | 2 | ||||
-rw-r--r-- | src/core/api/qwebenginecertificateerror.cpp | 44 | ||||
-rw-r--r-- | src/core/api/qwebenginecertificateerror.h | 19 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 2 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.h | 2 | ||||
-rw-r--r-- | tests/auto/quick/certificateerror/tst_certificateerror.cpp | 10 | ||||
-rw-r--r-- | tests/auto/quick/publicapi/tst_publicapi.cpp | 38 | ||||
-rw-r--r-- | tests/auto/quick/qmltests/data/tst_certificateError.qml | 4 | ||||
-rw-r--r-- | tests/auto/widgets/certificateerror/tst_certificateerror.cpp | 9 |
12 files changed, 70 insertions, 109 deletions
diff --git a/examples/webenginewidgets/simplebrowser/webpage.cpp b/examples/webenginewidgets/simplebrowser/webpage.cpp index d8f954c90..c4d7204cb 100644 --- a/examples/webenginewidgets/simplebrowser/webpage.cpp +++ b/examples/webenginewidgets/simplebrowser/webpage.cpp @@ -70,34 +70,29 @@ WebPage::WebPage(QWebEngineProfile *profile, QObject *parent) connect(this, &QWebEnginePage::selectClientCertificate, this, &WebPage::handleSelectClientCertificate); } -void WebPage::certificateError(const QWebEngineCertificateError &error) +void WebPage::certificateError(QWebEngineCertificateError error) { QWidget *mainWindow = view()->window(); - QWebEngineCertificateError deferredError = error; - deferredError.defer(); - - QTimer::singleShot(0, mainWindow, [mainWindow, error = std::move(deferredError)] () mutable { - if (!error.deferred()) { - QMessageBox::critical(mainWindow, tr("Certificate Error"), error.errorDescription()); - } else { - QDialog dialog(mainWindow); - dialog.setModal(true); - dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); - - Ui::CertificateErrorDialog certificateDialog; - certificateDialog.setupUi(&dialog); - certificateDialog.m_iconLabel->setText(QString()); - QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, mainWindow)); - certificateDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32)); - certificateDialog.m_errorLabel->setText(error.errorDescription()); - dialog.setWindowTitle(tr("Certificate Error")); - - if (dialog.exec() == QDialog::Accepted) - error.ignoreCertificateError(); - else - error.rejectCertificate(); - } + error.defer(); + + QTimer::singleShot(0, mainWindow, [mainWindow, error]() mutable { + QDialog dialog(mainWindow); + dialog.setModal(true); + dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); + + Ui::CertificateErrorDialog certificateDialog; + certificateDialog.setupUi(&dialog); + certificateDialog.m_iconLabel->setText(QString()); + QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, mainWindow)); + certificateDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32)); + certificateDialog.m_errorLabel->setText(error.description()); + dialog.setWindowTitle(tr("Certificate Error")); + + if (dialog.exec() == QDialog::Accepted) + error.acceptCertificate(); + else + error.rejectCertificate(); }); } diff --git a/examples/webenginewidgets/simplebrowser/webpage.h b/examples/webenginewidgets/simplebrowser/webpage.h index fbb15fc0f..d69c459e9 100644 --- a/examples/webenginewidgets/simplebrowser/webpage.h +++ b/examples/webenginewidgets/simplebrowser/webpage.h @@ -62,7 +62,7 @@ public: WebPage(QWebEngineProfile *profile, QObject *parent = nullptr); protected: - void certificateError(const QWebEngineCertificateError &error) override; + void certificateError(QWebEngineCertificateError error) override; private slots: void handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth); diff --git a/src/core/api/qwebenginecertificateerror.cpp b/src/core/api/qwebenginecertificateerror.cpp index cf8a20d53..098986132 100644 --- a/src/core/api/qwebenginecertificateerror.cpp +++ b/src/core/api/qwebenginecertificateerror.cpp @@ -103,7 +103,7 @@ QWebEngineCertificateError& QWebEngineCertificateError::operator=(const QWebEngi QWebEngineCertificateError::~QWebEngineCertificateError() = default; /*! - \enum QWebEngineCertificateError::Error + \enum QWebEngineCertificateError::Type This enum describes the type of certificate error encountered. @@ -136,7 +136,7 @@ QWebEngineCertificateError::~QWebEngineCertificateError() = default; /*! Returns whether this error can be overridden and accepted. - \sa error(), errorDescription() + \sa error(), description() */ bool QWebEngineCertificateError::isOverridable() const { @@ -146,7 +146,7 @@ bool QWebEngineCertificateError::isOverridable() const /*! Returns the URL that triggered the error. - \sa error(), errorDescription() + \sa error(), description() */ QUrl QWebEngineCertificateError::url() const { @@ -156,11 +156,11 @@ QUrl QWebEngineCertificateError::url() const /*! Returns the type of the error. - \sa errorDescription(), isOverridable() + \sa description(), isOverridable() */ -QWebEngineCertificateError::Error QWebEngineCertificateError::error() const +QWebEngineCertificateError::Type QWebEngineCertificateError::type() const { - return Error(d->error()); + return Type(d->error()); } /*! @@ -168,7 +168,7 @@ QWebEngineCertificateError::Error QWebEngineCertificateError::error() const \sa error(), url(), isOverridable() */ -QString QWebEngineCertificateError::errorDescription() const +QString QWebEngineCertificateError::description() const { return d->errorString(); } @@ -178,9 +178,9 @@ QString QWebEngineCertificateError::errorDescription() const Marks the certificate error for delayed handling. - This function should be called when there is a need to postpone the decision whether to ignore a - certificate error, for example, while waiting for user input. When called, the function pauses the - URL request until ignoreCertificateError() or rejectCertificate() is called. + This function should be called when there is a need to postpone the decision whether to accept a + certificate, for example, while waiting for user input. When called, the function pauses the + URL request until acceptCertificate() or rejectCertificate() is called. \note It is only possible to defer overridable certificate errors. @@ -194,19 +194,9 @@ void QWebEngineCertificateError::defer() /*! \since 5.14 - Returns whether the decision for error handling was delayed and the URL load was halted. + Accepts the certificate and continues the loading of the requested URL. */ -bool QWebEngineCertificateError::deferred() const -{ - return d->deferred(); -} - -/*! - \since 5.14 - - Ignores the certificate error and continues the loading of the requested URL. -*/ -void QWebEngineCertificateError::ignoreCertificateError() +void QWebEngineCertificateError::acceptCertificate() { d->ignoreCertificateError(); } @@ -224,16 +214,6 @@ void QWebEngineCertificateError::rejectCertificate() /*! \since 5.14 - Returns \c true if the error was explicitly rejected or ignored. -*/ -bool QWebEngineCertificateError::answered() const -{ - return d->answered(); -} - -/*! - \since 5.14 - Returns the peer's chain of digital certificates. Chain starts with the peer's immediate certificate and ending with the CA's certificate. diff --git a/src/core/api/qwebenginecertificateerror.h b/src/core/api/qwebenginecertificateerror.h index 029c2a512..1fdea42be 100644 --- a/src/core/api/qwebenginecertificateerror.h +++ b/src/core/api/qwebenginecertificateerror.h @@ -56,11 +56,9 @@ QT_BEGIN_NAMESPACE class Q_WEBENGINECORE_EXPORT QWebEngineCertificateError { Q_GADGET Q_PROPERTY(QUrl url READ url CONSTANT FINAL) - Q_PROPERTY(Error error READ error CONSTANT FINAL) - Q_PROPERTY(QString description READ errorDescription CONSTANT FINAL) + Q_PROPERTY(Type type READ type CONSTANT FINAL) + Q_PROPERTY(QString description READ description CONSTANT FINAL) Q_PROPERTY(bool overridable READ isOverridable CONSTANT FINAL) - Q_PROPERTY(bool deferred READ deferred CONSTANT FINAL) - Q_PROPERTY(bool answered READ answered CONSTANT FINAL) public: QWebEngineCertificateError(const QWebEngineCertificateError &other); @@ -68,7 +66,7 @@ public: ~QWebEngineCertificateError(); // Keep this identical to CertificateErrorController::CertificateError, or add mapping layer. - enum Error { + enum Type { SslPinnedKeyNotInCertificateChain = -150, CertificateCommonNameInvalid = -200, CertificateDateInvalid = -201, @@ -86,19 +84,16 @@ public: CertificateTransparencyRequired = -214, CertificateKnownInterceptionBlocked = -217, }; - Q_ENUM(Error) + Q_ENUM(Type) - Error error() const; + Type type() const; QUrl url() const; bool isOverridable() const; - QString errorDescription() const; + QString description() const; Q_INVOKABLE void defer(); - bool deferred() const; - Q_INVOKABLE void rejectCertificate(); - Q_INVOKABLE void ignoreCertificateError(); - bool answered() const; + Q_INVOKABLE void acceptCertificate(); QList<QSslCertificate> certificateChain() const; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index ceee1d282..5318cdf1b 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -683,7 +683,7 @@ void WebContentsDelegateQt::allowCertificateError( { QWebEngineCertificateError error(controller); m_viewClient->allowCertificateError(error); - if (!error.isOverridable() || (!error.deferred() && !error.answered())) + if (!error.isOverridable() || (!controller->deferred() && !controller->answered())) error.rejectCertificate(); else m_certificateErrorControllers.append(controller); diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index e169d0490..800c1c491 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -552,7 +552,7 @@ Q_SIGNALS: void linkHovered(const QUrl &hoveredUrl); void navigationRequested(QQuickWebEngineNavigationRequest *request); void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID); - Q_REVISION(1) void certificateError(const QWebEngineCertificateError &error); + Q_REVISION(1) void certificateError(QWebEngineCertificateError error); Q_REVISION(1) void fullScreenRequested(const QQuickWebEngineFullScreenRequest &request); Q_REVISION(1) void isFullScreenChanged(); Q_REVISION(1) void featurePermissionRequested(const QUrl &securityOrigin, Feature feature); diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 1e4ade4ac..f211347f1 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -2382,7 +2382,7 @@ void QWebEnginePage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel leve } } -void QWebEnginePage::certificateError(const QWebEngineCertificateError &) { } +void QWebEnginePage::certificateError(QWebEngineCertificateError) { } bool QWebEnginePage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) { diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index 199ba9e2e..102f36a30 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -375,7 +375,7 @@ protected: virtual bool javaScriptConfirm(const QUrl &securityOrigin, const QString& msg); virtual bool javaScriptPrompt(const QUrl &securityOrigin, const QString& msg, const QString& defaultValue, QString* result); virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID); - virtual void certificateError(const QWebEngineCertificateError &certificateError); + virtual void certificateError(QWebEngineCertificateError certificateError); virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame); private: diff --git a/tests/auto/quick/certificateerror/tst_certificateerror.cpp b/tests/auto/quick/certificateerror/tst_certificateerror.cpp index 6652fd511..3e2dc85fb 100644 --- a/tests/auto/quick/certificateerror/tst_certificateerror.cpp +++ b/tests/auto/quick/certificateerror/tst_certificateerror.cpp @@ -99,7 +99,7 @@ void tst_CertificateError::handleError() } if (acceptCertificate) - error.ignoreCertificateError(); + error.acceptCertificate(); else error.rejectCertificate(); @@ -110,16 +110,12 @@ void tst_CertificateError::handleError() QCOMPARE(chain[1].serialNumber(), "6d:52:fb:b4:57:3b:b2:03:c8:62:7b:7e:44:45:5c:d3:08:87:74:17"); if (deferError) { - QVERIFY(error.deferred()); - QVERIFY(!error.answered()); QVERIFY(!m_handler->loadSuccess()); if (acceptCertificate) - error.ignoreCertificateError(); + error.acceptCertificate(); else - error.rejectCertificate(); - - QVERIFY(error.answered()); + error.rejectCertificate(); } QTRY_COMPARE_WITH_TIMEOUT(m_handler->loadSuccess(), acceptCertificate, 3000); } diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp index e5f5bf27d..83ae3f0cd 100644 --- a/tests/auto/quick/publicapi/tst_publicapi.cpp +++ b/tests/auto/quick/publicapi/tst_publicapi.cpp @@ -121,28 +121,26 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineAuthenticationDialogRequest.realm --> QString" << "QQuickWebEngineAuthenticationDialogRequest.type --> AuthenticationType" << "QQuickWebEngineAuthenticationDialogRequest.url --> QUrl" - << "QWebEngineCertificateError.CertificateAuthorityInvalid --> Error" - << "QWebEngineCertificateError.CertificateCommonNameInvalid --> Error" - << "QWebEngineCertificateError.CertificateContainsErrors --> Error" - << "QWebEngineCertificateError.CertificateDateInvalid --> Error" - << "QWebEngineCertificateError.CertificateInvalid --> Error" - << "QWebEngineCertificateError.CertificateKnownInterceptionBlocked --> Error" - << "QWebEngineCertificateError.CertificateNameConstraintViolation --> Error" - << "QWebEngineCertificateError.CertificateNoRevocationMechanism --> Error" - << "QWebEngineCertificateError.CertificateNonUniqueName --> Error" - << "QWebEngineCertificateError.CertificateRevoked --> Error" - << "QWebEngineCertificateError.CertificateTransparencyRequired --> Error" - << "QWebEngineCertificateError.CertificateUnableToCheckRevocation --> Error" - << "QWebEngineCertificateError.CertificateValidityTooLong --> Error" - << "QWebEngineCertificateError.CertificateWeakKey --> Error" - << "QWebEngineCertificateError.CertificateWeakSignatureAlgorithm --> Error" - << "QWebEngineCertificateError.SslPinnedKeyNotInCertificateChain --> Error" - << "QWebEngineCertificateError.answered --> bool" - << "QWebEngineCertificateError.deferred --> bool" + << "QWebEngineCertificateError.CertificateAuthorityInvalid --> Type" + << "QWebEngineCertificateError.CertificateCommonNameInvalid --> Type" + << "QWebEngineCertificateError.CertificateContainsErrors --> Type" + << "QWebEngineCertificateError.CertificateDateInvalid --> Type" + << "QWebEngineCertificateError.CertificateInvalid --> Type" + << "QWebEngineCertificateError.CertificateKnownInterceptionBlocked --> Type" + << "QWebEngineCertificateError.CertificateNameConstraintViolation --> Type" + << "QWebEngineCertificateError.CertificateNoRevocationMechanism --> Type" + << "QWebEngineCertificateError.CertificateNonUniqueName --> Type" + << "QWebEngineCertificateError.CertificateRevoked --> Type" + << "QWebEngineCertificateError.CertificateTransparencyRequired --> Type" + << "QWebEngineCertificateError.CertificateUnableToCheckRevocation --> Type" + << "QWebEngineCertificateError.CertificateValidityTooLong --> Type" + << "QWebEngineCertificateError.CertificateWeakKey --> Type" + << "QWebEngineCertificateError.CertificateWeakSignatureAlgorithm --> Type" + << "QWebEngineCertificateError.SslPinnedKeyNotInCertificateChain --> Type" << "QWebEngineCertificateError.defer() --> void" << "QWebEngineCertificateError.description --> QString" - << "QWebEngineCertificateError.error --> Error" - << "QWebEngineCertificateError.ignoreCertificateError() --> void" + << "QWebEngineCertificateError.type --> Type" + << "QWebEngineCertificateError.acceptCertificate() --> void" << "QWebEngineCertificateError.overridable --> bool" << "QWebEngineCertificateError.rejectCertificate() --> void" << "QWebEngineCertificateError.url --> QUrl" diff --git a/tests/auto/quick/qmltests/data/tst_certificateError.qml b/tests/auto/quick/qmltests/data/tst_certificateError.qml index 0629be175..a4bd9597a 100644 --- a/tests/auto/quick/qmltests/data/tst_certificateError.qml +++ b/tests/auto/quick/qmltests/data/tst_certificateError.qml @@ -42,7 +42,7 @@ TestWebEngineView { if (deferError) error.defer() else if (acceptCertificate) - error.ignoreCertificateError() + error.acceptCertificate() else error.rejectCertificate() } @@ -97,7 +97,7 @@ TestWebEngineView { let error = spyError.signalArguments[0][0] if (data.acceptCertificate) - error.ignoreCertificateError() + error.acceptCertificate() else error.rejectCertificate() } diff --git a/tests/auto/widgets/certificateerror/tst_certificateerror.cpp b/tests/auto/widgets/certificateerror/tst_certificateerror.cpp index 34508be0c..d57c1788b 100644 --- a/tests/auto/widgets/certificateerror/tst_certificateerror.cpp +++ b/tests/auto/widgets/certificateerror/tst_certificateerror.cpp @@ -57,7 +57,7 @@ struct PageWithCertificateErrorHandler : QWebEnginePage QSignalSpy loadSpy; QScopedPointer<QWebEngineCertificateError> error; - void certificateError(const QWebEngineCertificateError &e) override + void certificateError(QWebEngineCertificateError e) override { error.reset(new QWebEngineCertificateError(e)); if (deferError) { @@ -66,7 +66,7 @@ struct PageWithCertificateErrorHandler : QWebEnginePage } if (acceptCertificate) - error->ignoreCertificateError(); + error->acceptCertificate(); else error->rejectCertificate(); } @@ -109,17 +109,14 @@ void tst_CertificateError::handleError() QCOMPARE(chain[1].serialNumber(), "6d:52:fb:b4:57:3b:b2:03:c8:62:7b:7e:44:45:5c:d3:08:87:74:17"); if (deferError) { - QVERIFY(page.error->deferred()); - QVERIFY(!page.error->answered()); QCOMPARE(page.loadSpy.count(), 0); QCOMPARE(toPlainTextSync(&page), QString()); if (acceptCertificate) - page.error->ignoreCertificateError(); + page.error->acceptCertificate(); else page.error->rejectCertificate(); - QVERIFY(page.error->answered()); page.error.reset(); } QTRY_COMPARE_WITH_TIMEOUT(page.loadSpy.count(), 1, 30000); |