blob: 796f8fbd15aa9b8ec34f96191e7416bf5428e17c [file] [log] [blame]
Andrew de los Reyes9cd120d2010-11-18 17:50:03 -08001// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__
6#define CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__
7
8#include <string>
9#include <vector>
10
11#include <curl/curl.h>
12#include <gtest/gtest_prod.h> // for FRIEND_TEST
13
14#include "update_engine/dbus_interface.h"
15#include "update_engine/proxy_resolver.h"
16
17namespace chromeos_update_engine {
18
19extern const char kSessionManagerService[];
20extern const char kSessionManagerPath[];
21extern const char kSessionManagerInterface[];
22extern const char kSessionManagerRetrievePropertyMethod[];
23extern const char kSessionManagerProxySettingsKey[];
24
25// Class to resolve proxy for a url based on Chrome's proxy settings.
26
27// Currently only supports manual settings, not PAC files or autodetected
28// settings.
29
30class ChromeProxyResolver : public ProxyResolver {
31 public:
32 explicit ChromeProxyResolver(DbusGlibInterface* dbus) : dbus_(dbus) {}
33 virtual ~ChromeProxyResolver() {}
34
35 virtual bool GetProxiesForUrl(const std::string& url,
36 std::vector<std::string>* out_proxies);
37
38 // Get the curl proxy type for a given proxy url. Returns true on success.
39 // Note: if proxy is kNoProxy, this will return false.
40 static bool GetProxyType(const std::string& proxy,
41 curl_proxytype* out_type);
42
43 private:
44 FRIEND_TEST(ChromeProxyResolverTest, GetProxiesForUrlWithSettingsTest);
45
46 // Fetches a dbus proxy to session manager. Returns NULL on failure.
47 DBusGProxy* DbusProxy();
48
49 // Fetches the json-encoded proxy settings string from the session manager.
50 bool GetJsonProxySettings(DBusGProxy* proxy, std::string* out_json);
51
52 // Given a |url| and the json encoded settings |json_settings|,
53 // returns the proper proxy servers in |out_proxies|. Returns true on
54 // success.
55 bool GetProxiesForUrlWithSettings(const std::string& url,
56 const std::string& json_settings,
57 std::vector<std::string>* out_proxies);
58
59 DbusGlibInterface* dbus_;
60
61 DISALLOW_COPY_AND_ASSIGN(ChromeProxyResolver);
62};
63
64} // namespace chromeos_update_engine
65
66#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_CHROME_PROXY_RESOLVER_H__