summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-09-28 18:17:43 +0300
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2016-09-28 18:50:08 +0300
commit55c4bb98d72071fec5d98900865f24fe75922975 (patch)
treee276c7b7d689b8ee39b93daf5e871db42146478f
parent4ef66f36d40c9801b6683fe18b27367c89159541 (diff)
downloadqtlocation-mapboxgl-55c4bb98d72071fec5d98900865f24fe75922975.tar.gz
[Qt] Connect to finished() and error() signals from QNetworkReply
Qt macOS network manage implementation differs from linux in a sense that some requests do not generate a finished() signal, but a error() instead - that is not caught up by the network access manager. This made QMapboxGL.styleURL utest hang for macOS.
-rw-r--r--platform/qt/src/http_file_source.cpp9
-rw-r--r--platform/qt/src/http_file_source.hpp2
2 files changed, 6 insertions, 5 deletions
diff --git a/platform/qt/src/http_file_source.cpp b/platform/qt/src/http_file_source.cpp
index 87948609df..61fa1ca612 100644
--- a/platform/qt/src/http_file_source.cpp
+++ b/platform/qt/src/http_file_source.cpp
@@ -34,8 +34,6 @@ HTTPFileSource::Impl::Impl() : m_manager(new QNetworkAccessManager(this))
if (m_ssl.caCertificates().isEmpty()) {
mbgl::Log::Warning(mbgl::Event::HttpRequest, "Could not load list of certificate authorities");
}
-
- connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinish(QNetworkReply*)));
}
void HTTPFileSource::Impl::request(HTTPRequest* req)
@@ -54,6 +52,8 @@ void HTTPFileSource::Impl::request(HTTPRequest* req)
networkRequest.setSslConfiguration(m_ssl);
data.first = m_manager->get(networkRequest);
+ connect(data.first, SIGNAL(finished()), this, SLOT(onReplyFinished()));
+ connect(data.first, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyFinished()));
}
void HTTPFileSource::Impl::cancel(HTTPRequest* req)
@@ -90,9 +90,10 @@ void HTTPFileSource::Impl::cancel(HTTPRequest* req)
}
}
-void HTTPFileSource::Impl::replyFinish(QNetworkReply* reply)
+void HTTPFileSource::Impl::onReplyFinished()
{
- const QUrl& url = reply->request().url();
+ QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender());
+ const QUrl& url = reply->url();
auto it = m_pending.find(url);
if (it == m_pending.end()) {
diff --git a/platform/qt/src/http_file_source.hpp b/platform/qt/src/http_file_source.hpp
index 777228d191..0776707069 100644
--- a/platform/qt/src/http_file_source.hpp
+++ b/platform/qt/src/http_file_source.hpp
@@ -28,7 +28,7 @@ public:
void cancel(HTTPRequest *);
public slots:
- void replyFinish(QNetworkReply *);
+ void onReplyFinished();
private:
QMap<QUrl, QPair<QNetworkReply *, QVector<HTTPRequest *>>> m_pending;