| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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" |
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
| 12 #include "base/message_loop_proxy.h" | 12 #include "base/message_loop_proxy.h" |
| 13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "googleurl/src/gurl.h" | 15 #include "googleurl/src/gurl.h" |
| 16 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
| 17 #include "net/base/net_log.h" | 17 #include "net/base/net_log.h" |
| 18 #include "net/base/net_util.h" | 18 #include "net/base/net_util.h" |
| 19 #include "net/proxy/dhcp_proxy_script_fetcher.h" | |
| 20 #include "net/proxy/init_proxy_resolver.h" | 19 #include "net/proxy/init_proxy_resolver.h" |
| 21 #include "net/proxy/multi_threaded_proxy_resolver.h" | 20 #include "net/proxy/multi_threaded_proxy_resolver.h" |
| 22 #include "net/proxy/network_delegate_error_observer.h" | 21 #include "net/proxy/network_delegate_error_observer.h" |
| 23 #include "net/proxy/proxy_config_service_fixed.h" | 22 #include "net/proxy/proxy_config_service_fixed.h" |
| 24 #include "net/proxy/proxy_resolver.h" | 23 #include "net/proxy/proxy_resolver.h" |
| 25 #include "net/proxy/proxy_resolver_js_bindings.h" | 24 #include "net/proxy/proxy_resolver_js_bindings.h" |
| 26 #include "net/proxy/proxy_resolver_v8.h" | 25 #include "net/proxy/proxy_resolver_v8.h" |
| 27 #include "net/proxy/proxy_script_fetcher.h" | 26 #include "net/proxy/proxy_script_fetcher.h" |
| 28 #include "net/proxy/sync_host_resolver_bridge.h" | 27 #include "net/proxy/sync_host_resolver_bridge.h" |
| 29 #include "net/url_request/url_request_context.h" | 28 #include "net/url_request/url_request_context.h" |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 kNumMillisToStallAfterNetworkChanges)) { | 402 kNumMillisToStallAfterNetworkChanges)) { |
| 404 NetworkChangeNotifier::AddIPAddressObserver(this); | 403 NetworkChangeNotifier::AddIPAddressObserver(this); |
| 405 ResetConfigService(config_service); | 404 ResetConfigService(config_service); |
| 406 } | 405 } |
| 407 | 406 |
| 408 // static | 407 // static |
| 409 ProxyService* ProxyService::CreateUsingV8ProxyResolver( | 408 ProxyService* ProxyService::CreateUsingV8ProxyResolver( |
| 410 ProxyConfigService* proxy_config_service, | 409 ProxyConfigService* proxy_config_service, |
| 411 size_t num_pac_threads, | 410 size_t num_pac_threads, |
| 412 ProxyScriptFetcher* proxy_script_fetcher, | 411 ProxyScriptFetcher* proxy_script_fetcher, |
| 413 DhcpProxyScriptFetcher* dhcp_proxy_script_fetcher, | |
| 414 HostResolver* host_resolver, | 412 HostResolver* host_resolver, |
| 415 NetLog* net_log, | 413 NetLog* net_log, |
| 416 NetworkDelegate* network_delegate) { | 414 NetworkDelegate* network_delegate) { |
| 417 DCHECK(proxy_config_service); | 415 DCHECK(proxy_config_service); |
| 418 DCHECK(proxy_script_fetcher); | 416 DCHECK(proxy_script_fetcher); |
| 419 DCHECK(dhcp_proxy_script_fetcher); | |
| 420 DCHECK(host_resolver); | 417 DCHECK(host_resolver); |
| 421 | 418 |
| 422 if (num_pac_threads == 0) | 419 if (num_pac_threads == 0) |
| 423 num_pac_threads = kDefaultNumPacThreads; | 420 num_pac_threads = kDefaultNumPacThreads; |
| 424 | 421 |
| 425 ProxyResolverFactory* sync_resolver_factory = | 422 ProxyResolverFactory* sync_resolver_factory = |
| 426 new ProxyResolverFactoryForV8( | 423 new ProxyResolverFactoryForV8( |
| 427 host_resolver, | 424 host_resolver, |
| 428 MessageLoop::current(), | 425 MessageLoop::current(), |
| 429 base::MessageLoopProxy::CreateForCurrentThread(), | 426 base::MessageLoopProxy::CreateForCurrentThread(), |
| 430 net_log, | 427 net_log, |
| 431 network_delegate); | 428 network_delegate); |
| 432 | 429 |
| 433 ProxyResolver* proxy_resolver = | 430 ProxyResolver* proxy_resolver = |
| 434 new MultiThreadedProxyResolver(sync_resolver_factory, num_pac_threads); | 431 new MultiThreadedProxyResolver(sync_resolver_factory, num_pac_threads); |
| 435 | 432 |
| 436 ProxyService* proxy_service = | 433 ProxyService* proxy_service = |
| 437 new ProxyService(proxy_config_service, proxy_resolver, net_log); | 434 new ProxyService(proxy_config_service, proxy_resolver, net_log); |
| 438 | 435 |
| 439 // Configure fetchers to use for PAC script downloads and auto-detect. | 436 // Configure PAC script downloads to be issued using |proxy_script_fetcher|. |
| 440 proxy_service->SetProxyScriptFetchers(proxy_script_fetcher, | 437 proxy_service->SetProxyScriptFetcher(proxy_script_fetcher); |
| 441 dhcp_proxy_script_fetcher); | |
| 442 | 438 |
| 443 return proxy_service; | 439 return proxy_service; |
| 444 } | 440 } |
| 445 | 441 |
| 446 // static | 442 // static |
| 447 ProxyService* ProxyService::CreateUsingSystemProxyResolver( | 443 ProxyService* ProxyService::CreateUsingSystemProxyResolver( |
| 448 ProxyConfigService* proxy_config_service, | 444 ProxyConfigService* proxy_config_service, |
| 449 size_t num_pac_threads, | 445 size_t num_pac_threads, |
| 450 NetLog* net_log) { | 446 NetLog* net_log) { |
| 451 DCHECK(proxy_config_service); | 447 DCHECK(proxy_config_service); |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 result_code = OK; | 767 result_code = OK; |
| 772 } else { | 768 } else { |
| 773 result_code = ERR_MANDATORY_PROXY_CONFIGURATION_FAILED; | 769 result_code = ERR_MANDATORY_PROXY_CONFIGURATION_FAILED; |
| 774 } | 770 } |
| 775 } | 771 } |
| 776 | 772 |
| 777 net_log.EndEvent(NetLog::TYPE_PROXY_SERVICE, NULL); | 773 net_log.EndEvent(NetLog::TYPE_PROXY_SERVICE, NULL); |
| 778 return result_code; | 774 return result_code; |
| 779 } | 775 } |
| 780 | 776 |
| 781 void ProxyService::SetProxyScriptFetchers( | 777 void ProxyService::SetProxyScriptFetcher( |
| 782 ProxyScriptFetcher* proxy_script_fetcher, | 778 ProxyScriptFetcher* proxy_script_fetcher) { |
| 783 DhcpProxyScriptFetcher* dhcp_proxy_script_fetcher) { | |
| 784 DCHECK(CalledOnValidThread()); | 779 DCHECK(CalledOnValidThread()); |
| 785 State previous_state = ResetProxyConfig(false); | 780 State previous_state = ResetProxyConfig(false); |
| 786 proxy_script_fetcher_.reset(proxy_script_fetcher); | 781 proxy_script_fetcher_.reset(proxy_script_fetcher); |
| 787 dhcp_proxy_script_fetcher_.reset(dhcp_proxy_script_fetcher); | |
| 788 if (previous_state != STATE_NONE) | 782 if (previous_state != STATE_NONE) |
| 789 ApplyProxyConfigIfAvailable(); | 783 ApplyProxyConfigIfAvailable(); |
| 790 } | 784 } |
| 791 | 785 |
| 792 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const { | 786 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const { |
| 793 DCHECK(CalledOnValidThread()); | 787 DCHECK(CalledOnValidThread()); |
| 794 return proxy_script_fetcher_.get(); | 788 return proxy_script_fetcher_.get(); |
| 795 } | 789 } |
| 796 | 790 |
| 797 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) { | 791 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) { |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 926 if (!fetched_config_.HasAutomaticSettings()) { | 920 if (!fetched_config_.HasAutomaticSettings()) { |
| 927 config_ = fetched_config_; | 921 config_ = fetched_config_; |
| 928 SetReady(); | 922 SetReady(); |
| 929 return; | 923 return; |
| 930 } | 924 } |
| 931 | 925 |
| 932 // Start downloading + testing the PAC scripts for this new configuration. | 926 // Start downloading + testing the PAC scripts for this new configuration. |
| 933 current_state_ = STATE_WAITING_FOR_INIT_PROXY_RESOLVER; | 927 current_state_ = STATE_WAITING_FOR_INIT_PROXY_RESOLVER; |
| 934 | 928 |
| 935 init_proxy_resolver_.reset( | 929 init_proxy_resolver_.reset( |
| 936 new InitProxyResolver(resolver_.get(), | 930 new InitProxyResolver(resolver_.get(), proxy_script_fetcher_.get(), |
| 937 proxy_script_fetcher_.get(), | |
| 938 dhcp_proxy_script_fetcher_.get(), | |
| 939 net_log_)); | 931 net_log_)); |
| 940 | 932 |
| 941 // If we changed networks recently, we should delay running proxy auto-config. | 933 // If we changed networks recently, we should delay running proxy auto-config. |
| 942 base::TimeDelta wait_delay = | 934 base::TimeDelta wait_delay = |
| 943 stall_proxy_autoconfig_until_ - base::TimeTicks::Now(); | 935 stall_proxy_autoconfig_until_ - base::TimeTicks::Now(); |
| 944 | 936 |
| 945 int rv = init_proxy_resolver_->Init( | 937 int rv = init_proxy_resolver_->Init( |
| 946 fetched_config_, wait_delay, &config_, &init_proxy_resolver_callback_); | 938 fetched_config_, wait_delay, &config_, &init_proxy_resolver_callback_); |
| 947 | 939 |
| 948 if (rv != ERR_IO_PENDING) | 940 if (rv != ERR_IO_PENDING) |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 OnCompletion(result_); | 1011 OnCompletion(result_); |
| 1020 } | 1012 } |
| 1021 } | 1013 } |
| 1022 | 1014 |
| 1023 void SyncProxyServiceHelper::OnCompletion(int rv) { | 1015 void SyncProxyServiceHelper::OnCompletion(int rv) { |
| 1024 result_ = rv; | 1016 result_ = rv; |
| 1025 event_.Signal(); | 1017 event_.Signal(); |
| 1026 } | 1018 } |
| 1027 | 1019 |
| 1028 } // namespace net | 1020 } // namespace net |
| OLD | NEW |