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 <edward.welbourne@qt.io>
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
Thiago Macieira 2017-07-20 10:55:20 -07:00 committed by Timur Pocheptsov
parent 2e3e8cec89
commit b91a6ef9cd
4 changed files with 32 additions and 161 deletions

View File

@ -396,29 +396,7 @@ bool QNetworkAccessBackend::start()
#endif #endif
#ifndef QT_NO_NETWORKPROXY #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<QString>(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())); reply->proxyList = manager->queryProxy(QNetworkProxyQuery(url()));
#endif
#endif #endif
// now start the request // now start the request

View File

@ -915,9 +915,6 @@ public:
QUrl remote; QUrl remote;
int localPort; int localPort;
QNetworkProxyQuery::QueryType type; QNetworkProxyQuery::QueryType type;
#ifndef QT_NO_BEARERMANAGEMENT
QNetworkConfiguration config;
#endif
}; };
template<> void QSharedDataPointer<QNetworkProxyQueryPrivate>::detach() template<> void QSharedDataPointer<QNetworkProxyQueryPrivate>::detach()
@ -1129,29 +1126,32 @@ QNetworkProxyQuery::QNetworkProxyQuery(quint16 bindPort, const QString &protocol
d->type = queryType; 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 Constructs a QNetworkProxyQuery with the URL \a requestUrl and
sets the query type to \a queryType. The specified \a networkConfiguration 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() \sa protocolTag(), peerHostName(), peerPort(), networkConfiguration()
*/ */
QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration,
const QUrl &requestUrl, QueryType queryType) const QUrl &requestUrl, QueryType queryType)
{ {
d->config = networkConfiguration; Q_UNUSED(networkConfiguration)
d->remote = requestUrl; d->remote = requestUrl;
d->type = queryType; d->type = queryType;
} }
/*! /*!
\deprecated
Constructs a QNetworkProxyQuery of type \a queryType and sets the Constructs a QNetworkProxyQuery of type \a queryType and sets the
protocol tag to be \a protocolTag. This constructor is suitable protocol tag to be \a protocolTag. This constructor is suitable
for QNetworkProxyQuery::TcpSocket queries, because it sets the for QNetworkProxyQuery::TcpSocket queries, because it sets the
peer hostname to \a hostname and the peer's port number to \a peer hostname to \a hostname and the peer's port number to \a
port. The specified \a networkConfiguration port. The specified \a networkConfiguration parameter is ignored.
is used to resolve the proxy settings.
\sa networkConfiguration() \sa networkConfiguration()
*/ */
@ -1160,7 +1160,7 @@ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfi
const QString &protocolTag, const QString &protocolTag,
QueryType queryType) QueryType queryType)
{ {
d->config = networkConfiguration; Q_UNUSED(networkConfiguration);
d->remote.setScheme(protocolTag); d->remote.setScheme(protocolTag);
d->remote.setHost(hostname); d->remote.setHost(hostname);
d->remote.setPort(port); d->remote.setPort(port);
@ -1168,11 +1168,13 @@ QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkConfiguration &networkConfi
} }
/*! /*!
\deprecated
Constructs a QNetworkProxyQuery of type \a queryType and sets the Constructs a QNetworkProxyQuery of type \a queryType and sets the
protocol tag to be \a protocolTag. This constructor is suitable protocol tag to be \a protocolTag. This constructor is suitable
for QNetworkProxyQuery::TcpSocket queries because it sets the for QNetworkProxyQuery::TcpSocket queries because it sets the
local port number to \a bindPort. The specified \a networkConfiguration 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 Note that \a bindPort is of type quint16 to indicate the exact
port number that is requested. The value of -1 (unknown) is not 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, quint16 bindPort, const QString &protocolTag,
QueryType queryType) QueryType queryType)
{ {
d->config = networkConfiguration; Q_UNUSED(networkConfiguration);
d->remote.setScheme(protocolTag); d->remote.setScheme(protocolTag);
d->localPort = bindPort; d->localPort = bindPort;
d->type = queryType; 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. Constructs a QNetworkProxyQuery object that is a copy of \a other.
@ -1413,34 +1415,32 @@ void QNetworkProxyQuery::setUrl(const QUrl &url)
d->remote = 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() \sa setNetworkConfiguration()
*/ */
QNetworkConfiguration QNetworkProxyQuery::networkConfiguration() const QNetworkConfiguration QNetworkProxyQuery::networkConfiguration() const
{ {
return d ? d->config : QNetworkConfiguration(); return QNetworkConfiguration();
} }
/*! /*!
Sets the network configuration component of this QNetworkProxyQuery \deprecated
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.
In the case of "user choice" or "service network" configurations, This function does nothing. The specified \a networkConfiguration parameter
you should first start the QNetworkSession and obtain the active is ignored.
configuration from its properties.
\sa networkConfiguration() \sa networkConfiguration()
*/ */
void QNetworkProxyQuery::setNetworkConfiguration(const QNetworkConfiguration &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 \class QNetworkProxyFactory

View File

@ -75,12 +75,15 @@ public:
QueryType queryType = TcpSocket); QueryType queryType = TcpSocket);
explicit QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), explicit QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(),
QueryType queryType = TcpServer); 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, QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration,
const QUrl &requestUrl, QueryType queryType = UrlRequest); const QUrl &requestUrl, QueryType queryType = UrlRequest);
Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated")
QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration,
const QString &hostname, int port, const QString &protocolTag = QString(), const QString &hostname, int port, const QString &protocolTag = QString(),
QueryType queryType = TcpSocket); QueryType queryType = TcpSocket);
Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated")
QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration,
quint16 bindPort, const QString &protocolTag = QString(), quint16 bindPort, const QString &protocolTag = QString(),
QueryType queryType = TcpServer); QueryType queryType = TcpServer);
@ -116,8 +119,10 @@ public:
QUrl url() const; QUrl url() const;
void setUrl(const QUrl &url); 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; QNetworkConfiguration networkConfiguration() const;
Q_DECL_DEPRECATED_X("QNetworkConfiguration support in QNetworkProxy is deprecated")
void setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration); void setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration);
#endif #endif

