OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ | 5 #ifndef NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ |
6 #define NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ | 6 #define NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/linux_util.h" |
12 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
13 #include "base/ref_counted.h" | 14 #include "base/ref_counted.h" |
14 #include "base/scoped_ptr.h" | 15 #include "base/scoped_ptr.h" |
15 #include "net/proxy/proxy_config.h" | 16 #include "net/proxy/proxy_config.h" |
16 #include "net/proxy/proxy_config_service.h" | 17 #include "net/proxy/proxy_config_service.h" |
17 #include "net/proxy/proxy_server.h" | 18 #include "net/proxy/proxy_server.h" |
18 | 19 |
19 namespace net { | 20 namespace net { |
20 | 21 |
21 // Implementation of ProxyConfigService that retrieves the system proxy | 22 // Implementation of ProxyConfigService that retrieves the system proxy |
22 // settings from environment variables or gconf. | 23 // settings from environment variables or gconf. |
23 class ProxyConfigServiceLinux : public ProxyConfigService { | 24 class ProxyConfigServiceLinux : public ProxyConfigService { |
24 public: | 25 public: |
25 | 26 |
26 // These are used to derive mocks for unittests. | |
27 class EnvironmentVariableGetter { | |
28 public: | |
29 virtual ~EnvironmentVariableGetter() {} | |
30 // Gets an environment variable's value and stores it in | |
31 // result. Returns false if the key is unset. | |
32 virtual bool Getenv(const char* variable_name, std::string* result) = 0; | |
33 }; | |
34 | |
35 class GConfSettingGetter { | 27 class GConfSettingGetter { |
36 public: | 28 public: |
37 virtual ~GConfSettingGetter() {} | 29 virtual ~GConfSettingGetter() {} |
38 | 30 |
39 // Initializes the class: obtains a gconf client, in the concrete | 31 // Initializes the class: obtains a gconf client, in the concrete |
40 // implementation. Returns true on success. Must be called before | 32 // implementation. Returns true on success. Must be called before |
41 // using other methods. | 33 // using other methods. |
42 virtual bool Init() = 0; | 34 virtual bool Init() = 0; |
43 | 35 |
44 // Releases the gconf client, which clears cached directories and | 36 // Releases the gconf client, which clears cached directories and |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 // The substance of the ProxyConfigServiceLinux implementation is | 74 // The substance of the ProxyConfigServiceLinux implementation is |
83 // wrapped in the Delegate ref counted class. On deleting the | 75 // wrapped in the Delegate ref counted class. On deleting the |
84 // ProxyConfigServiceLinux, Delegate::OnDestroy() is posted to the | 76 // ProxyConfigServiceLinux, Delegate::OnDestroy() is posted to the |
85 // UI thread where gconf notifications will be safely stopped before | 77 // UI thread where gconf notifications will be safely stopped before |
86 // releasing Delegate. | 78 // releasing Delegate. |
87 | 79 |
88 class Delegate : public base::RefCountedThreadSafe<Delegate> { | 80 class Delegate : public base::RefCountedThreadSafe<Delegate> { |
89 public: | 81 public: |
90 // Constructor receives gconf and env var getter implementations | 82 // Constructor receives gconf and env var getter implementations |
91 // to use, and takes ownership of them. | 83 // to use, and takes ownership of them. |
92 Delegate(EnvironmentVariableGetter* env_var_getter, | 84 Delegate(base::EnvironmentVariableGetter* env_var_getter, |
93 GConfSettingGetter* gconf_getter); | 85 GConfSettingGetter* gconf_getter); |
94 // Synchronously obtains the proxy configuration. If gconf is | 86 // Synchronously obtains the proxy configuration. If gconf is |
95 // used, also enables gconf notification for setting | 87 // used, also enables gconf notification for setting |
96 // changes. gconf must only be accessed from the thread running | 88 // changes. gconf must only be accessed from the thread running |
97 // the default glib main loop, and so this method must be called | 89 // the default glib main loop, and so this method must be called |
98 // from the UI thread. The message loop for the IO thread is | 90 // from the UI thread. The message loop for the IO thread is |
99 // specified so that notifications can post tasks to it (and for | 91 // specified so that notifications can post tasks to it (and for |
100 // assertions). | 92 // assertions). |
101 void SetupAndFetchInitialConfig(MessageLoop* glib_default_loop, | 93 void SetupAndFetchInitialConfig(MessageLoop* glib_default_loop, |
102 MessageLoop* io_loop); | 94 MessageLoop* io_loop); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 bool GetConfigFromGConf(ProxyConfig* config); | 136 bool GetConfigFromGConf(ProxyConfig* config); |
145 | 137 |
146 // Returns true if environment variables indicate that we are | 138 // Returns true if environment variables indicate that we are |
147 // running GNOME (and therefore we want to use gconf settings). | 139 // running GNOME (and therefore we want to use gconf settings). |
148 bool ShouldTryGConf(); | 140 bool ShouldTryGConf(); |
149 | 141 |
150 // This method is posted from the UI thread to the IO thread to | 142 // This method is posted from the UI thread to the IO thread to |
151 // carry the new config information. | 143 // carry the new config information. |
152 void SetNewProxyConfig(const ProxyConfig& new_config); | 144 void SetNewProxyConfig(const ProxyConfig& new_config); |
153 | 145 |
154 scoped_ptr<EnvironmentVariableGetter> env_var_getter_; | 146 scoped_ptr<base::EnvironmentVariableGetter> env_var_getter_; |
155 scoped_ptr<GConfSettingGetter> gconf_getter_; | 147 scoped_ptr<GConfSettingGetter> gconf_getter_; |
156 | 148 |
157 // Cached proxy configuration, to be returned by | 149 // Cached proxy configuration, to be returned by |
158 // GetProxyConfig. Initially populated from the UI thread, but | 150 // GetProxyConfig. Initially populated from the UI thread, but |
159 // afterwards only accessed from the IO thread. | 151 // afterwards only accessed from the IO thread. |
160 ProxyConfig cached_config_; | 152 ProxyConfig cached_config_; |
161 | 153 |
162 // A copy kept on the UI thread of the last seen proxy config, so as | 154 // A copy kept on the UI thread of the last seen proxy config, so as |
163 // to avoid posting a call to SetNewProxyConfig when we get a | 155 // to avoid posting a call to SetNewProxyConfig when we get a |
164 // notification but the config has not actually changed. | 156 // notification but the config has not actually changed. |
(...skipping 14 matching lines...) Expand all Loading... |
179 MessageLoop* io_loop_; | 171 MessageLoop* io_loop_; |
180 | 172 |
181 DISALLOW_COPY_AND_ASSIGN(Delegate); | 173 DISALLOW_COPY_AND_ASSIGN(Delegate); |
182 }; | 174 }; |
183 | 175 |
184 // Thin wrapper shell around Delegate. | 176 // Thin wrapper shell around Delegate. |
185 | 177 |
186 // Usual constructor | 178 // Usual constructor |
187 ProxyConfigServiceLinux(); | 179 ProxyConfigServiceLinux(); |
188 // For testing: takes alternate gconf and env var getter implementations. | 180 // For testing: takes alternate gconf and env var getter implementations. |
189 ProxyConfigServiceLinux(EnvironmentVariableGetter* env_var_getter, | 181 ProxyConfigServiceLinux(base::EnvironmentVariableGetter* env_var_getter, |
190 GConfSettingGetter* gconf_getter); | 182 GConfSettingGetter* gconf_getter); |
191 | 183 |
192 virtual ~ProxyConfigServiceLinux() { | 184 virtual ~ProxyConfigServiceLinux() { |
193 delegate_->PostDestroyTask(); | 185 delegate_->PostDestroyTask(); |
194 } | 186 } |
195 | 187 |
196 void SetupAndFetchInitialConfig(MessageLoop* glib_default_loop, | 188 void SetupAndFetchInitialConfig(MessageLoop* glib_default_loop, |
197 MessageLoop* io_loop) { | 189 MessageLoop* io_loop) { |
198 delegate_->SetupAndFetchInitialConfig(glib_default_loop, io_loop); | 190 delegate_->SetupAndFetchInitialConfig(glib_default_loop, io_loop); |
199 } | 191 } |
(...skipping 12 matching lines...) Expand all Loading... |
212 | 204 |
213 private: | 205 private: |
214 scoped_refptr<Delegate> delegate_; | 206 scoped_refptr<Delegate> delegate_; |
215 | 207 |
216 DISALLOW_COPY_AND_ASSIGN(ProxyConfigServiceLinux); | 208 DISALLOW_COPY_AND_ASSIGN(ProxyConfigServiceLinux); |
217 }; | 209 }; |
218 | 210 |
219 } // namespace net | 211 } // namespace net |
220 | 212 |
221 #endif // NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ | 213 #endif // NET_PROXY_PROXY_CONFIG_SERVICE_LINUX_H_ |
OLD | NEW |