summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-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
4 files changed, 82 insertions, 77 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)