View File

@ -34,10 +34,8 @@
#include <qdebug.h> #include <qdebug.h>
#include <qnetworkproxy.h> #include <qnetworkproxy.h>
#include <QNetworkConfiguration>
#include <QNetworkConfigurationManager>
#include <QNetworkSession>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QNetworkInterface>
#include <QNetworkReply> #include <QNetworkReply>
#include <QNetworkRequest> #include <QNetworkRequest>
#include <QList> #include <QList>
@ -69,11 +67,6 @@ private slots:
void systemProxyForQuery_data(); void systemProxyForQuery_data();
void systemProxyForQuery() const; void systemProxyForQuery() const;
void systemProxyForQuery_local(); void systemProxyForQuery_local();
#ifndef QT_NO_BEARERMANAGEMENT
void fromConfigurations();
void inNetworkAccessManager_data();
void inNetworkAccessManager();
#endif
void genericSystemProxy(); void genericSystemProxy();
void genericSystemProxy_data(); void genericSystemProxy_data();
@ -251,111 +244,6 @@ void tst_QNetworkProxyFactory::systemProxyForQuery_local()
QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy)); 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<QNetworkProxy> 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<QNetworkConfiguration>("config");
QTest::addColumn<QList<QNetworkProxy> >("proxies");
QNetworkConfigurationManager manager;
//get from known configurations
foreach (QNetworkConfiguration config, manager.allConfigurations()) {
QNetworkProxyQuery query(config, QUrl(QString("http://qt-project.org")), QNetworkProxyQuery::UrlRequest);
QList<QNetworkProxy> 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<QNetworkProxy>, 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() << " <vs> ";
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) Q_DECLARE_METATYPE(QNetworkProxy::ProxyType)
void tst_QNetworkProxyFactory::genericSystemProxy() void tst_QNetworkProxyFactory::genericSystemProxy()