summaryrefslogtreecommitdiffstats
path: root/src/webengine
diff options
context:
space:
mode:
authorPaulo Pinheiro <paulovap.os@gmail.com>2015-02-25 22:00:57 -0300
committerPaulo Pinheiro <paulovap.os@gmail.com>2015-03-04 20:14:03 +0000
commit378fbbcbc9c65d1462ea6994f1f680412531a043 (patch)
tree05aa071b3ea4e4edf47df676e821697288873079 /src/webengine
parent5b1f762887b2332cea0d71f1f57b29f710c4cb15 (diff)
Quick: Fix handling of multiple certificate errors per request
This patch enables Quick API to handle multiple certificate errors per requests and update the example projects. Chromium 40 branch raise an certificate error for every resource loaded in a request (.js, .css, .html) instead of only one (previous behavior), so requests with more than one certificate error were automatically rejected. Change-Id: Ibaa3027cd6e7f22b5dc51dcd52f76ccf5ea162d3 Reviewed-by: Pierre Rossi <pierre.rossi@theqtcompany.com>
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/api/qquickwebenginecertificateerror.cpp18
-rw-r--r--src/webengine/api/qquickwebenginecertificateerror_p.h1
-rw-r--r--src/webengine/api/qquickwebengineview.cpp6
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h2
4 files changed, 21 insertions, 6 deletions
diff --git a/src/webengine/api/qquickwebenginecertificateerror.cpp b/src/webengine/api/qquickwebenginecertificateerror.cpp
index ba22bf1f0..a39bbfb84 100644
--- a/src/webengine/api/qquickwebenginecertificateerror.cpp
+++ b/src/webengine/api/qquickwebenginecertificateerror.cpp
@@ -45,7 +45,8 @@ public:
error(static_cast<QQuickWebEngineCertificateError::Error>(static_cast<int>(controller->error()))),
description(controller->errorString()),
overridable(controller->overridable()),
- async(false)
+ async(false),
+ answered(false)
{
}
@@ -54,6 +55,7 @@ public:
QString description;
bool overridable;
bool async;
+ bool answered;
};
@@ -102,7 +104,9 @@ void QQuickWebEngineCertificateError::defer()
*/
void QQuickWebEngineCertificateError::ignoreCertificateError()
{
- Q_D(const QQuickWebEngineCertificateError);
+ Q_D(QQuickWebEngineCertificateError);
+
+ d->answered = true;
QSharedPointer<CertificateErrorController> strongRefCert = d->weakRefCertErrorController.toStrongRef();
if (strongRefCert)
@@ -116,7 +120,9 @@ void QQuickWebEngineCertificateError::ignoreCertificateError()
*/
void QQuickWebEngineCertificateError::rejectCertificate()
{
- Q_D(const QQuickWebEngineCertificateError);
+ Q_D(QQuickWebEngineCertificateError);
+
+ d->answered = true;
QSharedPointer<CertificateErrorController> strongRefCert = d->weakRefCertErrorController.toStrongRef();
if (strongRefCert)
@@ -169,5 +175,11 @@ bool QQuickWebEngineCertificateError::deferred() const
return d->async;
}
+bool QQuickWebEngineCertificateError::answered() const
+{
+ Q_D(const QQuickWebEngineCertificateError);
+ return d->answered;
+}
+
QT_END_NAMESPACE
diff --git a/src/webengine/api/qquickwebenginecertificateerror_p.h b/src/webengine/api/qquickwebenginecertificateerror_p.h
index 08ebc83b6..18a1f90e5 100644
--- a/src/webengine/api/qquickwebenginecertificateerror_p.h
+++ b/src/webengine/api/qquickwebenginecertificateerror_p.h
@@ -83,6 +83,7 @@ public:
QString description() const;
bool overridable() const;
bool deferred() const;
+ bool answered() const;
private:
Q_DISABLE_COPY(QQuickWebEngineCertificateError)
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 1430d72b3..c1d2ac2b6 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -228,12 +228,13 @@ void QQuickWebEngineViewPrivate::allowCertificateError(const QSharedPointer<Cert
{
Q_Q(QQuickWebEngineView);
- m_certificateErrorController = errorController;
QQuickWebEngineCertificateError *quickController = new QQuickWebEngineCertificateError(errorController);
QQmlEngine::setObjectOwnership(quickController, QQmlEngine::JavaScriptOwnership);
Q_EMIT q->certificateError(quickController);
- if (!quickController->deferred())
+ if (!quickController->deferred() && !quickController->answered())
quickController->rejectCertificate();
+ else
+ m_certificateErrorControllers.append(errorController);
}
void QQuickWebEngineViewPrivate::runGeolocationPermissionRequest(const QUrl &url)
@@ -305,6 +306,7 @@ void QQuickWebEngineViewPrivate::loadStarted(const QUrl &provisionalUrl)
Q_Q(QQuickWebEngineView);
isLoading = true;
m_history->reset();
+ m_certificateErrorControllers.clear();
QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus);
Q_EMIT q->loadingChanged(&loadRequest);
}
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 0111d4be4..377dcc91f 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -202,7 +202,7 @@ public:
bool isLoading;
qreal devicePixelRatio;
QMap<quint64, QJSValue> m_callbacks;
- QSharedPointer<CertificateErrorController> m_certificateErrorController;
+ QList<QSharedPointer<CertificateErrorController> > m_certificateErrorControllers;
private:
QScopedPointer<QtWebEngineCore::UIDelegatesManager> m_uIDelegatesManager;