From b91a6ef9cd687cd2b1a72f32fa23bf5930caed58 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 20 Jul 2017 10:55:20 -0700 Subject: [PATCH] Deprecate and remove the unused bearer support in QNetworkProxy This hasn't done anything since at least Qt 5.0. It's possible it was only used in Symbian, which we removed before the 5.0 release. This only served to make the tst_QNetworkProxyFactory test slow. [ChangeLog][QtNetwork][QNetworkProxy] The functions related to QNetworkConfiguration are deprecated. They've performed no action since Qt 5.0, so code using them can safely stop doing so. Change-Id: I84e45059a888497fb55ffffd14d31b7c2978a04e Reviewed-by: Edward Welbourne Reviewed-by: Jesus Fernandez Reviewed-by: Timur Pocheptsov Reviewed-by: Alex Blasche --- src/network/access/qnetworkaccessbackend.cpp | 22 ---- src/network/kernel/qnetworkproxy.cpp | 48 ++++---- src/network/kernel/qnetworkproxy.h | 9 +- .../tst_qnetworkproxyfactory.cpp | 114 +----------------- 4 files changed, 32 insertions(+), 161 deletions(-) diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 9c223dd32f..272dd22097 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -396,29 +396,7 @@ bool QNetworkAccessBackend::start() #endif #ifndef QT_NO_NETWORKPROXY -#ifndef QT_NO_BEARERMANAGEMENT - // Get the proxy settings from the network session (in the case of service networks, - // the proxy settings change depending which AP was activated) - QNetworkSession *session = networkSession.data(); - QNetworkConfiguration config; - if (session) { - QNetworkConfigurationManager configManager; - // The active configuration tells us what IAP is in use - QVariant v = session->sessionProperty(QLatin1String("ActiveConfiguration")); - if (v.isValid()) - config = configManager.configurationFromIdentifier(qvariant_cast(v)); - // Fallback to using the configuration if no active configuration - if (!config.isValid()) - config = session->configuration(); - // or unspecified configuration if that is no good either - if (!config.isValid()) - config = QNetworkConfiguration(); - } - reply->proxyList = manager->queryProxy(QNetworkProxyQuery(config, url())); -#else // QT_NO_BEARERMANAGEMENT - // Without bearer management, the proxy depends only on the url reply->proxyList = manager->queryProxy(QNetworkProxyQuery(url())); -#endif #endif // now start the request diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 11e8fa6264..37f3f84653 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -915,9 +915,6 @@ public: QUrl remote; int localPort; QNetworkProxyQuery::QueryType type; -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfiguration config; -#endif }; template<> void QSharedDataPointer::detach() @@ -1129,29 +1126,32 @@ QNetworkProxyQuery::QNetworkProxyQuery(quint16 bindPort, const QString &protocol d->type = queryType; } -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) /*! + \deprecated + Constructs a QNetworkProxyQuery with the URL \a requestUrl and sets the query type to \a queryType. The specified \a networkConfiguration - is used to resolve the proxy settings. + parameter is ignored. \sa protocolTag(), peerHostName(), peerPort(), networkConfiguration() */ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QUrl &requestUrl, QueryType queryType) { - d->config = networkConfiguration; + Q_UNUSED(networkConfiguration) d->remote = requestUrl; d->type = queryType; } /*! + \deprecated + Constructs a QNetworkProxyQuery of type \a queryType and sets the protocol tag to be \a protocolTag. This constructor is suitable for QNetworkProxyQuery::TcpSocket queries, because it sets the peer hostname to \a hostname and the peer's port number to \a - port. The specified \a networkConfiguration - is used to resolve the proxy settings. + port. The specified \a networkConfiguration parameter is ignored. \sa networkConfiguration() */ @@ -1160,7 +1160,7 @@ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfi const QString &protocolTag, QueryType queryType) { - d->config = networkConfiguration; + Q_UNUSED(networkConfiguration); d->remote.setScheme(protocolTag); d->remote.setHost(hostname); d->remote.setPort(port); @@ -1168,11 +1168,13 @@ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfi } /*! + \deprecated + Constructs a QNetworkProxyQuery of type \a queryType and sets the protocol tag to be \a protocolTag. This constructor is suitable for QNetworkProxyQuery::TcpSocket queries because it sets the local port number to \a bindPort. The specified \a networkConfiguration - is used to resolve the proxy settings. + parameter is ignored. Note that \a bindPort is of type quint16 to indicate the exact port number that is requested. The value of -1 (unknown) is not @@ -1184,12 +1186,12 @@ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfi quint16 bindPort, const QString &protocolTag, QueryType queryType) { - d->config = networkConfiguration; + Q_UNUSED(networkConfiguration); d->remote.setScheme(protocolTag); d->localPort = bindPort; d->type = queryType; } -#endif +#endif // !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) /*! Constructs a QNetworkProxyQuery object that is a copy of \a other. @@ -1413,34 +1415,32 @@ void QNetworkProxyQuery::setUrl(const QUrl &url) d->remote = url; } -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) /*! - Returns the network configuration component of the query. + \deprecated + + Returns QNetworkConfiguration(). \sa setNetworkConfiguration() */ QNetworkConfiguration QNetworkProxyQuery::networkConfiguration() const { - return d ? d->config : QNetworkConfiguration(); + return QNetworkConfiguration(); } /*! - Sets the network configuration component of this QNetworkProxyQuery - object to be \a networkConfiguration. The network configuration can - be used to return different proxy settings based on the network in - use, for example WLAN vs cellular networks on a mobile phone. + \deprecated - In the case of "user choice" or "service network" configurations, - you should first start the QNetworkSession and obtain the active - configuration from its properties. + This function does nothing. The specified \a networkConfiguration parameter + is ignored. \sa networkConfiguration() */ void QNetworkProxyQuery::setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration) { - d->config = networkConfiguration; + Q_UNUSED(networkConfiguration); } -#endif +#endif // !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) /*! \class QNetworkProxyFactory diff --git a/src/network/kernel/qnetworkproxy.h b/src/network/kernel/qnetworkproxy.h index 8699c313e9..7e3e6906a8 100644 --- a/src/network/kernel/qnetworkproxy.h +++ b/src/network/kernel/qnetworkproxy.h @@ -75,12 +75,15 @@ public: QueryType queryType = TcpSocket); explicit QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), QueryType queryType = TcpServer); -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) + Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated") QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QUrl &requestUrl, QueryType queryType = UrlRequest); + Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated") QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QString &hostname, int port, const QString &protocolTag = QString(), QueryType queryType = TcpSocket); + Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated") QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, quint16 bindPort, const QString &protocolTag = QString(), QueryType queryType = TcpServer); @@ -116,8 +119,10 @@ public: QUrl url() const; void setUrl(const QUrl &url); -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && QT_DEPRECATED_SINCE(5, 10) + Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated") QNetworkConfiguration networkConfiguration() const; + Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated") void setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration); #endif diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp index 4f947a5738..81d598641b 100644 --- a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp +++ b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp @@ -34,10 +34,8 @@ #include #include -#include -#include -#include #include +#include #include #include #include @@ -69,11 +67,6 @@ private slots: void systemProxyForQuery_data(); void systemProxyForQuery() const; void systemProxyForQuery_local(); -#ifndef QT_NO_BEARERMANAGEMENT - void fromConfigurations(); - void inNetworkAccessManager_data(); - void inNetworkAccessManager(); -#endif void genericSystemProxy(); void genericSystemProxy_data(); @@ -251,111 +244,6 @@ void tst_QNetworkProxyFactory::systemProxyForQuery_local() QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy)); } -#ifndef QT_NO_BEARERMANAGEMENT - -//Purpose of this test is just to check systemProxyForQuery doesn't hang or crash -//with any given configuration including no configuration. -//We can't test it returns the right proxies without implementing the native proxy code -//again here, which would be testing our implementation against itself. -//Therefore it's just testing that something valid is returned (at least a NoProxy entry) -void tst_QNetworkProxyFactory::fromConfigurations() -{ - QNetworkConfigurationManager manager; - QList proxies; - QUrl url(QLatin1String("http://qt-project.org")); - //get from known configurations - foreach (QNetworkConfiguration config, manager.allConfigurations()) { - QNetworkProxyQuery query(config, url, QNetworkProxyQuery::UrlRequest); - proxies = QNetworkProxyFactory::systemProxyForQuery(query); - QVERIFY(!proxies.isEmpty()); - foreach (QNetworkProxy proxy, proxies) { - qDebug() << config.name() << " - " << config.identifier() << " - " << formatProxyName(proxy); - } - } - - //get from default configuration - QNetworkProxyQuery defaultquery(url, QNetworkProxyQuery::UrlRequest); - proxies = QNetworkProxyFactory::systemProxyForQuery(defaultquery); - QVERIFY(!proxies.isEmpty()); - foreach (QNetworkProxy proxy, proxies) { - qDebug() << "default - " << formatProxyName(proxy); - } - - //get from active configuration - QNetworkSession session(manager.defaultConfiguration()); - session.open(); - QVERIFY(session.waitForOpened(30000)); - proxies = QNetworkProxyFactory::systemProxyForQuery(defaultquery); - QVERIFY(!proxies.isEmpty()); - foreach (QNetworkProxy proxy, proxies) { - qDebug() << "active - " << formatProxyName(proxy); - } - - //get from known configurations while there is one active - foreach (QNetworkConfiguration config, manager.allConfigurations()) { - QNetworkProxyQuery query(config, url, QNetworkProxyQuery::UrlRequest); - proxies = QNetworkProxyFactory::systemProxyForQuery(query); - QVERIFY(!proxies.isEmpty()); - foreach (QNetworkProxy proxy, proxies) { - qDebug() << config.name() << " - " << config.identifier() << " - " << formatProxyName(proxy); - } - } -} - -void tst_QNetworkProxyFactory::inNetworkAccessManager_data() -{ - QTest::addColumn("config"); - QTest::addColumn >("proxies"); - QNetworkConfigurationManager manager; - //get from known configurations - foreach (QNetworkConfiguration config, manager.allConfigurations()) { - QNetworkProxyQuery query(config, QUrl(QString("http://qt-project.org")), QNetworkProxyQuery::UrlRequest); - QList proxies = QNetworkProxyFactory::systemProxyForQuery(query); - QTest::newRow(config.name().toUtf8()) << config << proxies; - } -} - -//Purpose of this test is to check that QNetworkAccessManager uses the proxy from the configuration it -//has been given. Needs two or more working configurations to be a good test. -void tst_QNetworkProxyFactory::inNetworkAccessManager() -{ - QFETCH(QNetworkConfiguration, config); - QFETCH(QList, proxies); - - int count = QDebugProxyFactory::requestCounter; - - QNetworkAccessManager manager; - manager.setConfiguration(config); - - //using an internet server, because cellular APs won't have a route to the test server. - QNetworkRequest req(QUrl(QString("http://qt-project.org"))); - QNetworkReply *reply = manager.get(req); - connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - QTestEventLoop::instance().enterLoop(30); - delete reply; - - if (count == QDebugProxyFactory::requestCounter) { - //RND phones are preconfigured with several test access points which won't work without a matching SIM - //If the network fails to start, QNAM won't ask the factory for proxies so we can't test. - QSKIP("network configuration didn't start"); - } - QVERIFY(factory); - - qDebug() << "testing network configuration for" << config.name(); - foreach (QNetworkProxy proxy, factory->returnedList) { - qDebug() << formatProxyName(proxy); - } - qDebug() << " "; - foreach (QNetworkProxy proxy, proxies) { - qDebug() << formatProxyName(proxy); - } - if (config.type() != QNetworkConfiguration::InternetAccessPoint) - QEXPECT_FAIL("","QNetworkProxyFactory::systemProxyForQuery doesn't work for service networks yet", Continue); - QCOMPARE(factory->returnedList, proxies); -} - -#endif //QT_NO_BEARERMANAGEMENT - Q_DECLARE_METATYPE(QNetworkProxy::ProxyType) void tst_QNetworkProxyFactory::genericSystemProxy()