Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: net/proxy/proxy_service.h

Issue 160510: Better match IE's proxy settings.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix merge conflict Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/proxy/proxy_script_fetcher_unittest.cc ('k') | net/proxy/proxy_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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_SERVICE_H_ 5 #ifndef NET_PROXY_PROXY_SERVICE_H_
6 #define NET_PROXY_PROXY_SERVICE_H_ 6 #define NET_PROXY_PROXY_SERVICE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/ref_counted.h" 11 #include "base/ref_counted.h"
12 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
13 // TODO(eroman): remove this unused header; other callers are depending on it! 13 // TODO(eroman): remove this unused header; other callers are depending on it!
14 #include "base/thread.h" 14 #include "base/thread.h"
15 #include "base/waitable_event.h" 15 #include "base/waitable_event.h"
16 #include "net/base/completion_callback.h" 16 #include "net/base/completion_callback.h"
17 #include "net/proxy/proxy_server.h" 17 #include "net/proxy/proxy_server.h"
18 #include "net/proxy/proxy_info.h" 18 #include "net/proxy/proxy_info.h"
19 #include "testing/gtest/include/gtest/gtest_prod.h" 19 #include "testing/gtest/include/gtest/gtest_prod.h"
20 20
21 class GURL; 21 class GURL;
22 class MessageLoop; 22 class MessageLoop;
23 class URLRequestContext; 23 class URLRequestContext;
24 24
25 namespace net { 25 namespace net {
26 26
27 class ProxyScriptFetcher; 27 class InitProxyResolver;
28 class ProxyConfigService; 28 class ProxyConfigService;
29 class ProxyResolver; 29 class ProxyResolver;
30 class ProxyScriptFetcher;
30 31
31 // This class can be used to resolve the proxy server to use when loading a 32 // This class can be used to resolve the proxy server to use when loading a
32 // HTTP(S) URL. It uses the given ProxyResolver to handle the actual proxy 33 // HTTP(S) URL. It uses the given ProxyResolver to handle the actual proxy
33 // resolution. See ProxyResolverV8 for example. 34 // resolution. See ProxyResolverV8 for example.
34 class ProxyService { 35 class ProxyService {
35 public: 36 public:
36 // The instance takes ownership of |config_service| and |resolver|. 37 // The instance takes ownership of |config_service| and |resolver|.
37 ProxyService(ProxyConfigService* config_service, 38 ProxyService(ProxyConfigService* config_service,
38 ProxyResolver* resolver); 39 ProxyResolver* resolver);
39 40
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 // Checks to see if the proxy configuration changed, and then updates config_ 159 // Checks to see if the proxy configuration changed, and then updates config_
159 // to reference the new configuration. 160 // to reference the new configuration.
160 void UpdateConfig(); 161 void UpdateConfig();
161 162
162 // Assign |config| as the current configuration. 163 // Assign |config| as the current configuration.
163 void SetConfig(const ProxyConfig& config); 164 void SetConfig(const ProxyConfig& config);
164 165
165 // Tries to update the configuration if it hasn't been checked in a while. 166 // Tries to update the configuration if it hasn't been checked in a while.
166 void UpdateConfigIfOld(); 167 void UpdateConfigIfOld();
167 168
168 // Returns true if this ProxyService is downloading a PAC script on behalf 169 // Returns true if the proxy resolver is being initialized for PAC
169 // of ProxyResolverWithoutFetch. Resolve requests will be frozen until 170 // (downloading PAC script(s) + testing).
170 // the fetch has completed. 171 // Resolve requests will be frozen until the initialization has completed.
171 bool IsFetchingPacScript() const { 172 bool IsInitializingProxyResolver() const {
172 return in_progress_fetch_config_id_ != ProxyConfig::INVALID_ID; 173 return init_proxy_resolver_.get() != NULL;
173 } 174 }
174 175
175 // Callback for when the PAC script has finished downloading. 176 // Callback for when the proxy resolver has been initialized with a
176 void OnScriptFetchCompletion(int result); 177 // PAC script.
178 void OnInitProxyResolverComplete(int result);
177 179
178 // Returns ERR_IO_PENDING if the request cannot be completed synchronously. 180 // Returns ERR_IO_PENDING if the request cannot be completed synchronously.
179 // Otherwise it fills |result| with the proxy information for |url|. 181 // Otherwise it fills |result| with the proxy information for |url|.
180 // Completing synchronously means we don't need to query ProxyResolver. 182 // Completing synchronously means we don't need to query ProxyResolver.
181 int TryToCompleteSynchronously(const GURL& url, ProxyInfo* result); 183 int TryToCompleteSynchronously(const GURL& url, ProxyInfo* result);
182 184
183 // Set |result| with the proxy to use for |url|, based on |rules|. 185 // Set |result| with the proxy to use for |url|, based on |rules|.
184 void ApplyProxyRules(const GURL& url, 186 void ApplyProxyRules(const GURL& url,
185 const ProxyConfig::ProxyRules& rules, 187 const ProxyConfig::ProxyRules& rules,
186 ProxyInfo* result); 188 ProxyInfo* result);
187 189
190 // Cancel all of the requests sent to the ProxyResolver. These will be
191 // restarted when calling ResumeAllPendingRequests().
192 void SuspendAllPendingRequests();
193
188 // Sends all the unstarted pending requests off to the resolver. 194 // Sends all the unstarted pending requests off to the resolver.
189 void ResumeAllPendingRequests(); 195 void ResumeAllPendingRequests();
190 196
191 // Returns true if |pending_requests_| contains |req|. 197 // Returns true if |pending_requests_| contains |req|.
192 bool ContainsPendingRequest(PacRequest* req); 198 bool ContainsPendingRequest(PacRequest* req);
193 199
194 // Removes |req| from the list of pending requests. 200 // Removes |req| from the list of pending requests.
195 void RemovePendingRequest(PacRequest* req); 201 void RemovePendingRequest(PacRequest* req);
196 202
197 // Returns true if the resolver is all set-up and ready to accept requests.
198 // Returns false if requests are blocked (because the PAC script is being
199 // downloaded). May have the side-effect of starting the PAC script
200 // download.
201 bool PrepareResolverForRequests();
202
203 // Called to indicate that a PacRequest completed. The |config_id| parameter 203 // Called to indicate that a PacRequest completed. The |config_id| parameter
204 // indicates the proxy configuration that was queried. |result_code| is OK 204 // indicates the proxy configuration that was queried. |result_code| is OK
205 // if the PAC file could be downloaded and executed. Otherwise, it is an 205 // if the PAC file could be downloaded and executed. Otherwise, it is an
206 // error code, indicating a bad proxy configuration. 206 // error code, indicating a bad proxy configuration.
207 void DidCompletePacRequest(int config_id, int result_code); 207 void DidCompletePacRequest(int config_id, int result_code);
208 208
209 // Returns true if the URL passed in should not go through the proxy server. 209 // Returns true if the URL passed in should not go through the proxy server.
210 // 1. If the proxy settings say to bypass local names, and |IsLocalName(url)|. 210 // 1. If the proxy settings say to bypass local names, and |IsLocalName(url)|.
211 // 2. The URL matches one of the entities in the proxy bypass list. 211 // 2. The URL matches one of the entities in the proxy bypass list.
212 bool ShouldBypassProxyForURL(const GURL& url); 212 bool ShouldBypassProxyForURL(const GURL& url);
213 213
214 // Returns true if |url| is to an intranet site (using non-FQDN as the 214 // Returns true if |url| is to an intranet site (using non-FQDN as the
215 // heuristic). 215 // heuristic).
216 static bool IsLocalName(const GURL& url); 216 static bool IsLocalName(const GURL& url);
217 217
218 // Helper to download the PAC script (wpad + custom) and apply fallback rules.
219 scoped_ptr<InitProxyResolver> init_proxy_resolver_;
220
218 scoped_ptr<ProxyConfigService> config_service_; 221 scoped_ptr<ProxyConfigService> config_service_;
219 scoped_ptr<ProxyResolver> resolver_; 222 scoped_ptr<ProxyResolver> resolver_;
220 223
221 // We store the proxy config and a counter (ID) that is incremented each time 224 // We store the proxy config and a counter (ID) that is incremented each time
222 // the config changes. 225 // the config changes.
223 ProxyConfig config_; 226 ProxyConfig config_;
224 227
225 // Increasing ID to give to the next ProxyConfig that we set. 228 // Increasing ID to give to the next ProxyConfig that we set.
226 int next_config_id_; 229 int next_config_id_;
227 230
228 // Indicates that the configuration is bad and should be ignored. 231 // Indicates that the configuration is bad and should be ignored.
229 bool config_is_bad_; 232 bool config_is_bad_;
230 233
231 // The time when the proxy configuration was last read from the system. 234 // The time when the proxy configuration was last read from the system.
232 base::TimeTicks config_last_update_time_; 235 base::TimeTicks config_last_update_time_;
233 236
234 // Map of the known bad proxies and the information about the retry time. 237 // Map of the known bad proxies and the information about the retry time.
235 ProxyRetryInfoMap proxy_retry_info_; 238 ProxyRetryInfoMap proxy_retry_info_;
236 239
237 // Set of pending/inprogress requests. 240 // Set of pending/inprogress requests.
238 PendingRequests pending_requests_; 241 PendingRequests pending_requests_;
239 242
240 // The fetcher to use when downloading PAC scripts for the ProxyResolver. 243 // The fetcher to use when downloading PAC scripts for the ProxyResolver.
241 // This dependency can be NULL if our ProxyResolver has no need for 244 // This dependency can be NULL if our ProxyResolver has no need for
242 // external PAC script fetching. 245 // external PAC script fetching.
243 scoped_ptr<ProxyScriptFetcher> proxy_script_fetcher_; 246 scoped_ptr<ProxyScriptFetcher> proxy_script_fetcher_;
244 247
245 // Callback for when |proxy_script_fetcher_| is done. 248 // Callback for when |init_proxy_resolver_| is done.
246 CompletionCallbackImpl<ProxyService> proxy_script_fetcher_callback_; 249 CompletionCallbackImpl<ProxyService> init_proxy_resolver_callback_;
247
248 // The ID of the configuration for which we last downloaded a PAC script.
249 // If no PAC script has been fetched yet, will be ProxyConfig::INVALID_ID.
250 ProxyConfig::ID fetched_pac_config_id_;
251
252 // The error corresponding with |fetched_pac_config_id_|, or OK.
253 int fetched_pac_error_;
254
255 // The ID of the configuration for which we are currently downloading the
256 // PAC script. If no fetch is in progress, will be ProxyConfig::INVALID_ID.
257 ProxyConfig::ID in_progress_fetch_config_id_;
258
259 // The results of the current in progress fetch, or empty string.
260 std::string in_progress_fetch_bytes_;
261
262 DISALLOW_COPY_AND_ASSIGN(ProxyService); 250 DISALLOW_COPY_AND_ASSIGN(ProxyService);
263 }; 251 };
264 252
265 // Wrapper for invoking methods on a ProxyService synchronously. 253 // Wrapper for invoking methods on a ProxyService synchronously.
266 class SyncProxyServiceHelper 254 class SyncProxyServiceHelper
267 : public base::RefCountedThreadSafe<SyncProxyServiceHelper> { 255 : public base::RefCountedThreadSafe<SyncProxyServiceHelper> {
268 public: 256 public:
269 SyncProxyServiceHelper(MessageLoop* io_message_loop, 257 SyncProxyServiceHelper(MessageLoop* io_message_loop,
270 ProxyService* proxy_service); 258 ProxyService* proxy_service);
271 259
(...skipping 11 matching lines...) Expand all
283 271
284 base::WaitableEvent event_; 272 base::WaitableEvent event_;
285 CompletionCallbackImpl<SyncProxyServiceHelper> callback_; 273 CompletionCallbackImpl<SyncProxyServiceHelper> callback_;
286 ProxyInfo proxy_info_; 274 ProxyInfo proxy_info_;
287 int result_; 275 int result_;
288 }; 276 };
289 277
290 } // namespace net 278 } // namespace net
291 279
292 #endif // NET_PROXY_PROXY_SERVICE_H_ 280 #endif // NET_PROXY_PROXY_SERVICE_H_
OLDNEW
« no previous file with comments | « net/proxy/proxy_script_fetcher_unittest.cc ('k') | net/proxy/proxy_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698