summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2023-09-04 09:40:41 +0200
committerMichal Klocek <michal.klocek@qt.io>2023-09-09 00:29:52 +0200
commit09e224c57c085457dbc5c2896aacb868a19c2ce6 (patch)
treeb1e8d0f05691937dceebdf69cfd6541ceacb390e
parent71a5993239354454c4f1c1428406022ae17eb32d (diff)
Update qwebengineglobalsettings api
Do comments from api review: * use static setDnsMode * use struct for mode and server templates * remove QObject * do not use QScopedPointer * use the namespace instead of the class Pick-to: 6.6 Change-Id: I766626330e4cc190a170fcd6b5e32b1f60ad675c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/core/api/qwebengineglobalsettings.cpp117
-rw-r--r--src/core/api/qwebengineglobalsettings.h35
-rw-r--r--src/core/api/qwebengineglobalsettings_p.h5
-rw-r--r--src/core/net/system_network_context_manager.cpp2
-rw-r--r--tests/auto/core/qwebengineglobalsettings/tst_qwebengineglobalsettings.cpp26
5 files changed, 95 insertions, 90 deletions
diff --git a/src/core/api/qwebengineglobalsettings.cpp b/src/core/api/qwebengineglobalsettings.cpp
index 0f2472c47..5eeff9fc5 100644
--- a/src/core/api/qwebengineglobalsettings.cpp
+++ b/src/core/api/qwebengineglobalsettings.cpp
@@ -15,82 +15,90 @@
QT_BEGIN_NAMESPACE
-ASSERT_ENUMS_MATCH(net::SecureDnsMode::kSecure, QWebEngineGlobalSettings::DnsMode::SecureOnly)
+ASSERT_ENUMS_MATCH(net::SecureDnsMode::kSecure, QWebEngineGlobalSettings::SecureDnsMode::SecureOnly)
ASSERT_ENUMS_MATCH(net::SecureDnsMode::kAutomatic,
- QWebEngineGlobalSettings::DnsMode::SecureWithFallback)
-ASSERT_ENUMS_MATCH(net::SecureDnsMode::kOff, QWebEngineGlobalSettings::DnsMode::SystemOnly)
+ QWebEngineGlobalSettings::SecureDnsMode::SecureWithFallback)
+ASSERT_ENUMS_MATCH(net::SecureDnsMode::kOff, QWebEngineGlobalSettings::SecureDnsMode::SystemOnly)
/*!
- \class QWebEngineGlobalSettings
- \brief The QWebEngineGlobalSettings class configures global properties of the web engine.
+ \namespace QWebEngineGlobalSettings
+ \brief The QWebEngineGlobalSettings namespace holds global settings of the web engine.
\since 6.6
\inmodule QtWebEngineCore
- The QWebEngineGlobalSettings class is a singleton that configures global properties
- of the web engine.
+ The QWebEngineGlobalSettings namespace holds global properties of the web engine.
- Invoke setDnsMode() and setDnsServerTemplates() to configure DNS-over-HTTPS.
+ Invoke setDnsMode() to configure DNS-over-HTTPS.
- \sa QWebEngineGlobalSettings::setDnsMode(), QWebEngineGlobalSettings::setDnsServerTemplates()
+ \sa QWebEngineGlobalSettings::setDnsMode()
*/
-QWebEngineGlobalSettings::QWebEngineGlobalSettings(QObject *p)
- : QObject(p), d_ptr(new QWebEngineGlobalSettingsPrivate)
-{
-}
+/*!
+ \enum QWebEngineGlobalSettings::SecureDnsMode
-QWebEngineGlobalSettings::~QWebEngineGlobalSettings() { }
+ This enum sets the DNS-over-HTTPS mode used by the DnsMode structure:
+
+ \value SystemOnly This is the default. Use the system DNS host resolution.
+ \value SecureWithFallback Enable DNS-over-HTTPS (DoH). DoH servers have to be
+ provided through \l {QWebEngineGlobalSettings::DnsMode::serverTemplates}{serverTemplates} in
+ the DnsMode structure. If a host cannot be resolved via the provided servers,
+ the system DNS host resolution is used.
+ \value SecureOnly Enable DNS-over-HTTPS and only allow hosts to be resolved
+ this way. DoH servers have to be provided through
+ \l {QWebEngineGlobalSettings::DnsMode::serverTemplates}{serverTemplates} in the DnsMode
+ structure. If the DNS-over-HTTPS resolution fails, there is no fallback and the DNS host
+ resolution fails completely.
+*/
/*!
- \fn QWebEngineGlobalSettings *QWebEngineGlobalSettings::GetInstance()
+ \class QWebEngineGlobalSettings::DnsMode
+ \brief The DnsMode struct provides means to specify the DNS host resolution mode.
+ \since 6.6
+ \inmodule QtWebEngineCore
- Gets the global instance of QWebEngineGlobalSettings.
+ The QWebEngineGlobalSettings::DnsMode structure describes the DNS mode and
+ the associated DNS server template used for the DNS host resolution.
*/
-QWebEngineGlobalSettings *QWebEngineGlobalSettings::instance()
-{
- static QWebEngineGlobalSettings settings;
- return &settings;
-}
/*!
- \enum QWebEngineGlobalSettings::DnsMode
+ \variable QWebEngineGlobalSettings::DnsMode::secureMode
+ \brief The DNS mode used for the host resolution.
- This enum sets the DNS-over-HTTPS mode:
+ Set \a secureMode to SecureDnsMode::SecureOnly to only allow DNS-over-HTTPS host resolution
+ using servers from \a serverTemplates.
- \value SystemOnly This is the default. Use the system DNS host resolution.
- \value SecureWithFallback Enable DNS-over-HTTPS (DoH). DoH servers have to be
- provided through QWebEngineGlobalSettings::setDnsServerTemplates(). If a host can't be resolved
- via the provided servers, the system DNS host resolution is used.
- \value SecureOnly Enable DNS-over-HTTPS and only allow hosts to be resolved this way.
- DoH servers have to be provided through QWebEngineGlobalSettings::setDnsServerTemplates().
- If the DNS-over-HTTPS resolution fails, there is no fallback and DNS host resolution
- fails completely.
+ Set \a secureMode to SecureDnsMode::SecureWithFallback to enable DNS-over-HTTPS host resolution
+ using servers from \a serverTemplates, with a fallback to the system DNS.
+
+ \sa QWebEngineGlobalSettings::SecureDnsMode
*/
/*!
- \fn void QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode, const QStringList
- &dnsServerTemplates)
+ \variable QWebEngineGlobalSettings::DnsMode::serverTemplates
+ \brief A list of server URI templates used for secure DNS-over-HTTPS host resolution.
- Set \a dnsMode to DnsMode::SystemOnly to use the system DNS resolution.
-
- Set \a dnsMode to DnsMode::SecureOnly to only allow DNS-over-HTTPS host resolution using servers
- from \a dnsServerTemplates.
+ The \c serverTemplates structure member lists
+ \l{https://datatracker.ietf.org/d7oc/html/rfc6570}{URI templates}.
+ An example of a URI template is https://dns.google/dns-query{?dns}.
+*/
- Set \a dnsMode to DnsMode::SecureWithFallback to enable DNS-over-HTTPS host resolution using
- servers from \a dnsServerTemplates,with a fallback to the system DNS.
+/*!
+ \fn void QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode)
- A list \a dnsServerTemplates is a list of \l{https://datatracker.ietf.org/d7oc/html/rfc6570}{URI
- templates}. One example URI template is https://dns.google/dns-query{?dns}.
+ Sets \a dnsMode for DNS-over-HTTPS host resolution.
- This function returns \c false if the \a dnsServerTemplates list is empty or contains URI
- templates that cannot be parsed for DnsMode::SecureOnly or DnsMode::SecureWithFallback.
- Otherwise, it returns \c true meaning the DNS mode change is triggered.
+ This function returns \c false if the \l {QWebEngineGlobalSettings::DnsMode::serverTemplates}
+ {serverTemplates} list in the \l {QWebEngineGlobalSettings::DnsMode}{DnsMode} structure is empty
+ or contains URI templates that cannot be parsed for SecureDnsMode::SecureOnly or
+ SecureDnsMode::SecureWithFallback. Otherwise, it returns \c true meaning that the DNS mode
+ change is triggered.
*/
-bool QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode, const QStringList &dnsServerTemplates)
+
+bool QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode)
{
- Q_D(QWebEngineGlobalSettings);
- if (dnsMode != DnsMode::SystemOnly) {
- const QString servers = dnsServerTemplates.join(QChar::Space);
+ QWebEngineGlobalSettingsPrivate *d = QWebEngineGlobalSettingsPrivate::instance();
+ if (dnsMode.secureMode != SecureDnsMode::SystemOnly) {
+ const QString servers = dnsMode.serverTemplates.join(QChar::Space);
const std::string templates = servers.toStdString();
absl::optional<net::DnsOverHttpsConfig> dnsOverHttpsConfig =
net::DnsOverHttpsConfig::FromString(templates);
@@ -98,7 +106,7 @@ bool QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode, const QStringList &dn
return false;
d->dnsOverHttpsTemplates = templates;
}
- d->dnsMode = dnsMode;
+ d->dnsMode = dnsMode.secureMode;
d->configureStubHostResolver();
return true;
}
@@ -106,6 +114,12 @@ bool QWebEngineGlobalSettings::setDnsMode(DnsMode dnsMode, const QStringList &dn
/*!
\internal
*/
+QWebEngineGlobalSettingsPrivate *QWebEngineGlobalSettingsPrivate::instance()
+{
+ static QWebEngineGlobalSettingsPrivate settings;
+ return &settings;
+}
+
void QWebEngineGlobalSettingsPrivate::configureStubHostResolver()
{
if (content::GetNetworkServiceAvailability()
@@ -113,8 +127,9 @@ void QWebEngineGlobalSettingsPrivate::configureStubHostResolver()
network::mojom::NetworkService *networkService = content::GetNetworkService();
if (networkService) {
qDebug() << "doh set to" << dnsOverHttpsTemplates << " -- "
- << (dnsMode == QWebEngineGlobalSettings::DnsMode::SecureOnly ? "SecureOnly"
- : dnsMode == QWebEngineGlobalSettings::DnsMode::SystemOnly
+ << (dnsMode == QWebEngineGlobalSettings::SecureDnsMode::SecureOnly
+ ? "SecureOnly"
+ : dnsMode == QWebEngineGlobalSettings::SecureDnsMode::SystemOnly
? "SystemOnly"
: "SecureWithFallback");
absl::optional<net::DnsOverHttpsConfig> dohConfig = dnsOverHttpsTemplates.empty()
diff --git a/src/core/api/qwebengineglobalsettings.h b/src/core/api/qwebengineglobalsettings.h
index deef5941f..a9eff6d12 100644
--- a/src/core/api/qwebengineglobalsettings.h
+++ b/src/core/api/qwebengineglobalsettings.h
@@ -4,37 +4,26 @@
#ifndef QWEBENGINEGLOBALSETTINGS_H
#define QWEBENGINEGLOBALSETTINGS_H
+#if 0
+#pragma qt_class(QWebEngineGlobalSettings)
+#endif
+
#include <QtWebEngineCore/qtwebenginecoreglobal.h>
#include <QtCore/QObject>
#include <QtCore/QScopedPointer>
-namespace QtWebEngineCore {
-class SystemNetworkContextManager;
-}
-
QT_BEGIN_NAMESPACE
-class QWebEngineGlobalSettingsPrivate;
-
-class Q_WEBENGINECORE_EXPORT QWebEngineGlobalSettings : public QObject
+namespace QWebEngineGlobalSettings {
+// Mapping net::SecureDnsMode
+enum class SecureDnsMode : quint8 { SystemOnly = 0, SecureWithFallback = 1, SecureOnly = 2 };
+struct DnsMode
{
- Q_OBJECT
-public:
- static QWebEngineGlobalSettings *instance();
-
- // Mapping net::SecureDnsMode
- enum class DnsMode : quint8 { SystemOnly = 0, SecureWithFallback = 1, SecureOnly = 2 };
- bool setDnsMode(DnsMode dnsMode, const QStringList &dnsServerTemplates);
-
-private:
- QWebEngineGlobalSettings(QObject *p = nullptr);
- ~QWebEngineGlobalSettings() override;
-
- friend class QtWebEngineCore::SystemNetworkContextManager;
- Q_DECLARE_PRIVATE(QWebEngineGlobalSettings)
- // can't re-use base d_ptr: need to maintain compat with last Qt LTS
- QScopedPointer<QWebEngineGlobalSettingsPrivate> d_ptr;
+ SecureDnsMode secureMode = SecureDnsMode::SystemOnly;
+ QStringList serverTemplates;
};
+Q_WEBENGINECORE_EXPORT bool setDnsMode(DnsMode dnsMode);
+}
QT_END_NAMESPACE
diff --git a/src/core/api/qwebengineglobalsettings_p.h b/src/core/api/qwebengineglobalsettings_p.h
index 412697c0f..10ae502f0 100644
--- a/src/core/api/qwebengineglobalsettings_p.h
+++ b/src/core/api/qwebengineglobalsettings_p.h
@@ -25,12 +25,13 @@ class Q_WEBENGINECORE_PRIVATE_EXPORT QWebEngineGlobalSettingsPrivate
{
public:
QWebEngineGlobalSettingsPrivate()
- : dnsMode(QWebEngineGlobalSettings::DnsMode::SystemOnly)
+ : dnsMode(QWebEngineGlobalSettings::SecureDnsMode::SystemOnly)
, dnsOverHttpsTemplates("")
, insecureDnsClientEnabled(false)
, additionalInsecureDnsTypesEnabled(false){};
- QWebEngineGlobalSettings::DnsMode dnsMode;
+ static QWebEngineGlobalSettingsPrivate *instance();
+ QWebEngineGlobalSettings::SecureDnsMode dnsMode;
std::string dnsOverHttpsTemplates;
const bool insecureDnsClientEnabled;
const bool additionalInsecureDnsTypesEnabled;
diff --git a/src/core/net/system_network_context_manager.cpp b/src/core/net/system_network_context_manager.cpp
index ed676fcbc..65b5d9c97 100644
--- a/src/core/net/system_network_context_manager.cpp
+++ b/src/core/net/system_network_context_manager.cpp
@@ -265,7 +265,7 @@ void SystemNetworkContextManager::OnNetworkServiceCreated(network::mojom::Networ
// resolver of the network service here, each time it is instantiated, with our global
// DNS-Over-HTTPS settings. This ensures that the global settings don't get lost
// on reinstantiation and are in effect upon initial instantiation.
- QWebEngineGlobalSettings::instance()->d_ptr->configureStubHostResolver();
+ QWebEngineGlobalSettingsPrivate::instance()->configureStubHostResolver();
}
void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams(network::mojom::NetworkContextParams *network_context_params)
diff --git a/tests/auto/core/qwebengineglobalsettings/tst_qwebengineglobalsettings.cpp b/tests/auto/core/qwebengineglobalsettings/tst_qwebengineglobalsettings.cpp
index e3986674f..0af85a711 100644
--- a/tests/auto/core/qwebengineglobalsettings/tst_qwebengineglobalsettings.cpp
+++ b/tests/auto/core/qwebengineglobalsettings/tst_qwebengineglobalsettings.cpp
@@ -34,23 +34,23 @@ Q_LOGGING_CATEGORY(lc, "qt.webengine.tests")
void tst_QWebEngineGlobalSettings::dnsOverHttps_data()
{
- QTest::addColumn<QWebEngineGlobalSettings::DnsMode>("dnsMode");
+ QTest::addColumn<QWebEngineGlobalSettings::SecureDnsMode>("dnsMode");
QTest::addColumn<QString>("uriTemplate");
QTest::addColumn<bool>("isMockDnsServerCalledExpected");
QTest::addColumn<bool>("isDnsResolutionSuccessExpected");
QTest::addColumn<bool>("isConfigurationSuccessExpected");
QTest::newRow("DnsMode::SystemOnly (no DoH server)")
- << QWebEngineGlobalSettings::DnsMode::SystemOnly << QStringLiteral("") << false << true
- << true;
+ << QWebEngineGlobalSettings::SecureDnsMode::SystemOnly << QStringLiteral("") << false
+ << true << true;
QTest::newRow("DnsMode::SecureOnly (mock DoH server)")
- << QWebEngineGlobalSettings::DnsMode::SecureOnly
+ << QWebEngineGlobalSettings::SecureDnsMode::SecureOnly
<< QStringLiteral("https://127.0.0.1:3000/dns-query{?dns}") << true << false << true;
QTest::newRow("DnsMode::SecureOnly (real DoH server)")
- << QWebEngineGlobalSettings::DnsMode::SecureOnly
+ << QWebEngineGlobalSettings::SecureDnsMode::SecureOnly
<< QStringLiteral("https://dns.google/dns-query{?dns}") << false << true << true;
QTest::newRow("DnsMode::SecureOnly (Empty URI Templates)")
- << QWebEngineGlobalSettings::DnsMode::SecureOnly << QStringLiteral("") << false << false
- << false;
+ << QWebEngineGlobalSettings::SecureDnsMode::SecureOnly << QStringLiteral("") << false
+ << false << false;
// Note: In the following test, we can't verify that the DoH server is called first and
// afterwards insecure DNS is tried, because for the DoH server to ever be used when the DNS
// mode is set to DnsMode::WithFallback, Chromium starts an asynchronous DoH server DnsProbe and
@@ -59,16 +59,16 @@ void tst_QWebEngineGlobalSettings::dnsOverHttps_data()
// non-self-signed certificates are used for correct encryption. Instead of implementing
// all of that, this test verifies that Chromium tries probing the configured DoH server only.
QTest::newRow("DnsMode::SecureWithFallback (mock DoH server)")
- << QWebEngineGlobalSettings::DnsMode::SecureWithFallback
+ << QWebEngineGlobalSettings::SecureDnsMode::SecureWithFallback
<< QStringLiteral("https://127.0.0.1:3000/dns-query{?dns}") << true << true << true;
QTest::newRow("DnsMode::SecureWithFallback (Empty URI Templates)")
- << QWebEngineGlobalSettings::DnsMode::SecureWithFallback << QStringLiteral("") << false
- << false << false;
+ << QWebEngineGlobalSettings::SecureDnsMode::SecureWithFallback << QStringLiteral("")
+ << false << false << false;
}
void tst_QWebEngineGlobalSettings::dnsOverHttps()
{
- QFETCH(QWebEngineGlobalSettings::DnsMode, dnsMode);
+ QFETCH(QWebEngineGlobalSettings::SecureDnsMode, dnsMode);
QFETCH(QString, uriTemplate);
QFETCH(bool, isMockDnsServerCalledExpected);
QFETCH(bool, isDnsResolutionSuccessExpected);
@@ -76,8 +76,8 @@ void tst_QWebEngineGlobalSettings::dnsOverHttps()
bool isMockDnsServerCalled = false;
bool isLoadSuccessful = false;
- QWebEngineGlobalSettings *globalSettings = QWebEngineGlobalSettings::instance();
- bool configurationSuccess = globalSettings->setDnsMode(dnsMode, QStringList() << uriTemplate);
+ bool configurationSuccess =
+ QWebEngineGlobalSettings::setDnsMode({ dnsMode, QStringList{ uriTemplate } });
QCOMPARE(configurationSuccess, isConfigurationSuccessExpected);
if (!configurationSuccess) {