12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // Copyright 2020 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 "services/proxy_resolver_win/winhttp_proxy_resolver_functions.h"
- #include "base/no_destructor.h"
- namespace proxy_resolver_win {
- WinHttpProxyResolverFunctions::WinHttpProxyResolverFunctions() {
- HMODULE winhttp_module =
- LoadLibraryEx(L"winhttp.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
- if (winhttp_module) {
- create_proxy_resolver = reinterpret_cast<WinHttpCreateProxyResolverFunc>(
- ::GetProcAddress(winhttp_module, "WinHttpCreateProxyResolver"));
- get_proxy_for_url_ex = reinterpret_cast<WinHttpGetProxyForUrlExFunc>(
- ::GetProcAddress(winhttp_module, "WinHttpGetProxyForUrlEx"));
- get_proxy_result = reinterpret_cast<WinHttpGetProxyResultFunc>(
- ::GetProcAddress(winhttp_module, "WinHttpGetProxyResult"));
- free_proxy_result = reinterpret_cast<WinHttpFreeProxyResultFunc>(
- ::GetProcAddress(winhttp_module, "WinHttpFreeProxyResult"));
- }
- }
- // Never called due to base::NoDestructor.
- WinHttpProxyResolverFunctions::~WinHttpProxyResolverFunctions() = default;
- bool WinHttpProxyResolverFunctions::are_all_functions_loaded() const {
- return create_proxy_resolver && get_proxy_for_url_ex && get_proxy_result &&
- free_proxy_result;
- }
- // static
- const WinHttpProxyResolverFunctions&
- WinHttpProxyResolverFunctions::GetInstance() {
- // This is a singleton for performance reasons. This avoids having to load
- // proxy resolver functions multiple times.
- static base::NoDestructor<WinHttpProxyResolverFunctions> instance;
- return *instance;
- }
- } // namespace proxy_resolver_win
|