OLD | NEW |
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 #include "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 GURL url_; | 192 GURL url_; |
193 ProxyResolver::RequestHandle resolve_job_; | 193 ProxyResolver::RequestHandle resolve_job_; |
194 ProxyConfig::ID config_id_; // The config id when the resolve was started. | 194 ProxyConfig::ID config_id_; // The config id when the resolve was started. |
195 BoundNetLog net_log_; | 195 BoundNetLog net_log_; |
196 }; | 196 }; |
197 | 197 |
198 // ProxyService --------------------------------------------------------------- | 198 // ProxyService --------------------------------------------------------------- |
199 | 199 |
200 ProxyService::ProxyService(ProxyConfigService* config_service, | 200 ProxyService::ProxyService(ProxyConfigService* config_service, |
201 ProxyResolver* resolver, | 201 ProxyResolver* resolver, |
202 NetworkChangeNotifier* network_change_notifier) | 202 NetworkChangeNotifier* network_change_notifier, |
| 203 const BoundNetLog& init_proxy_resolver_log) |
203 : config_service_(config_service), | 204 : config_service_(config_service), |
204 resolver_(resolver), | 205 resolver_(resolver), |
205 next_config_id_(1), | 206 next_config_id_(1), |
206 should_use_proxy_resolver_(false), | 207 should_use_proxy_resolver_(false), |
207 ALLOW_THIS_IN_INITIALIZER_LIST(init_proxy_resolver_callback_( | 208 ALLOW_THIS_IN_INITIALIZER_LIST(init_proxy_resolver_callback_( |
208 this, &ProxyService::OnInitProxyResolverComplete)), | 209 this, &ProxyService::OnInitProxyResolverComplete)), |
209 init_proxy_resolver_log_(kMaxNumNetLogEntries), | 210 init_proxy_resolver_log_(init_proxy_resolver_log), |
210 network_change_notifier_(network_change_notifier) { | 211 network_change_notifier_(network_change_notifier) { |
211 // Register to receive network change notifications. | 212 // Register to receive network change notifications. |
212 if (network_change_notifier_) | 213 if (network_change_notifier_) |
213 network_change_notifier_->AddObserver(this); | 214 network_change_notifier_->AddObserver(this); |
214 } | 215 } |
215 | 216 |
216 // static | 217 // static |
217 ProxyService* ProxyService::Create( | 218 ProxyService* ProxyService::Create( |
218 ProxyConfigService* proxy_config_service, | 219 ProxyConfigService* proxy_config_service, |
219 bool use_v8_resolver, | 220 bool use_v8_resolver, |
220 URLRequestContext* url_request_context, | 221 URLRequestContext* url_request_context, |
221 NetworkChangeNotifier* network_change_notifier, | 222 NetworkChangeNotifier* network_change_notifier, |
| 223 NetLog* net_log, |
222 MessageLoop* io_loop) { | 224 MessageLoop* io_loop) { |
223 ProxyResolver* proxy_resolver; | 225 ProxyResolver* proxy_resolver; |
224 | 226 |
225 if (use_v8_resolver) { | 227 if (use_v8_resolver) { |
226 // Send javascript errors and alerts to LOG(INFO). | 228 // Send javascript errors and alerts to LOG(INFO). |
227 HostResolver* host_resolver = url_request_context->host_resolver(); | 229 HostResolver* host_resolver = url_request_context->host_resolver(); |
228 ProxyResolverJSBindings* js_bindings = | 230 ProxyResolverJSBindings* js_bindings = |
229 ProxyResolverJSBindings::CreateDefault(host_resolver, io_loop); | 231 ProxyResolverJSBindings::CreateDefault(host_resolver, io_loop); |
230 | 232 |
231 proxy_resolver = new ProxyResolverV8(js_bindings); | 233 proxy_resolver = new ProxyResolverV8(js_bindings); |
232 } else { | 234 } else { |
233 proxy_resolver = CreateNonV8ProxyResolver(); | 235 proxy_resolver = CreateNonV8ProxyResolver(); |
234 } | 236 } |
235 | 237 |
236 // Wrap the (synchronous) ProxyResolver implementation in a single-threaded | 238 // Wrap the (synchronous) ProxyResolver implementation in a single-threaded |
237 // runner. This will dispatch requests to a threadpool of size 1. | 239 // runner. This will dispatch requests to a threadpool of size 1. |
238 proxy_resolver = new SingleThreadedProxyResolver(proxy_resolver); | 240 proxy_resolver = new SingleThreadedProxyResolver(proxy_resolver); |
239 | 241 |
240 ProxyService* proxy_service = new ProxyService( | 242 ProxyService* proxy_service = new ProxyService( |
241 proxy_config_service, proxy_resolver, network_change_notifier); | 243 proxy_config_service, proxy_resolver, network_change_notifier, |
| 244 BoundNetLog::Make(net_log, NetLog::SOURCE_INIT_PROXY_RESOLVER)); |
242 | 245 |
243 if (proxy_resolver->expects_pac_bytes()) { | 246 if (proxy_resolver->expects_pac_bytes()) { |
244 // Configure PAC script downloads to be issued using |url_request_context|. | 247 // Configure PAC script downloads to be issued using |url_request_context|. |
245 DCHECK(url_request_context); | 248 DCHECK(url_request_context); |
246 proxy_service->SetProxyScriptFetcher( | 249 proxy_service->SetProxyScriptFetcher( |
247 ProxyScriptFetcher::Create(url_request_context)); | 250 ProxyScriptFetcher::Create(url_request_context)); |
248 } | 251 } |
249 | 252 |
250 return proxy_service; | 253 return proxy_service; |
251 } | 254 } |
252 | 255 |
253 // static | 256 // static |
254 ProxyService* ProxyService::CreateFixed(const ProxyConfig& pc) { | 257 ProxyService* ProxyService::CreateFixed(const ProxyConfig& pc) { |
255 return Create(new ProxyConfigServiceFixed(pc), false, NULL, NULL, NULL); | 258 return Create(new ProxyConfigServiceFixed(pc), false, NULL, NULL, |
| 259 NULL, NULL); |
256 } | 260 } |
257 | 261 |
258 // static | 262 // static |
259 ProxyService* ProxyService::CreateNull() { | 263 ProxyService* ProxyService::CreateNull() { |
260 // Use a configuration fetcher and proxy resolver which always fail. | 264 // Use a configuration fetcher and proxy resolver which always fail. |
261 return new ProxyService(new ProxyConfigServiceNull, | 265 return new ProxyService(new ProxyConfigServiceNull, |
262 new ProxyResolverNull, | 266 new ProxyResolverNull, |
263 NULL); | 267 NULL, |
| 268 BoundNetLog()); |
264 } | 269 } |
265 | 270 |
266 int ProxyService::ResolveProxy(const GURL& raw_url, | 271 int ProxyService::ResolveProxy(const GURL& raw_url, |
267 ProxyInfo* result, | 272 ProxyInfo* result, |
268 CompletionCallback* callback, | 273 CompletionCallback* callback, |
269 PacRequest** pac_request, | 274 PacRequest** pac_request, |
270 const BoundNetLog& net_log) { | 275 const BoundNetLog& net_log) { |
271 DCHECK(callback); | 276 DCHECK(callback); |
272 | 277 |
273 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); | 278 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 StartInitProxyResolver(); | 634 StartInitProxyResolver(); |
630 } | 635 } |
631 } | 636 } |
632 | 637 |
633 void ProxyService::StartInitProxyResolver() { | 638 void ProxyService::StartInitProxyResolver() { |
634 DCHECK(!init_proxy_resolver_.get()); | 639 DCHECK(!init_proxy_resolver_.get()); |
635 | 640 |
636 init_proxy_resolver_.reset( | 641 init_proxy_resolver_.reset( |
637 new InitProxyResolver(resolver_.get(), proxy_script_fetcher_.get())); | 642 new InitProxyResolver(resolver_.get(), proxy_script_fetcher_.get())); |
638 | 643 |
639 init_proxy_resolver_log_.Clear(); | |
640 | |
641 int rv = init_proxy_resolver_->Init( | 644 int rv = init_proxy_resolver_->Init( |
642 config_, &init_proxy_resolver_callback_, | 645 config_, &init_proxy_resolver_callback_, |
643 init_proxy_resolver_log_.bound()); | 646 init_proxy_resolver_log_); |
644 | 647 |
645 if (rv != ERR_IO_PENDING) | 648 if (rv != ERR_IO_PENDING) |
646 OnInitProxyResolverComplete(rv); | 649 OnInitProxyResolverComplete(rv); |
647 } | 650 } |
648 | 651 |
649 void ProxyService::UpdateConfigIfOld(const BoundNetLog& net_log) { | 652 void ProxyService::UpdateConfigIfOld(const BoundNetLog& net_log) { |
650 // The overhead of calling ProxyConfigService::GetProxyConfig is very low. | 653 // The overhead of calling ProxyConfigService::GetProxyConfig is very low. |
651 const TimeDelta kProxyConfigMaxAge = TimeDelta::FromSeconds(5); | 654 const TimeDelta kProxyConfigMaxAge = TimeDelta::FromSeconds(5); |
652 | 655 |
653 // Periodically check for a new config. | 656 // Periodically check for a new config. |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 OnCompletion(result_); | 729 OnCompletion(result_); |
727 } | 730 } |
728 } | 731 } |
729 | 732 |
730 void SyncProxyServiceHelper::OnCompletion(int rv) { | 733 void SyncProxyServiceHelper::OnCompletion(int rv) { |
731 result_ = rv; | 734 result_ = rv; |
732 event_.Signal(); | 735 event_.Signal(); |
733 } | 736 } |
734 | 737 |
735 } // namespace net | 738 } // namespace net |
OLD | NEW |