Skip to content

Commit 18f04fb

Browse files
committed
Refactor to simply and avoid QObject based QgsSslErrorHandler
1 parent 610d865 commit 18f04fb

5 files changed

+25
-45
lines changed

src/app/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ SET (QGIS_APP_MOC_HDRS
252252
qgsalignrasterdialog.h
253253
qgsappbrowserproviders.h
254254
qgsappscreenshots.h
255-
qgsappsslerrorhandler.h
256255
qgsjoindialog.h
257256
qgsaddtaborgroup.h
258257
qgsannotationwidget.h

src/app/qgsappsslerrorhandler.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@
1919

2020
class QgsAppSslErrorHandler : public QgsSslErrorHandler
2121
{
22-
Q_OBJECT
2322

24-
public slots:
23+
public:
2524

2625
void handleSslErrors( QNetworkReply *reply, const QList<QSslError> &errors ) override;
2726

src/core/qgsnetworkaccessmanager.cpp

+14-12
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,7 @@ QgsNetworkAccessManager::QgsNetworkAccessManager( QObject *parent )
127127
void QgsNetworkAccessManager::setSslErrorHandler( std::unique_ptr<QgsSslErrorHandler> handler )
128128
{
129129
Q_ASSERT( sMainNAM == this );
130-
131130
mSslErrorHandler = std::move( handler );
132-
connect( this, &QgsNetworkAccessManager::sslErrorsOccurred, mSslErrorHandler.get(), &QgsSslErrorHandler::onSslErrors );
133-
connect( mSslErrorHandler.get(), &QgsSslErrorHandler::sslErrorsHandled, this, &QgsNetworkAccessManager::afterSslErrorHandled );
134131
}
135132

136133
void QgsNetworkAccessManager::insertProxyFactory( QNetworkProxyFactory *factory )
@@ -256,11 +253,13 @@ QNetworkReply *QgsNetworkAccessManager::createRequest( QNetworkAccessManager::Op
256253
return reply;
257254
}
258255

256+
#ifndef QT_NO_SSL
259257
void QgsNetworkAccessManager::unlockAfterSslErrorHandled()
260258
{
261259
Q_ASSERT( QThread::currentThread() == QApplication::instance()->thread() );
262260
mSslErrorWaitCondition.wakeOne();
263261
}
262+
#endif
264263

265264
void QgsNetworkAccessManager::abortRequest()
266265
{
@@ -346,6 +345,12 @@ void QgsNetworkAccessManager::afterSslErrorHandled( QNetworkReply *reply )
346345
qobject_cast< QgsNetworkAccessManager *>( reply->manager() )->unlockAfterSslErrorHandled(); // safe to call directly - the other thread will be stuck waiting for us
347346
}
348347
}
348+
349+
void QgsNetworkAccessManager::handleSslErrors( QNetworkReply *reply, const QList<QSslError> &errors )
350+
{
351+
mSslErrorHandler->handleSslErrors( reply, errors );
352+
afterSslErrorHandled( reply );
353+
}
349354
#endif
350355

351356
QString QgsNetworkAccessManager::cacheLoadControlName( QNetworkRequest::CacheLoadControl control )
@@ -422,14 +427,17 @@ void QgsNetworkAccessManager::setupDefaultProxyAndCache( Qt::ConnectionType conn
422427
connectionType );
423428

424429
connect( this, &QgsNetworkAccessManager::requestEncounteredSslErrors, sMainNAM, &QgsNetworkAccessManager::requestEncounteredSslErrors );
425-
connect( this, &QgsNetworkAccessManager::sslErrorsOccurred, sMainNAM, &QgsNetworkAccessManager::sslErrorsOccurred );
426430
#endif
427431
}
428432
else
429433
{
434+
#ifndef QT_NO_SSL
430435
setSslErrorHandler( qgis::make_unique< QgsSslErrorHandler >() );
436+
#endif
431437
}
432-
438+
#ifndef QT_NO_SSL
439+
connect( this, &QgsNetworkAccessManager::sslErrorsOccurred, sMainNAM, &QgsNetworkAccessManager::handleSslErrors );
440+
#endif
433441
connect( this, &QNetworkAccessManager::finished, this, &QgsNetworkAccessManager::onReplyFinished );
434442

