diff options
Diffstat (limited to 'net/proxy/proxy_config_service_win.cc')
-rw-r--r-- | net/proxy/proxy_config_service_win.cc | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/net/proxy/proxy_config_service_win.cc b/net/proxy/proxy_config_service_win.cc new file mode 100644 index 0000000..f356ac9 --- /dev/null +++ b/net/proxy/proxy_config_service_win.cc @@ -0,0 +1,58 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/proxy/proxy_config_service_win.h" + +#include <windows.h> +#include <winhttp.h> + +#include "base/string_tokenizer.h" +#include "net/base/net_errors.h" + +#pragma comment(lib, "winhttp.lib") + +namespace net { + +static void FreeConfig(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* config) { + if (config->lpszAutoConfigUrl) + GlobalFree(config->lpszAutoConfigUrl); + if (config->lpszProxy) + GlobalFree(config->lpszProxy); + if (config->lpszProxyBypass) + GlobalFree(config->lpszProxyBypass); +} + +int ProxyConfigServiceWin::GetProxyConfig(ProxyConfig* config) { + WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = {0}; + if (!WinHttpGetIEProxyConfigForCurrentUser(&ie_config)) { + LOG(ERROR) << "WinHttpGetIEProxyConfigForCurrentUser failed: " << + GetLastError(); + return ERR_FAILED; // TODO(darin): Bug 1189288: translate error code. + } + + if (ie_config.fAutoDetect) + config->auto_detect = true; + if (ie_config.lpszProxy) + config->proxy_server = WideToASCII(ie_config.lpszProxy); + if (ie_config.lpszProxyBypass) { + std::string proxy_bypass = WideToASCII(ie_config.lpszProxyBypass); + + StringTokenizer proxy_server_bypass_list(proxy_bypass, "; \t\n\r"); + while (proxy_server_bypass_list.GetNext()) { + std::string bypass_url_domain = proxy_server_bypass_list.token(); + if (bypass_url_domain == "<local>") + config->proxy_bypass_local_names = true; + else + config->proxy_bypass.push_back(bypass_url_domain); + } + } + if (ie_config.lpszAutoConfigUrl) + config->pac_url = GURL(ie_config.lpszAutoConfigUrl); + + FreeConfig(&ie_config); + return OK; +} + +} // namespace net + |