| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__ |
| #define CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__ |
| |
| #include <deque> |
| #include <string> |
| |
| #include <curl/curl.h> |
| #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| |
| #include "update_engine/dbus_interface.h" |
| #include "update_engine/proxy_resolver.h" |
| |
| namespace chromeos_update_engine { |
| |
| extern const char kSessionManagerService[]; |
| extern const char kSessionManagerPath[]; |
| extern const char kSessionManagerInterface[]; |
| extern const char kSessionManagerRetrievePropertyMethod[]; |
| extern const char kSessionManagerProxySettingsKey[]; |
| |
| // Class to resolve proxy for a url based on Chrome's proxy settings. |
| |
| // Currently only supports manual settings, not PAC files or autodetected |
| // settings. |
| |
| struct ChromeProxyResolverClosureArgs { |
| std::string url; |
| ProxiesResolvedFn callback; |
| void* data; |
| }; |
| |
| class ChromeProxyResolver : public ProxyResolver { |
| public: |
| explicit ChromeProxyResolver(DbusGlibInterface* dbus) : dbus_(dbus) {} |
| virtual ~ChromeProxyResolver() {} |
| |
| virtual bool GetProxiesForUrl(const std::string& url, |
| ProxiesResolvedFn callback, |
| void* data); |
| |
| // Get the curl proxy type for a given proxy url. Returns true on success. |
| // Note: if proxy is kNoProxy, this will return false. |
| static bool GetProxyType(const std::string& proxy, curl_proxytype* out_type); |
| |
| private: |
| FRIEND_TEST(ChromeProxyResolverTest, GetProxiesForUrlWithSettingsTest); |
| |
| // Closure callback, so we can pretend we need to wait on the main loop |
| // before returing proxies to the client. |
| void GetProxiesForUrlCallback(ChromeProxyResolverClosureArgs args); |
| |
| // Fetches a dbus proxy to session manager. Returns NULL on failure. |
| DBusGProxy* DbusProxy(); |
| |
| // Fetches the json-encoded proxy settings string from the session manager. |
| bool GetJsonProxySettings(DBusGProxy* proxy, std::string* out_json); |
| |
| // Given a |url| and the json encoded settings |json_settings|, |
| // returns the proper proxy servers in |out_proxies|. Returns true on |
| // success. |
| bool GetProxiesForUrlWithSettings(const std::string& url, |
| const std::string& json_settings, |
| std::deque<std::string>* out_proxies); |
| |
| DbusGlibInterface* dbus_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ChromeProxyResolver); |
| }; |
| |
| } // namespace chromeos_update_engine |
| |
| #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__ |