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

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

Issue 2110973002: Removing load_flags from ProxyService and ProxyDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 5 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
« no previous file with comments | « net/proxy/proxy_service.h ('k') | net/proxy/proxy_service_mojo_unittest.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include <cmath> 8 #include <cmath>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "base/metrics/histogram_macros.h" 19 #include "base/metrics/histogram_macros.h"
20 #include "base/metrics/sparse_histogram.h" 20 #include "base/metrics/sparse_histogram.h"
21 #include "base/single_thread_task_runner.h" 21 #include "base/single_thread_task_runner.h"
22 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
23 #include "base/threading/thread_task_runner_handle.h" 23 #include "base/threading/thread_task_runner_handle.h"
24 #include "base/time/time.h" 24 #include "base/time/time.h"
25 #include "base/values.h" 25 #include "base/values.h"
26 #include "net/base/completion_callback.h" 26 #include "net/base/completion_callback.h"
27 #include "net/base/load_flags.h"
28 #include "net/base/net_errors.h" 27 #include "net/base/net_errors.h"
29 #include "net/base/proxy_delegate.h" 28 #include "net/base/proxy_delegate.h"
30 #include "net/base/url_util.h" 29 #include "net/base/url_util.h"
31 #include "net/log/net_log.h" 30 #include "net/log/net_log.h"
32 #include "net/proxy/dhcp_proxy_script_fetcher.h" 31 #include "net/proxy/dhcp_proxy_script_fetcher.h"
33 #include "net/proxy/multi_threaded_proxy_resolver.h" 32 #include "net/proxy/multi_threaded_proxy_resolver.h"
34 #include "net/proxy/proxy_config_service_fixed.h" 33 #include "net/proxy/proxy_config_service_fixed.h"
35 #include "net/proxy/proxy_resolver.h" 34 #include "net/proxy/proxy_resolver.h"
36 #include "net/proxy/proxy_resolver_factory.h" 35 #include "net/proxy/proxy_resolver_factory.h"
37 #include "net/proxy/proxy_script_decider.h" 36 #include "net/proxy/proxy_script_decider.h"
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 ProxyService::ProxyScriptDeciderPoller::poll_policy_ = NULL; 781 ProxyService::ProxyScriptDeciderPoller::poll_policy_ = NULL;
783 782
784 // ProxyService::PacRequest --------------------------------------------------- 783 // ProxyService::PacRequest ---------------------------------------------------
785 784
786 class ProxyService::PacRequest 785 class ProxyService::PacRequest
787 : public base::RefCounted<ProxyService::PacRequest> { 786 : public base::RefCounted<ProxyService::PacRequest> {
788 public: 787 public:
789 PacRequest(ProxyService* service, 788 PacRequest(ProxyService* service,
790 const GURL& url, 789 const GURL& url,
791 const std::string& method, 790 const std::string& method,
792 int load_flags,
793 ProxyDelegate* proxy_delegate, 791 ProxyDelegate* proxy_delegate,
794 ProxyInfo* results, 792 ProxyInfo* results,
795 const CompletionCallback& user_callback, 793 const CompletionCallback& user_callback,
796 const BoundNetLog& net_log) 794 const BoundNetLog& net_log)
797 : service_(service), 795 : service_(service),
798 user_callback_(user_callback), 796 user_callback_(user_callback),
799 results_(results), 797 results_(results),
800 url_(url), 798 url_(url),
801 method_(method), 799 method_(method),
802 load_flags_(load_flags),
803 proxy_delegate_(proxy_delegate), 800 proxy_delegate_(proxy_delegate),
804 resolve_job_(NULL), 801 resolve_job_(NULL),
805 config_id_(ProxyConfig::kInvalidConfigID), 802 config_id_(ProxyConfig::kInvalidConfigID),
806 config_source_(PROXY_CONFIG_SOURCE_UNKNOWN), 803 config_source_(PROXY_CONFIG_SOURCE_UNKNOWN),
807 net_log_(net_log), 804 net_log_(net_log),
808 creation_time_(TimeTicks::Now()) { 805 creation_time_(TimeTicks::Now()) {
809 DCHECK(!user_callback.is_null()); 806 DCHECK(!user_callback.is_null());
810 } 807 }
811 808
812 // Starts the resolve proxy request. 809 // Starts the resolve proxy request.
(...skipping 11 matching lines...) Expand all
824 base::Bind(&PacRequest::QueryComplete, base::Unretained(this)), 821 base::Bind(&PacRequest::QueryComplete, base::Unretained(this)),
825 &resolve_job_, net_log_); 822 &resolve_job_, net_log_);
826 } 823 }
827 824
828 bool is_started() const { 825 bool is_started() const {
829 // Note that !! casts to bool. (VS gives a warning otherwise). 826 // Note that !! casts to bool. (VS gives a warning otherwise).
830 return !!resolve_job_; 827 return !!resolve_job_;
831 } 828 }
832 829
833 void StartAndCompleteCheckingForSynchronous() { 830 void StartAndCompleteCheckingForSynchronous() {
834 int rv = service_->TryToCompleteSynchronously(url_, load_flags_, 831 int rv =
835 proxy_delegate_, results_); 832 service_->TryToCompleteSynchronously(url_, proxy_delegate_, results_);
836 if (rv == ERR_IO_PENDING) 833 if (rv == ERR_IO_PENDING)
837 rv = Start(); 834 rv = Start();
838 if (rv != ERR_IO_PENDING) 835 if (rv != ERR_IO_PENDING)
839 QueryComplete(rv); 836 QueryComplete(rv);
840 } 837 }
841 838
842 void CancelResolveJob() { 839 void CancelResolveJob() {
843 DCHECK(is_started()); 840 DCHECK(is_started());
844 // The request may already be running in the resolver. 841 // The request may already be running in the resolver.
845 resolver()->CancelRequest(resolve_job_); 842 resolver()->CancelRequest(resolve_job_);
(...skipping 26 matching lines...) Expand all
872 DCHECK(!was_cancelled()); 869 DCHECK(!was_cancelled());
873 870
874 // This state is cleared when resolve_job_ is set to nullptr below. 871 // This state is cleared when resolve_job_ is set to nullptr below.
875 bool script_executed = is_started(); 872 bool script_executed = is_started();
876 873
877 // Clear |resolve_job_| so is_started() returns false while 874 // Clear |resolve_job_| so is_started() returns false while
878 // DidFinishResolvingProxy() runs. 875 // DidFinishResolvingProxy() runs.
879 resolve_job_ = nullptr; 876 resolve_job_ = nullptr;
880 877
881 // Note that DidFinishResolvingProxy might modify |results_|. 878 // Note that DidFinishResolvingProxy might modify |results_|.
882 int rv = service_->DidFinishResolvingProxy( 879 int rv = service_->DidFinishResolvingProxy(url_, method_, proxy_delegate_,
883 url_, method_, load_flags_, proxy_delegate_, results_, result_code, 880 results_, result_code, net_log_,
884 net_log_, creation_time_, script_executed); 881 creation_time_, script_executed);
885 882
886 // Make a note in the results which configuration was in use at the 883 // Make a note in the results which configuration was in use at the
887 // time of the resolve. 884 // time of the resolve.
888 results_->config_id_ = config_id_; 885 results_->config_id_ = config_id_;
889 results_->config_source_ = config_source_; 886 results_->config_source_ = config_source_;
890 results_->did_use_pac_script_ = true; 887 results_->did_use_pac_script_ = true;
891 results_->proxy_resolve_start_time_ = creation_time_; 888 results_->proxy_resolve_start_time_ = creation_time_;
892 results_->proxy_resolve_end_time_ = TimeTicks::Now(); 889 results_->proxy_resolve_end_time_ = TimeTicks::Now();
893 890
894 // Reset the state associated with in-progress-resolve. 891 // Reset the state associated with in-progress-resolve.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 ProxyResolver* resolver() const { return service_->resolver_.get(); } 924 ProxyResolver* resolver() const { return service_->resolver_.get(); }
928 925
929 // Note that we don't hold a reference to the ProxyService. Outstanding 926 // Note that we don't hold a reference to the ProxyService. Outstanding
930 // requests are cancelled during ~ProxyService, so this is guaranteed 927 // requests are cancelled during ~ProxyService, so this is guaranteed
931 // to be valid throughout our lifetime. 928 // to be valid throughout our lifetime.
932 ProxyService* service_; 929 ProxyService* service_;
933 CompletionCallback user_callback_; 930 CompletionCallback user_callback_;
934 ProxyInfo* results_; 931 ProxyInfo* results_;
935 GURL url_; 932 GURL url_;
936 std::string method_; 933 std::string method_;
937 int load_flags_;
938 ProxyDelegate* proxy_delegate_; 934 ProxyDelegate* proxy_delegate_;
939 ProxyResolver::RequestHandle resolve_job_; 935 ProxyResolver::RequestHandle resolve_job_;
940 ProxyConfig::ID config_id_; // The config id when the resolve was started. 936 ProxyConfig::ID config_id_; // The config id when the resolve was started.
941 ProxyConfigSource config_source_; // The source of proxy settings. 937 ProxyConfigSource config_source_; // The source of proxy settings.
942 BoundNetLog net_log_; 938 BoundNetLog net_log_;
943 // Time when the request was created. Stored here rather than in |results_| 939 // Time when the request was created. Stored here rather than in |results_|
944 // because the time in |results_| will be cleared. 940 // because the time in |results_| will be cleared.
945 TimeTicks creation_time_; 941 TimeTicks creation_time_;
946 }; 942 };
947 943
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 new ProxyConfigServiceFixed(ProxyConfig::CreateAutoDetect())); 1028 new ProxyConfigServiceFixed(ProxyConfig::CreateAutoDetect()));
1033 1029
1034 return base::WrapUnique(new ProxyService( 1030 return base::WrapUnique(new ProxyService(
1035 std::move(proxy_config_service), 1031 std::move(proxy_config_service),
1036 base::WrapUnique(new ProxyResolverFactoryForPacResult(pac_string)), 1032 base::WrapUnique(new ProxyResolverFactoryForPacResult(pac_string)),
1037 NULL)); 1033 NULL));
1038 } 1034 }
1039 1035
1040 int ProxyService::ResolveProxy(const GURL& raw_url, 1036 int ProxyService::ResolveProxy(const GURL& raw_url,
1041 const std::string& method, 1037 const std::string& method,
1042 int load_flags,
1043 ProxyInfo* result, 1038 ProxyInfo* result,
1044 const CompletionCallback& callback, 1039 const CompletionCallback& callback,
1045 PacRequest** pac_request, 1040 PacRequest** pac_request,
1046 ProxyDelegate* proxy_delegate, 1041 ProxyDelegate* proxy_delegate,
1047 const BoundNetLog& net_log) { 1042 const BoundNetLog& net_log) {
1048 DCHECK(!callback.is_null()); 1043 DCHECK(!callback.is_null());
1049 return ResolveProxyHelper(raw_url, method, load_flags, result, callback, 1044 return ResolveProxyHelper(raw_url, method, result, callback, pac_request,
1050 pac_request, proxy_delegate, net_log); 1045 proxy_delegate, net_log);
1051 } 1046 }
1052 1047
1053 int ProxyService::ResolveProxyHelper(const GURL& raw_url, 1048 int ProxyService::ResolveProxyHelper(const GURL& raw_url,
1054 const std::string& method, 1049 const std::string& method,
1055 int load_flags,
1056 ProxyInfo* result, 1050 ProxyInfo* result,
1057 const CompletionCallback& callback, 1051 const CompletionCallback& callback,
1058 PacRequest** pac_request, 1052 PacRequest** pac_request,
1059 ProxyDelegate* proxy_delegate, 1053 ProxyDelegate* proxy_delegate,
1060 const BoundNetLog& net_log) { 1054 const BoundNetLog& net_log) {
1061 DCHECK(CalledOnValidThread()); 1055 DCHECK(CalledOnValidThread());
1062 1056
1063 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); 1057 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE);
1064 1058
1065 // Notify our polling-based dependencies that a resolve is taking place. 1059 // Notify our polling-based dependencies that a resolve is taking place.
1066 // This way they can schedule their polls in response to network activity. 1060 // This way they can schedule their polls in response to network activity.
1067 config_service_->OnLazyPoll(); 1061 config_service_->OnLazyPoll();
1068 if (script_poller_.get()) 1062 if (script_poller_.get())
1069 script_poller_->OnLazyPoll(); 1063 script_poller_->OnLazyPoll();
1070 1064
1071 if (current_state_ == STATE_NONE) 1065 if (current_state_ == STATE_NONE)
1072 ApplyProxyConfigIfAvailable(); 1066 ApplyProxyConfigIfAvailable();
1073 1067
1074 // Sanitize the URL before passing it on to the proxy resolver (i.e. PAC 1068 // Sanitize the URL before passing it on to the proxy resolver (i.e. PAC
1075 // script). The goal is to remove sensitive data (like embedded user names 1069 // script). The goal is to remove sensitive data (like embedded user names
1076 // and password), and local data (i.e. reference fragment) which does not need 1070 // and password), and local data (i.e. reference fragment) which does not need
1077 // to be disclosed to the resolver. 1071 // to be disclosed to the resolver.
1078 GURL url = SanitizeUrl(raw_url, sanitize_url_policy_); 1072 GURL url = SanitizeUrl(raw_url, sanitize_url_policy_);
1079 1073
1080 // Check if the request can be completed right away. (This is the case when 1074 // Check if the request can be completed right away. (This is the case when
1081 // using a direct connection for example). 1075 // using a direct connection for example).
1082 int rv = TryToCompleteSynchronously(url, load_flags, proxy_delegate, result); 1076 int rv = TryToCompleteSynchronously(url, proxy_delegate, result);
1083 if (rv != ERR_IO_PENDING) { 1077 if (rv != ERR_IO_PENDING) {
1084 rv = DidFinishResolvingProxy( 1078 rv = DidFinishResolvingProxy(
1085 url, method, load_flags, proxy_delegate, result, rv, net_log, 1079 url, method, proxy_delegate, result, rv, net_log,
1086 callback.is_null() ? TimeTicks() : TimeTicks::Now(), false); 1080 callback.is_null() ? TimeTicks() : TimeTicks::Now(), false);
1087 return rv; 1081 return rv;
1088 } 1082 }
1089 1083
1090 if (callback.is_null()) 1084 if (callback.is_null())
1091 return ERR_IO_PENDING; 1085 return ERR_IO_PENDING;
1092 1086
1093 scoped_refptr<PacRequest> req(new PacRequest(this, url, method, load_flags, 1087 scoped_refptr<PacRequest> req(new PacRequest(
1094 proxy_delegate, result, callback, 1088 this, url, method, proxy_delegate, result, callback, net_log));
1095 net_log));
1096 1089
1097 if (current_state_ == STATE_READY) { 1090 if (current_state_ == STATE_READY) {
1098 // Start the resolve request. 1091 // Start the resolve request.
1099 rv = req->Start(); 1092 rv = req->Start();
1100 if (rv != ERR_IO_PENDING) 1093 if (rv != ERR_IO_PENDING)
1101 return req->QueryDidComplete(rv); 1094 return req->QueryDidComplete(rv);
1102 } else { 1095 } else {
1103 req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); 1096 req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC);
1104 } 1097 }
1105 1098
1106 DCHECK_EQ(ERR_IO_PENDING, rv); 1099 DCHECK_EQ(ERR_IO_PENDING, rv);
1107 DCHECK(!ContainsPendingRequest(req.get())); 1100 DCHECK(!ContainsPendingRequest(req.get()));
1108 pending_requests_.insert(req); 1101 pending_requests_.insert(req);
1109 1102
1110 // Completion will be notified through |callback|, unless the caller cancels 1103 // Completion will be notified through |callback|, unless the caller cancels
1111 // the request using |pac_request|. 1104 // the request using |pac_request|.
1112 if (pac_request) 1105 if (pac_request)
1113 *pac_request = req.get(); 1106 *pac_request = req.get();
1114 return rv; // ERR_IO_PENDING 1107 return rv; // ERR_IO_PENDING
1115 } 1108 }
1116 1109
1117 bool ProxyService::TryResolveProxySynchronously(const GURL& raw_url, 1110 bool ProxyService::TryResolveProxySynchronously(const GURL& raw_url,
1118 const std::string& method, 1111 const std::string& method,
1119 int load_flags,
1120 ProxyInfo* result, 1112 ProxyInfo* result,
1121 ProxyDelegate* proxy_delegate, 1113 ProxyDelegate* proxy_delegate,
1122 const BoundNetLog& net_log) { 1114 const BoundNetLog& net_log) {
1123 CompletionCallback null_callback; 1115 CompletionCallback null_callback;
1124 return ResolveProxyHelper(raw_url, method, load_flags, result, null_callback, 1116 return ResolveProxyHelper(raw_url, method, result, null_callback,
1125 nullptr /* pac_request*/, proxy_delegate, 1117 nullptr /* pac_request*/, proxy_delegate,
1126 net_log) == OK; 1118 net_log) == OK;
1127 } 1119 }
1128 1120
1129 int ProxyService::TryToCompleteSynchronously(const GURL& url, 1121 int ProxyService::TryToCompleteSynchronously(const GURL& url,
1130 int load_flags,
1131 ProxyDelegate* proxy_delegate, 1122 ProxyDelegate* proxy_delegate,
1132 ProxyInfo* result) { 1123 ProxyInfo* result) {
1133 DCHECK_NE(STATE_NONE, current_state_); 1124 DCHECK_NE(STATE_NONE, current_state_);
1134 1125
1135 if (current_state_ != STATE_READY) 1126 if (current_state_ != STATE_READY)
1136 return ERR_IO_PENDING; // Still initializing. 1127 return ERR_IO_PENDING; // Still initializing.
1137 1128
1138 DCHECK_NE(config_.id(), ProxyConfig::kInvalidConfigID); 1129 DCHECK_NE(config_.id(), ProxyConfig::kInvalidConfigID);
1139 1130
1140 // If it was impossible to fetch or parse the PAC script, we cannot complete 1131 // If it was impossible to fetch or parse the PAC script, we cannot complete
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 config_.set_id(fetched_config_.id()); 1266 config_.set_id(fetched_config_.id());
1276 config_.set_source(fetched_config_.source()); 1267 config_.set_source(fetched_config_.source());
1277 1268
1278 // Resume any requests which we had to defer until the PAC script was 1269 // Resume any requests which we had to defer until the PAC script was
1279 // downloaded. 1270 // downloaded.
1280 SetReady(); 1271 SetReady();
1281 } 1272 }
1282 1273
1283 int ProxyService::ReconsiderProxyAfterError(const GURL& url, 1274 int ProxyService::ReconsiderProxyAfterError(const GURL& url,
1284 const std::string& method, 1275 const std::string& method,
1285 int load_flags,
1286 int net_error, 1276 int net_error,
1287 ProxyInfo* result, 1277 ProxyInfo* result,
1288 const CompletionCallback& callback, 1278 const CompletionCallback& callback,
1289 PacRequest** pac_request, 1279 PacRequest** pac_request,
1290 ProxyDelegate* proxy_delegate, 1280 ProxyDelegate* proxy_delegate,
1291 const BoundNetLog& net_log) { 1281 const BoundNetLog& net_log) {
1292 DCHECK(CalledOnValidThread()); 1282 DCHECK(CalledOnValidThread());
1293 1283
1294 // Check to see if we have a new config since ResolveProxy was called. We 1284 // Check to see if we have a new config since ResolveProxy was called. We
1295 // want to re-run ResolveProxy in two cases: 1) we have a new config, or 2) a 1285 // want to re-run ResolveProxy in two cases: 1) we have a new config, or 2) a
1296 // direct connection failed and we never tried the current config. 1286 // direct connection failed and we never tried the current config.
1297 1287
1298 DCHECK(result); 1288 DCHECK(result);
1299 bool re_resolve = result->config_id_ != config_.id(); 1289 bool re_resolve = result->config_id_ != config_.id();
1300 1290
1301 if (re_resolve) { 1291 if (re_resolve) {
1302 // If we have a new config or the config was never tried, we delete the 1292 // If we have a new config or the config was never tried, we delete the
1303 // list of bad proxies and we try again. 1293 // list of bad proxies and we try again.
1304 proxy_retry_info_.clear(); 1294 proxy_retry_info_.clear();
1305 return ResolveProxy(url, method, load_flags, result, callback, pac_request, 1295 return ResolveProxy(url, method, result, callback, pac_request,
1306 proxy_delegate, net_log); 1296 proxy_delegate, net_log);
1307 } 1297 }
1308 1298
1309 DCHECK(!result->is_empty()); 1299 DCHECK(!result->is_empty());
1310 ProxyServer bad_proxy = result->proxy_server(); 1300 ProxyServer bad_proxy = result->proxy_server();
1311 1301
1312 // We don't have new proxy settings to try, try to fallback to the next proxy 1302 // We don't have new proxy settings to try, try to fallback to the next proxy
1313 // in the list. 1303 // in the list.
1314 bool did_fallback = result->Fallback(net_error, net_log); 1304 bool did_fallback = result->Fallback(net_error, net_log);
1315 1305
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1377 return pending_requests_.count(req) == 1; 1367 return pending_requests_.count(req) == 1;
1378 } 1368 }
1379 1369
1380 void ProxyService::RemovePendingRequest(PacRequest* req) { 1370 void ProxyService::RemovePendingRequest(PacRequest* req) {
1381 DCHECK(ContainsPendingRequest(req)); 1371 DCHECK(ContainsPendingRequest(req));
1382 pending_requests_.erase(req); 1372 pending_requests_.erase(req);
1383 } 1373 }
1384 1374
1385 int ProxyService::DidFinishResolvingProxy(const GURL& url, 1375 int ProxyService::DidFinishResolvingProxy(const GURL& url,
1386 const std::string& method, 1376 const std::string& method,
1387 int load_flags,
1388 ProxyDelegate* proxy_delegate, 1377 ProxyDelegate* proxy_delegate,
1389 ProxyInfo* result, 1378 ProxyInfo* result,
1390 int result_code, 1379 int result_code,
1391 const BoundNetLog& net_log, 1380 const BoundNetLog& net_log,
1392 base::TimeTicks start_time, 1381 base::TimeTicks start_time,
1393 bool script_executed) { 1382 bool script_executed) {
1394 // Don't track any metrics if start_time is 0, which will happen when the user 1383 // Don't track any metrics if start_time is 0, which will happen when the user
1395 // calls |TryResolveProxySynchronously|. 1384 // calls |TryResolveProxySynchronously|.
1396 if (!start_time.is_null()) { 1385 if (!start_time.is_null()) {
1397 TimeDelta diff = TimeTicks::Now() - start_time; 1386 TimeDelta diff = TimeTicks::Now() - start_time;
(...skipping 14 matching lines...) Expand all
1412 UMA_HISTOGRAM_CUSTOM_TIMES("Net.ProxyService.ResolveProxyTime", diff, 1401 UMA_HISTOGRAM_CUSTOM_TIMES("Net.ProxyService.ResolveProxyTime", diff,
1413 base::TimeDelta::FromMicroseconds(100), 1402 base::TimeDelta::FromMicroseconds(100),
1414 base::TimeDelta::FromSeconds(20), 50); 1403 base::TimeDelta::FromSeconds(20), 50);
1415 } 1404 }
1416 1405
1417 // Log the result of the proxy resolution. 1406 // Log the result of the proxy resolution.
1418 if (result_code == OK) { 1407 if (result_code == OK) {
1419 // Allow the proxy delegate to interpose on the resolution decision, 1408 // Allow the proxy delegate to interpose on the resolution decision,
1420 // possibly modifying the ProxyInfo. 1409 // possibly modifying the ProxyInfo.
1421 if (proxy_delegate) 1410 if (proxy_delegate)
1422 proxy_delegate->OnResolveProxy(url, method, load_flags, *this, result); 1411 proxy_delegate->OnResolveProxy(url, method, *this, result);
1423 1412
1424 net_log.AddEvent(NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, 1413 net_log.AddEvent(NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST,
1425 base::Bind(&NetLogFinishedResolvingProxyCallback, result)); 1414 base::Bind(&NetLogFinishedResolvingProxyCallback, result));
1426 1415
1427 // This check is done to only log the NetLog event when necessary, it's 1416 // This check is done to only log the NetLog event when necessary, it's
1428 // not a performance optimization. 1417 // not a performance optimization.
1429 if (!proxy_retry_info_.empty()) { 1418 if (!proxy_retry_info_.empty()) {
1430 result->DeprioritizeBadProxies(proxy_retry_info_); 1419 result->DeprioritizeBadProxies(proxy_retry_info_);
1431 net_log.AddEvent( 1420 net_log.AddEvent(
1432 NetLog::TYPE_PROXY_SERVICE_DEPRIORITIZED_BAD_PROXIES, 1421 NetLog::TYPE_PROXY_SERVICE_DEPRIORITIZED_BAD_PROXIES,
(...skipping 11 matching lines...) Expand all
1444 // This implicit fall-back to direct matches Firefox 3.5 and 1433 // This implicit fall-back to direct matches Firefox 3.5 and
1445 // Internet Explorer 8. For more information, see: 1434 // Internet Explorer 8. For more information, see:
1446 // 1435 //
1447 // http://www.chromium.org/developers/design-documents/proxy-settings-fall back 1436 // http://www.chromium.org/developers/design-documents/proxy-settings-fall back
1448 result->UseDirect(); 1437 result->UseDirect();
1449 result_code = OK; 1438 result_code = OK;
1450 1439
1451 // Allow the proxy delegate to interpose on the resolution decision, 1440 // Allow the proxy delegate to interpose on the resolution decision,
1452 // possibly modifying the ProxyInfo. 1441 // possibly modifying the ProxyInfo.
1453 if (proxy_delegate) 1442 if (proxy_delegate)
1454 proxy_delegate->OnResolveProxy(url, method, load_flags, *this, result); 1443 proxy_delegate->OnResolveProxy(url, method, *this, result);
1455 } else { 1444 } else {
1456 result_code = ERR_MANDATORY_PROXY_CONFIGURATION_FAILED; 1445 result_code = ERR_MANDATORY_PROXY_CONFIGURATION_FAILED;
1457 } 1446 }
1458 if (reset_config) { 1447 if (reset_config) {
1459 ResetProxyConfig(false); 1448 ResetProxyConfig(false);
1460 // If the ProxyResolver crashed, force it to be re-initialized for the 1449 // If the ProxyResolver crashed, force it to be re-initialized for the
1461 // next request by resetting the proxy config. If there are other pending 1450 // next request by resetting the proxy config. If there are other pending
1462 // requests, trigger the recreation immediately so those requests retry. 1451 // requests, trigger the recreation immediately so those requests retry.
1463 if (pending_requests_.size() > 1) 1452 if (pending_requests_.size() > 1)
1464 ApplyProxyConfigIfAvailable(); 1453 ApplyProxyConfigIfAvailable();
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1678 State previous_state = ResetProxyConfig(false); 1667 State previous_state = ResetProxyConfig(false);
1679 if (previous_state != STATE_NONE) 1668 if (previous_state != STATE_NONE)
1680 ApplyProxyConfigIfAvailable(); 1669 ApplyProxyConfigIfAvailable();
1681 } 1670 }
1682 1671
1683 void ProxyService::OnDNSChanged() { 1672 void ProxyService::OnDNSChanged() {
1684 OnIPAddressChanged(); 1673 OnIPAddressChanged();
1685 } 1674 }
1686 1675
1687 } // namespace net 1676 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_service.h ('k') | net/proxy/proxy_service_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698