diff options
-rw-r--r-- | examples/location/mapviewer/main.cpp | 3 | ||||
-rw-r--r-- | examples/location/mapviewer/mapviewer.qml | 13 | ||||
-rw-r--r-- | src/plugins/geoservices/mapboxgl/qgeomappingmanagerenginemapboxgl.cpp | 39 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotileproviderosm.cpp | 24 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotileproviderosm.h | 1 |
5 files changed, 63 insertions, 17 deletions
diff --git a/examples/location/mapviewer/main.cpp b/examples/location/mapviewer/main.cpp index 73bc937b..39c117ed 100644 --- a/examples/location/mapviewer/main.cpp +++ b/examples/location/mapviewer/main.cpp @@ -52,6 +52,8 @@ #include <QtGui/QGuiApplication> #include <QtQml/QQmlApplicationEngine> #include <QtQuick/QQuickItem> +#include <QSslSocket> +#include <QQmlContext> static bool parseArgs(QStringList& args, QVariantMap& parameters) { @@ -131,6 +133,7 @@ int main(int argc, char *argv[]) parameters[QStringLiteral("osm.useragent")] = QStringLiteral("QtLocation Mapviewer example"); QQmlApplicationEngine engine; + engine.rootContext()->setContextProperty("supportsSsl", QSslSocket::supportsSsl()); engine.addImportPath(QStringLiteral(":/imports")); engine.load(QUrl(QStringLiteral("qrc:///mapviewer.qml"))); QObject::connect(&engine, SIGNAL(quit()), qApp, SLOT(quit())); diff --git a/examples/location/mapviewer/mapviewer.qml b/examples/location/mapviewer/mapviewer.qml index e97076ab..e8b016aa 100644 --- a/examples/location/mapviewer/mapviewer.qml +++ b/examples/location/mapviewer/mapviewer.qml @@ -429,6 +429,19 @@ ApplicationWindow { focus: true initialItem: Item { id: page + + Text { + visible: !supportsSsl && map && map.activeMapType && activeMapType.metadata.isHTTPS + text: "The active map type\n +requires (missing) SSL\n +support" + horizontalAlignment: Text.AlignHCenter + font.pixelSize: appWindow.width / 12 + font.bold: true + color: "grey" + anchors.centerIn: parent + z: 12 + } } function showMessage(title,message,backPage) diff --git a/src/plugins/geoservices/mapboxgl/qgeomappingmanagerenginemapboxgl.cpp b/src/plugins/geoservices/mapboxgl/qgeomappingmanagerenginemapboxgl.cpp index d2463106..5cbde041 100644 --- a/src/plugins/geoservices/mapboxgl/qgeomappingmanagerenginemapboxgl.cpp +++ b/src/plugins/geoservices/mapboxgl/qgeomappingmanagerenginemapboxgl.cpp @@ -73,40 +73,43 @@ QGeoMappingManagerEngineMapboxGL::QGeoMappingManagerEngineMapboxGL(const QVarian m_useChinaEndpoint = parameters.value(QStringLiteral("mapboxgl.china")).toBool(); } + QVariantMap metadata; + metadata["isHTTPS"] = true; + if (m_useChinaEndpoint) { m_settings.setApiBaseUrl(QStringLiteral("https://api.mapbox.cn")); mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/streets-zh-v1"), - tr("China Streets"), false, false, ++mapId, pluginName, cameraCaps); + tr("China Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/light-zh-v1"), - tr("China Light"), false, false, ++mapId, pluginName, cameraCaps); + tr("China Light"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/dark-zh-v1"), - tr("China Dark"), false, false, ++mapId, pluginName, cameraCaps); + tr("China Dark"), false, false, ++mapId, pluginName, cameraCaps, metadata); } else { mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/streets-v10"), - tr("Streets"), false, false, ++mapId, pluginName, cameraCaps); + tr("Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/basic-v9"), - tr("Basic"), false, false, ++mapId, pluginName, cameraCaps); + tr("Basic"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/bright-v9"), - tr("Bright"), false, false, ++mapId, pluginName, cameraCaps); + tr("Bright"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::TerrainMap, QStringLiteral("mapbox://styles/mapbox/outdoors-v10"), - tr("Outdoors"), false, false, ++mapId, pluginName, cameraCaps); + tr("Outdoors"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, QStringLiteral("mapbox://styles/mapbox/satellite-v9"), - tr("Satellite"), false, false, ++mapId, pluginName, cameraCaps); + tr("Satellite"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::HybridMap, QStringLiteral("mapbox://styles/mapbox/satellite-streets-v10"), - tr("Satellite Streets"), false, false, ++mapId, pluginName, cameraCaps); + tr("Satellite Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/light-v9"), - tr("Light"), false, false, ++mapId, pluginName, cameraCaps); + tr("Light"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/dark-v9"), - tr("Dark"), false, false, ++mapId, pluginName, cameraCaps); + tr("Dark"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::TransitMap, QStringLiteral("mapbox://styles/mapbox/navigation-preview-day-v2"), - tr("Navigation Preview Day"), false, false, ++mapId, pluginName, cameraCaps); + tr("Navigation Preview Day"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::TransitMap, QStringLiteral("mapbox://styles/mapbox/navigation-preview-night-v2"), - tr("Navigation Preview Night"), false, true, ++mapId, pluginName, cameraCaps); + tr("Navigation Preview Night"), false, true, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::CarNavigationMap, QStringLiteral("mapbox://styles/mapbox/navigation-guidance-day-v2"), - tr("Navigation Guidance Day"), false, false, ++mapId, pluginName, cameraCaps); + tr("Navigation Guidance Day"), false, false, ++mapId, pluginName, cameraCaps, metadata); mapTypes << QGeoMapType(QGeoMapType::CarNavigationMap, QStringLiteral("mapbox://styles/mapbox/navigation-guidance-night-v2"), - tr("Navigation Guidance Night"), false, true, ++mapId, pluginName, cameraCaps); + tr("Navigation Guidance Night"), false, true, ++mapId, pluginName, cameraCaps, metadata); } if (parameters.contains(QStringLiteral("mapboxgl.mapping.additional_style_urls"))) { @@ -116,9 +119,13 @@ QGeoMappingManagerEngineMapboxGL::QGeoMappingManagerEngineMapboxGL(const QVarian for (auto it = idList.crbegin(), end = idList.crend(); it != end; ++it) { if ((*it).isEmpty()) continue; + if ((*it).startsWith(QStringLiteral("http:"))) + metadata["isHTTPS"] = false; + else + metadata["isHTTPS"] = true; mapTypes.prepend(QGeoMapType(QGeoMapType::CustomMap, *it, - tr("User provided style"), false, false, ++mapId, pluginName, cameraCaps)); + tr("User provided style"), false, false, ++mapId, pluginName, cameraCaps, metadata)); } } diff --git a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp index f7ab8c99..e0008068 100644 --- a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp +++ b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp @@ -45,6 +45,16 @@ QT_BEGIN_NAMESPACE static const int maxValidZoom = 30; static const QDateTime defaultTs = QDateTime::fromString(QStringLiteral("2016-06-01T00:00:00"), Qt::ISODate); +static void setSSL(QGeoMapType &mapType, bool isHTTPS) +{ + QVariantMap metadata = mapType.metadata(); + metadata["isHTTPS"] = isHTTPS; + + mapType = QGeoMapType(mapType.style(), mapType.name(), mapType.description(), mapType.mobile(), + mapType.night(), mapType.mapId(), mapType.pluginName(), mapType.cameraCapabilities(), + metadata); +} + QGeoTileProviderOsm::QGeoTileProviderOsm(QNetworkAccessManager *nm, const QGeoMapType &mapType, const QVector<TileProvider *> &providers, @@ -61,6 +71,9 @@ QGeoTileProviderOsm::QGeoTileProviderOsm(QNetworkAccessManager *nm, if (!m_provider || m_provider->isValid()) m_status = Resolved; + if (m_provider && m_provider->isValid()) + setSSL(m_mapType, m_provider->isHTTPS()); + connect(this, &QGeoTileProviderOsm::resolutionFinished, this, &QGeoTileProviderOsm::updateCameraCapabilities); } @@ -237,7 +250,11 @@ void QGeoTileProviderOsm::updateCameraCapabilities() m_cameraCapabilities.setMaximumZoomLevel(maximumZoomLevel()); m_mapType = QGeoMapType(m_mapType.style(), m_mapType.name(), m_mapType.description(), m_mapType.mobile(), - m_mapType.night(), m_mapType.mapId(), m_mapType.pluginName(), m_cameraCapabilities); + m_mapType.night(), m_mapType.mapId(), m_mapType.pluginName(), m_cameraCapabilities, + m_mapType.metadata()); + + if (m_provider && m_provider->isValid()) + setSSL(m_mapType, m_provider->isHTTPS()); } void QGeoTileProviderOsm::addProvider(TileProvider *provider) @@ -604,6 +621,11 @@ bool TileProvider::isHighDpi() const return m_highDpi; } +bool TileProvider::isHTTPS() const +{ + return m_urlTemplate.startsWith(QStringLiteral("https")); +} + void TileProvider::setStyleCopyRight(const QString ©right) { m_copyRightStyle = copyright; diff --git a/src/plugins/geoservices/osm/qgeotileproviderosm.h b/src/plugins/geoservices/osm/qgeotileproviderosm.h index 54f8049d..ab4e2294 100644 --- a/src/plugins/geoservices/osm/qgeotileproviderosm.h +++ b/src/plugins/geoservices/osm/qgeotileproviderosm.h @@ -93,6 +93,7 @@ public: inline int maximumZoomLevel() const; inline const QDateTime ×tamp() const; inline bool isHighDpi() const; + inline bool isHTTPS() const; QUrl tileAddress(int x, int y, int z) const; // Optional properties, not needed to construct a provider |