435443
// check if proxy is enabled
@@ -539,14 +547,8 @@ QgsNetworkRequestParameters::QgsNetworkRequestParameters( QNetworkAccessManager:
539547
// QgsSslErrorHandler
540548
//
541549

542-
void QgsSslErrorHandler::onSslErrors( QNetworkReply *reply, const QList<QSslError> &errors )
543-
{
544-
Q_ASSERT( QThread::currentThread() == QApplication::instance()->thread() );
545-
handleSslErrors( reply, errors );
546-
emit sslErrorsHandled( reply );
547-
}
548-
549550
void QgsSslErrorHandler::handleSslErrors( QNetworkReply *reply, const QList<QSslError> & )
550551
{
552+
Q_UNUSED( reply );
551553
QgsDebugMsg( QStringLiteral( "SSL errors occurred accessing URL:\n%1" ).arg( reply->request().url().toString() ) );
552554
}

src/core/qgsnetworkaccessmanager.h

+9-27
Original file line numberDiff line numberDiff line change
@@ -162,22 +162,14 @@ class QgsNetworkAccessManager;
162162
* SSL error handler is set by calling QgsNetworkAccessManager::setSslErrorHandler().
163163
* By default an instance of the logging-only QgsSslErrorHandler base class is used.
164164
*
165-
* \since 3.6
165+
* \since QGIS 3.6
166166
*/
167-
class CORE_EXPORT QgsSslErrorHandler : public QObject
167+
class CORE_EXPORT QgsSslErrorHandler
168168
{
169-
Q_OBJECT
170-
171-
///@cond PRIVATE
172-
public slots:
173169

174-
/**
175-
* Called whenever SSL \a errors are encountered during a network \a reply.
176-
*/
177-
void onSslErrors( QNetworkReply *reply, const QList<QSslError> &errors );
178-
///@endcond
170+
public:
179171

180-
protected:
172+
virtual ~QgsSslErrorHandler() = default;
181173

182174
/**
183175
* Called whenever SSL \a errors are encountered during a network \a reply.
@@ -191,17 +183,6 @@ class CORE_EXPORT QgsSslErrorHandler : public QObject
191183
*/
192184
virtual void handleSslErrors( QNetworkReply *reply, const QList<QSslError> &errors );
193185

194-
signals:
195-
196-
/**
197-
* Emitted when the SSL errors for a \a reply have been handled (i.e. the
198-
* subclass' handleSslErrors() implementation has completed).
199-
*
200-
* It is not necessary for subclasses to emit this signal manually, it will
201-
* automatically be emitted at the correct time.
202-
*/
203-
void sslErrorsHandled( QNetworkReply *reply );
204-
205186
};
206187
#endif
207188

@@ -414,16 +395,17 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager
414395
void onReplyDownloadProgress( qint64 bytesReceived, qint64 bytesTotal );
415396
#ifndef QT_NO_SSL
416397
void onReplySslErrors( const QList<QSslError> &errors );
417-
#endif
418-
419-
void afterSslErrorHandled( QNetworkReply *reply );
420398

399+
void handleSslErrors( QNetworkReply *reply, const QList<QSslError> &errors );
400+
#endif
421401
protected:
422402
QNetworkReply *createRequest( QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData = nullptr ) override;
423403

424404
private:
405+
#ifndef QT_NO_SSL
425406
void unlockAfterSslErrorHandled();
426-
407+
void afterSslErrorHandled( QNetworkReply *reply );
408+
#endif
427409
QList<QNetworkProxyFactory *> mProxyFactories;
428410
QNetworkProxy mFallbackProxy;
429411
QStringList mExcludedURLs;

tests/src/core/testqgsnetworkaccessmanager.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ class BackgroundRequest : public QThread
6161

6262
class TestSslErrorHandler : public QgsSslErrorHandler
6363
{
64-
Q_OBJECT
65-
66-
protected:
64+
public:
6765

6866
void handleSslErrors( QNetworkReply *reply, const QList<QSslError> &errors ) override
6967
{

0 commit comments

Comments
 (0)