summaryrefslogtreecommitdiffstats
path: root/src/core/net
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2022-09-14 17:35:28 +0200
committerMichal Klocek <michal.klocek@qt.io>2022-10-11 09:54:46 +0000
commit555beb85735f8ce92fdbff7358a6659820e4819c (patch)
tree271530d99f35747b66263677b0d269bda0a00609 /src/core/net
parente995556338da4d381c457ddd978440f5099af496 (diff)
Support window system proxy resolver
So far we supported v8 proxy resolver and 'older' WinHttp based proxy resolver, which involves pulling (directly) WinHttpGetIEProxyConfigForCurrentUser and does not support (according to Chromium authors) Name Resolution Proxy Table. With 102 we are able to use windows system proxy resolver in form of 'modern' service using also WinHTTP APIs. This is going to replace later default old implementation. Add same switches as Chromium supports: * --winhttp-system-proxy-resolver to use older WinHttp resolver instead of v8 resolver (note v8 resolver does not work in single-process) * --use-system-proxy-resolver to use 'new' proxy system resolver service Note as new service requires minimum windows 10 1604 or later build, application needs correct manifest, otherwise it will silently fallback to older 'direct' WinHttp resolver. Note to test the 'new' proxy resolver, following pac file can be served to windows proxy configuration to prove that pac script is actually resolved: function FindProxyForURL(url,host) { if (dnsDomainIs(host, "qt.io")) return "DIRECT" return "PROXY localhost:6666" } Task-number: QTBUG-104436 Change-Id: Ib2625c5ab5e618c8fdebd1bdc1cda928639a5dd5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/net')
-rw-r--r--src/core/net/system_network_context_manager.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/core/net/system_network_context_manager.cpp b/src/core/net/system_network_context_manager.cpp
index ec936fd10..83e122aab 100644
--- a/src/core/net/system_network_context_manager.cpp
+++ b/src/core/net/system_network_context_manager.cpp
@@ -31,6 +31,7 @@
#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h"
#if BUILDFLAG(IS_WIN)
+#include "chrome/browser/net/chrome_mojo_proxy_resolver_win.h"
#include "components/os_crypt/os_crypt.h"
#include "content/public/common/network_service_util.h"
#endif
@@ -280,13 +281,20 @@ void SystemNetworkContextManager::ConfigureDefaultNetworkContextParams(network::
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
- if (command_line.HasSwitch(switches::kSingleProcess)) {
- LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode.";
- } else {
- network_context_params->proxy_resolver_factory =
- ChromeMojoProxyResolverFactory::CreateWithSelfOwnedReceiver();
+ if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) {
+ if (command_line.HasSwitch(switches::kSingleProcess)) {
+ LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode.";
+ } else {
+ network_context_params->proxy_resolver_factory =
+ ChromeMojoProxyResolverFactory::CreateWithSelfOwnedReceiver();
+ }
}
-
+#if BUILDFLAG(IS_WIN)
+ if (command_line.HasSwitch(switches::kUseSystemProxyResolver)) {
+ network_context_params->windows_system_proxy_resolver =
+ ChromeMojoProxyResolverWin::CreateWithSelfOwnedReceiver();
+ }
+#endif
// Use the SystemNetworkContextManager to populate and update SSL
// configuration. The SystemNetworkContextManager is owned by the
// BrowserProcess itself, so will only be destroyed on shutdown, at which