| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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" | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 29 class ProxyResolver; | 29 class ProxyResolver; | 
| 30 class ProxyScriptFetcher; | 30 class ProxyScriptFetcher; | 
| 31 | 31 | 
| 32 // 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 | 
| 33 // 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 | 
| 34 // resolution.  See ProxyResolverV8 for example. | 34 // resolution.  See ProxyResolverV8 for example. | 
| 35 class ProxyService : public base::RefCountedThreadSafe<ProxyService>, | 35 class ProxyService : public base::RefCountedThreadSafe<ProxyService>, | 
| 36                      public NetworkChangeNotifier::Observer { | 36                      public NetworkChangeNotifier::Observer { | 
| 37  public: | 37  public: | 
| 38   // The instance takes ownership of |config_service| and |resolver|. | 38   // The instance takes ownership of |config_service| and |resolver|. | 
| 39   // If |network_change_notifier| is non-NULL, the proxy service will register |  | 
| 40   // with it to detect when the network setup has changed. This is used to |  | 
| 41   // decide when to re-configure the proxy discovery. |  | 
| 42   // |net_log| is a possibly NULL destination to send log events to. It must | 39   // |net_log| is a possibly NULL destination to send log events to. It must | 
| 43   // remain alive for the lifetime of this ProxyService. | 40   // remain alive for the lifetime of this ProxyService. | 
| 44   ProxyService(ProxyConfigService* config_service, ProxyResolver* resolver, | 41   ProxyService(ProxyConfigService* config_service, | 
| 45                NetworkChangeNotifier* network_change_notifier, | 42                ProxyResolver* resolver, | 
| 46                NetLog* net_log); | 43                NetLog* net_log); | 
| 47 | 44 | 
| 48   // Used internally to handle PAC queries. | 45   // Used internally to handle PAC queries. | 
| 49   // TODO(eroman): consider naming this simply "Request". | 46   // TODO(eroman): consider naming this simply "Request". | 
| 50   class PacRequest; | 47   class PacRequest; | 
| 51 | 48 | 
| 52   // Returns ERR_IO_PENDING if the proxy information could not be provided | 49   // Returns ERR_IO_PENDING if the proxy information could not be provided | 
| 53   // synchronously, to indicate that the result will be available when the | 50   // synchronously, to indicate that the result will be available when the | 
| 54   // callback is run.  The callback is run on the thread that calls | 51   // callback is run.  The callback is run on the thread that calls | 
| 55   // ResolveProxy. | 52   // ResolveProxy. | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 136   // to downloading and testing the PAC files. | 133   // to downloading and testing the PAC files. | 
| 137   void ForceReloadProxyConfig(); | 134   void ForceReloadProxyConfig(); | 
| 138 | 135 | 
| 139   // Creates a proxy service that polls |proxy_config_service| to notice when | 136   // Creates a proxy service that polls |proxy_config_service| to notice when | 
| 140   // the proxy settings change. We take ownership of |proxy_config_service|. | 137   // the proxy settings change. We take ownership of |proxy_config_service|. | 
| 141   // Iff |use_v8_resolver| is true, then the V8 implementation is | 138   // Iff |use_v8_resolver| is true, then the V8 implementation is | 
| 142   // used. | 139   // used. | 
| 143   // |url_request_context| is only used when use_v8_resolver is true: | 140   // |url_request_context| is only used when use_v8_resolver is true: | 
| 144   // it specifies the URL request context that will be used if a PAC | 141   // it specifies the URL request context that will be used if a PAC | 
| 145   // script needs to be fetched. | 142   // script needs to be fetched. | 
| 146   // |network_change_notifier| may be NULL. Otherwise it will be used to |  | 
| 147   // signal the ProxyService when the network setup has changed. |  | 
| 148   // |io_loop| points to the IO thread's message loop. It is only used | 143   // |io_loop| points to the IO thread's message loop. It is only used | 
| 149   // when pc is NULL. | 144   // when pc is NULL. | 
| 150   // ########################################################################## | 145   // ########################################################################## | 
| 151   // # See the warnings in net/proxy/proxy_resolver_v8.h describing the | 146   // # See the warnings in net/proxy/proxy_resolver_v8.h describing the | 
| 152   // # multi-threading model. In order for this to be safe to use, *ALL* the | 147   // # multi-threading model. In order for this to be safe to use, *ALL* the | 
| 153   // # other V8's running in the process must use v8::Locker. | 148   // # other V8's running in the process must use v8::Locker. | 
| 154   // ########################################################################## | 149   // ########################################################################## | 
| 155   static ProxyService* Create( | 150   static ProxyService* Create( | 
| 156       ProxyConfigService* proxy_config_service, | 151       ProxyConfigService* proxy_config_service, | 
| 157       bool use_v8_resolver, | 152       bool use_v8_resolver, | 
| 158       URLRequestContext* url_request_context, | 153       URLRequestContext* url_request_context, | 
| 159       NetworkChangeNotifier* network_change_notifier, |  | 
| 160       NetLog* net_log, | 154       NetLog* net_log, | 
| 161       MessageLoop* io_loop); | 155       MessageLoop* io_loop); | 
| 162 | 156 | 
| 163   // Convenience method that creates a proxy service using the | 157   // Convenience method that creates a proxy service using the | 
| 164   // specified fixed settings. |pc| must not be NULL. | 158   // specified fixed settings. |pc| must not be NULL. | 
| 165   static ProxyService* CreateFixed(const ProxyConfig& pc); | 159   static ProxyService* CreateFixed(const ProxyConfig& pc); | 
| 166 | 160 | 
| 167   // Creates a proxy service that always fails to fetch the proxy configuration, | 161   // Creates a proxy service that always fails to fetch the proxy configuration, | 
| 168   // so it falls back to direct connect. | 162   // so it falls back to direct connect. | 
| 169   static ProxyService* CreateNull(); | 163   static ProxyService* CreateNull(); | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 237   // Removes |req| from the list of pending requests. | 231   // Removes |req| from the list of pending requests. | 
| 238   void RemovePendingRequest(PacRequest* req); | 232   void RemovePendingRequest(PacRequest* req); | 
| 239 | 233 | 
| 240   // Called when proxy resolution has completed (either synchronously or | 234   // Called when proxy resolution has completed (either synchronously or | 
| 241   // asynchronously). Handles logging the result, and cleaning out | 235   // asynchronously). Handles logging the result, and cleaning out | 
| 242   // bad entries from the results list. | 236   // bad entries from the results list. | 
| 243   int DidFinishResolvingProxy(ProxyInfo* result, | 237   int DidFinishResolvingProxy(ProxyInfo* result, | 
| 244                               int result_code, | 238                               int result_code, | 
| 245                               const BoundNetLog& net_log); | 239                               const BoundNetLog& net_log); | 
| 246 | 240 | 
| 247   // NetworkChangeNotifier::Observer methods: | 241   // NetworkChangeNotifier::Observer | 
|  | 242   // When this is called, we re-fetch PAC scripts and re-run WPAD. | 
| 248   virtual void OnIPAddressChanged(); | 243   virtual void OnIPAddressChanged(); | 
| 249 | 244 | 
| 250   scoped_ptr<ProxyConfigService> config_service_; | 245   scoped_ptr<ProxyConfigService> config_service_; | 
| 251   scoped_ptr<ProxyResolver> resolver_; | 246   scoped_ptr<ProxyResolver> resolver_; | 
| 252 | 247 | 
| 253   // We store the proxy config and a counter (ID) that is incremented each time | 248   // We store the proxy config and a counter (ID) that is incremented each time | 
| 254   // the config changes. | 249   // the config changes. | 
| 255   ProxyConfig config_; | 250   ProxyConfig config_; | 
| 256 | 251 | 
| 257   // Increasing ID to give to the next ProxyConfig that we set. | 252   // Increasing ID to give to the next ProxyConfig that we set. | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 280   // Helper to download the PAC script (wpad + custom) and apply fallback rules. | 275   // Helper to download the PAC script (wpad + custom) and apply fallback rules. | 
| 281   // | 276   // | 
| 282   // Note that the declaration is important here: |proxy_script_fetcher_| and | 277   // Note that the declaration is important here: |proxy_script_fetcher_| and | 
| 283   // |proxy_resolver_| must outlive |init_proxy_resolver_|. | 278   // |proxy_resolver_| must outlive |init_proxy_resolver_|. | 
| 284   scoped_ptr<InitProxyResolver> init_proxy_resolver_; | 279   scoped_ptr<InitProxyResolver> init_proxy_resolver_; | 
| 285 | 280 | 
| 286   // This is the log where any events generated by |init_proxy_resolver_| are | 281   // This is the log where any events generated by |init_proxy_resolver_| are | 
| 287   // sent to. | 282   // sent to. | 
| 288   NetLog* net_log_; | 283   NetLog* net_log_; | 
| 289 | 284 | 
| 290   // The (possibly NULL) network change notifier that we use to decide when |  | 
| 291   // to refetch PAC scripts or re-run WPAD. |  | 
| 292   NetworkChangeNotifier* const network_change_notifier_; |  | 
| 293 |  | 
| 294   DISALLOW_COPY_AND_ASSIGN(ProxyService); | 285   DISALLOW_COPY_AND_ASSIGN(ProxyService); | 
| 295 }; | 286 }; | 
| 296 | 287 | 
| 297 // Wrapper for invoking methods on a ProxyService synchronously. | 288 // Wrapper for invoking methods on a ProxyService synchronously. | 
| 298 class SyncProxyServiceHelper | 289 class SyncProxyServiceHelper | 
| 299     : public base::RefCountedThreadSafe<SyncProxyServiceHelper> { | 290     : public base::RefCountedThreadSafe<SyncProxyServiceHelper> { | 
| 300  public: | 291  public: | 
| 301   SyncProxyServiceHelper(MessageLoop* io_message_loop, | 292   SyncProxyServiceHelper(MessageLoop* io_message_loop, | 
| 302                          ProxyService* proxy_service); | 293                          ProxyService* proxy_service); | 
| 303 | 294 | 
| 304   int ResolveProxy(const GURL& url, ProxyInfo* proxy_info, const BoundNetLog& ne
     t_log); | 295   int ResolveProxy(const GURL& url, | 
|  | 296                    ProxyInfo* proxy_info, | 
|  | 297                    const BoundNetLog& net_log); | 
| 305   int ReconsiderProxyAfterError(const GURL& url, | 298   int ReconsiderProxyAfterError(const GURL& url, | 
| 306                                 ProxyInfo* proxy_info, const BoundNetLog& net_lo
     g); | 299                                 ProxyInfo* proxy_info, | 
|  | 300                                 const BoundNetLog& net_log); | 
| 307 | 301 | 
| 308  private: | 302  private: | 
| 309   friend class base::RefCountedThreadSafe<SyncProxyServiceHelper>; | 303   friend class base::RefCountedThreadSafe<SyncProxyServiceHelper>; | 
| 310 | 304 | 
| 311   ~SyncProxyServiceHelper() {} | 305   ~SyncProxyServiceHelper() {} | 
| 312 | 306 | 
| 313   void StartAsyncResolve(const GURL& url, const BoundNetLog& net_log); | 307   void StartAsyncResolve(const GURL& url, const BoundNetLog& net_log); | 
| 314   void StartAsyncReconsider(const GURL& url, const BoundNetLog& net_log); | 308   void StartAsyncReconsider(const GURL& url, const BoundNetLog& net_log); | 
| 315 | 309 | 
| 316   void OnCompletion(int result); | 310   void OnCompletion(int result); | 
| 317 | 311 | 
| 318   MessageLoop* io_message_loop_; | 312   MessageLoop* io_message_loop_; | 
| 319   ProxyService* proxy_service_; | 313   ProxyService* proxy_service_; | 
| 320 | 314 | 
| 321   base::WaitableEvent event_; | 315   base::WaitableEvent event_; | 
| 322   CompletionCallbackImpl<SyncProxyServiceHelper> callback_; | 316   CompletionCallbackImpl<SyncProxyServiceHelper> callback_; | 
| 323   ProxyInfo proxy_info_; | 317   ProxyInfo proxy_info_; | 
| 324   int result_; | 318   int result_; | 
| 325 }; | 319 }; | 
| 326 | 320 | 
| 327 }  // namespace net | 321 }  // namespace net | 
| 328 | 322 | 
| 329 #endif  // NET_PROXY_PROXY_SERVICE_H_ | 323 #endif  // NET_PROXY_PROXY_SERVICE_H_ | 
| OLD | NEW | 
|---|