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

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

Issue 2315613002: Extracted NetLog class's inner enum types into their own enum classes and (Closed)
Patch Set: Ran "git cl format" on code. Much formatting ensued. Created 4 years, 3 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_script_decider_unittest.cc ('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
(...skipping 10 matching lines...) Expand all
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/net_errors.h" 27 #include "net/base/net_errors.h"
28 #include "net/base/proxy_delegate.h" 28 #include "net/base/proxy_delegate.h"
29 #include "net/base/url_util.h" 29 #include "net/base/url_util.h"
30 #include "net/log/net_log.h" 30 #include "net/log/net_log.h"
31 #include "net/log/net_log_event_type.h"
31 #include "net/proxy/dhcp_proxy_script_fetcher.h" 32 #include "net/proxy/dhcp_proxy_script_fetcher.h"
32 #include "net/proxy/multi_threaded_proxy_resolver.h" 33 #include "net/proxy/multi_threaded_proxy_resolver.h"
33 #include "net/proxy/proxy_config_service_fixed.h" 34 #include "net/proxy/proxy_config_service_fixed.h"
34 #include "net/proxy/proxy_resolver.h" 35 #include "net/proxy/proxy_resolver.h"
35 #include "net/proxy/proxy_resolver_factory.h" 36 #include "net/proxy/proxy_resolver_factory.h"
36 #include "net/proxy/proxy_script_decider.h" 37 #include "net/proxy/proxy_script_decider.h"
37 #include "net/proxy/proxy_script_fetcher.h" 38 #include "net/proxy/proxy_script_fetcher.h"
38 #include "net/url_request/url_request_context.h" 39 #include "net/url_request/url_request_context.h"
39 #include "url/gurl.h" 40 #include "url/gurl.h"
40 41
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 839
839 void CancelResolveJob() { 840 void CancelResolveJob() {
840 DCHECK(is_started()); 841 DCHECK(is_started());
841 // The request may already be running in the resolver. 842 // The request may already be running in the resolver.
842 resolver()->CancelRequest(resolve_job_); 843 resolver()->CancelRequest(resolve_job_);
843 resolve_job_ = NULL; 844 resolve_job_ = NULL;
844 DCHECK(!is_started()); 845 DCHECK(!is_started());
845 } 846 }
846 847
847 void Cancel() { 848 void Cancel() {
848 net_log_.AddEvent(NetLog::TYPE_CANCELLED); 849 net_log_.AddEvent(NetLogEventType::CANCELLED);
849 850
850 if (is_started()) 851 if (is_started())
851 CancelResolveJob(); 852 CancelResolveJob();
852 853
853 // Mark as cancelled, to prevent accessing this again later. 854 // Mark as cancelled, to prevent accessing this again later.
854 service_ = NULL; 855 service_ = NULL;
855 user_callback_.Reset(); 856 user_callback_.Reset();
856 results_ = NULL; 857 results_ = NULL;
857 858
858 net_log_.EndEvent(NetLog::TYPE_PROXY_SERVICE); 859 net_log_.EndEvent(NetLogEventType::PROXY_SERVICE);
859 } 860 }
860 861
861 // Returns true if Cancel() has been called. 862 // Returns true if Cancel() has been called.
862 bool was_cancelled() const { 863 bool was_cancelled() const {
863 return user_callback_.is_null(); 864 return user_callback_.is_null();
864 } 865 }
865 866
866 // Helper to call after ProxyResolver completion (both synchronous and 867 // Helper to call after ProxyResolver completion (both synchronous and
867 // asynchronous). Fixes up the result that is to be returned to user. 868 // asynchronous). Fixes up the result that is to be returned to user.
868 int QueryDidComplete(int result_code) { 869 int QueryDidComplete(int result_code) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 1048
1048 int ProxyService::ResolveProxyHelper(const GURL& raw_url, 1049 int ProxyService::ResolveProxyHelper(const GURL& raw_url,
1049 const std::string& method, 1050 const std::string& method,
1050 ProxyInfo* result, 1051 ProxyInfo* result,
1051 const CompletionCallback& callback, 1052 const CompletionCallback& callback,
1052 PacRequest** pac_request, 1053 PacRequest** pac_request,
1053 ProxyDelegate* proxy_delegate, 1054 ProxyDelegate* proxy_delegate,
1054 const BoundNetLog& net_log) { 1055 const BoundNetLog& net_log) {
1055 DCHECK(CalledOnValidThread()); 1056 DCHECK(CalledOnValidThread());
1056 1057
1057 net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); 1058 net_log.BeginEvent(NetLogEventType::PROXY_SERVICE);
1058 1059
1059 // Notify our polling-based dependencies that a resolve is taking place. 1060 // Notify our polling-based dependencies that a resolve is taking place.
1060 // This way they can schedule their polls in response to network activity. 1061 // This way they can schedule their polls in response to network activity.
1061 config_service_->OnLazyPoll(); 1062 config_service_->OnLazyPoll();
1062 if (script_poller_.get()) 1063 if (script_poller_.get())
1063 script_poller_->OnLazyPoll(); 1064 script_poller_->OnLazyPoll();
1064 1065
1065 if (current_state_ == STATE_NONE) 1066 if (current_state_ == STATE_NONE)
1066 ApplyProxyConfigIfAvailable(); 1067 ApplyProxyConfigIfAvailable();
1067 1068
(...skipping 18 matching lines...) Expand all
1086 1087
1087 scoped_refptr<PacRequest> req(new PacRequest( 1088 scoped_refptr<PacRequest> req(new PacRequest(
1088 this, url, method, proxy_delegate, result, callback, net_log)); 1089 this, url, method, proxy_delegate, result, callback, net_log));
1089 1090
1090 if (current_state_ == STATE_READY) { 1091 if (current_state_ == STATE_READY) {
1091 // Start the resolve request. 1092 // Start the resolve request.
1092 rv = req->Start(); 1093 rv = req->Start();
1093 if (rv != ERR_IO_PENDING) 1094 if (rv != ERR_IO_PENDING)
1094 return req->QueryDidComplete(rv); 1095 return req->QueryDidComplete(rv);
1095 } else { 1096 } else {
1096 req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); 1097 req->net_log()->BeginEvent(
1098 NetLogEventType::PROXY_SERVICE_WAITING_FOR_INIT_PAC);
1097 } 1099 }
1098 1100
1099 DCHECK_EQ(ERR_IO_PENDING, rv); 1101 DCHECK_EQ(ERR_IO_PENDING, rv);
1100 DCHECK(!ContainsPendingRequest(req.get())); 1102 DCHECK(!ContainsPendingRequest(req.get()));
1101 pending_requests_.insert(req); 1103 pending_requests_.insert(req);
1102 1104
1103 // Completion will be notified through |callback|, unless the caller cancels 1105 // Completion will be notified through |callback|, unless the caller cancels
1104 // the request using |pac_request|. 1106 // the request using |pac_request|.
1105 if (pac_request) 1107 if (pac_request)
1106 *pac_request = req.get(); 1108 *pac_request = req.get();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 1161
1160 void ProxyService::SuspendAllPendingRequests() { 1162 void ProxyService::SuspendAllPendingRequests() {
1161 for (PendingRequests::iterator it = pending_requests_.begin(); 1163 for (PendingRequests::iterator it = pending_requests_.begin();
1162 it != pending_requests_.end(); 1164 it != pending_requests_.end();
1163 ++it) { 1165 ++it) {
1164 PacRequest* req = it->get(); 1166 PacRequest* req = it->get();
1165 if (req->is_started()) { 1167 if (req->is_started()) {
1166 req->CancelResolveJob(); 1168 req->CancelResolveJob();
1167 1169
1168 req->net_log()->BeginEvent( 1170 req->net_log()->BeginEvent(
1169 NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); 1171 NetLogEventType::PROXY_SERVICE_WAITING_FOR_INIT_PAC);
1170 } 1172 }
1171 } 1173 }
1172 } 1174 }
1173 1175
1174 void ProxyService::SetReady() { 1176 void ProxyService::SetReady() {
1175 DCHECK(!init_proxy_resolver_.get()); 1177 DCHECK(!init_proxy_resolver_.get());
1176 current_state_ = STATE_READY; 1178 current_state_ = STATE_READY;
1177 1179
1178 // Make a copy in case |this| is deleted during the synchronous completion 1180 // Make a copy in case |this| is deleted during the synchronous completion
1179 // of one of the requests. If |this| is deleted then all of the PacRequest 1181 // of one of the requests. If |this| is deleted then all of the PacRequest
1180 // instances will be Cancel()-ed. 1182 // instances will be Cancel()-ed.
1181 PendingRequests pending_copy = pending_requests_; 1183 PendingRequests pending_copy = pending_requests_;
1182 1184
1183 for (PendingRequests::iterator it = pending_copy.begin(); 1185 for (PendingRequests::iterator it = pending_copy.begin();
1184 it != pending_copy.end(); 1186 it != pending_copy.end();
1185 ++it) { 1187 ++it) {
1186 PacRequest* req = it->get(); 1188 PacRequest* req = it->get();
1187 if (!req->is_started() && !req->was_cancelled()) { 1189 if (!req->is_started() && !req->was_cancelled()) {
1188 req->net_log()->EndEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); 1190 req->net_log()->EndEvent(
1191 NetLogEventType::PROXY_SERVICE_WAITING_FOR_INIT_PAC);
1189 1192
1190 // Note that we re-check for synchronous completion, in case we are 1193 // Note that we re-check for synchronous completion, in case we are
1191 // no longer using a ProxyResolver (can happen if we fell-back to manual). 1194 // no longer using a ProxyResolver (can happen if we fell-back to manual).
1192 req->StartAndCompleteCheckingForSynchronous(); 1195 req->StartAndCompleteCheckingForSynchronous();
1193 } 1196 }
1194 } 1197 }
1195 } 1198 }
1196 1199
1197 void ProxyService::ApplyProxyConfigIfAvailable() { 1200 void ProxyService::ApplyProxyConfigIfAvailable() {
1198 DCHECK_EQ(STATE_NONE, current_state_); 1201 DCHECK_EQ(STATE_NONE, current_state_);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 ProxyServer::FromURI(iter->first, ProxyServer::SCHEME_HTTP); 1340 ProxyServer::FromURI(iter->first, ProxyServer::SCHEME_HTTP);
1338 const ProxyRetryInfo& proxy_retry_info = iter->second; 1341 const ProxyRetryInfo& proxy_retry_info = iter->second;
1339 proxy_delegate->OnFallback(bad_proxy, proxy_retry_info.net_error); 1342 proxy_delegate->OnFallback(bad_proxy, proxy_retry_info.net_error);
1340 } 1343 }
1341 } 1344 }
1342 else if (existing->second.bad_until < iter->second.bad_until) 1345 else if (existing->second.bad_until < iter->second.bad_until)
1343 existing->second.bad_until = iter->second.bad_until; 1346 existing->second.bad_until = iter->second.bad_until;
1344 } 1347 }
1345 if (net_log_) { 1348 if (net_log_) {
1346 net_log_->AddGlobalEntry( 1349 net_log_->AddGlobalEntry(
1347 NetLog::TYPE_BAD_PROXY_LIST_REPORTED, 1350 NetLogEventType::BAD_PROXY_LIST_REPORTED,
1348 base::Bind(&NetLogBadProxyListCallback, &new_retry_info)); 1351 base::Bind(&NetLogBadProxyListCallback, &new_retry_info));
1349 } 1352 }
1350 } 1353 }
1351 1354
1352 void ProxyService::CancelPacRequest(PacRequest* req) { 1355 void ProxyService::CancelPacRequest(PacRequest* req) {
1353 DCHECK(CalledOnValidThread()); 1356 DCHECK(CalledOnValidThread());
1354 DCHECK(req); 1357 DCHECK(req);
1355 req->Cancel(); 1358 req->Cancel();
1356 RemovePendingRequest(req); 1359 RemovePendingRequest(req);
1357 } 1360 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 base::TimeDelta::FromSeconds(20), 50); 1406 base::TimeDelta::FromSeconds(20), 50);
1404 } 1407 }
1405 1408
1406 // Log the result of the proxy resolution. 1409 // Log the result of the proxy resolution.
1407 if (result_code == OK) { 1410 if (result_code == OK) {
1408 // Allow the proxy delegate to interpose on the resolution decision, 1411 // Allow the proxy delegate to interpose on the resolution decision,
1409 // possibly modifying the ProxyInfo. 1412 // possibly modifying the ProxyInfo.
1410 if (proxy_delegate) 1413 if (proxy_delegate)
1411 proxy_delegate->OnResolveProxy(url, method, *this, result); 1414 proxy_delegate->OnResolveProxy(url, method, *this, result);
1412 1415
1413 net_log.AddEvent(NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, 1416 net_log.AddEvent(NetLogEventType::PROXY_SERVICE_RESOLVED_PROXY_LIST,
1414 base::Bind(&NetLogFinishedResolvingProxyCallback, result)); 1417 base::Bind(&NetLogFinishedResolvingProxyCallback, result));
1415 1418
1416 // This check is done to only log the NetLog event when necessary, it's 1419 // This check is done to only log the NetLog event when necessary, it's
1417 // not a performance optimization. 1420 // not a performance optimization.
1418 if (!proxy_retry_info_.empty()) { 1421 if (!proxy_retry_info_.empty()) {
1419 result->DeprioritizeBadProxies(proxy_retry_info_); 1422 result->DeprioritizeBadProxies(proxy_retry_info_);
1420 net_log.AddEvent( 1423 net_log.AddEvent(
1421 NetLog::TYPE_PROXY_SERVICE_DEPRIORITIZED_BAD_PROXIES, 1424 NetLogEventType::PROXY_SERVICE_DEPRIORITIZED_BAD_PROXIES,
1422 base::Bind(&NetLogFinishedResolvingProxyCallback, result)); 1425 base::Bind(&NetLogFinishedResolvingProxyCallback, result));
1423 } 1426 }
1424 } else { 1427 } else {
1425 net_log.AddEventWithNetErrorCode( 1428 net_log.AddEventWithNetErrorCode(
1426 NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, result_code); 1429 NetLogEventType::PROXY_SERVICE_RESOLVED_PROXY_LIST, result_code);
1427 1430
1428 bool reset_config = result_code == ERR_PAC_SCRIPT_TERMINATED; 1431 bool reset_config = result_code == ERR_PAC_SCRIPT_TERMINATED;
1429 if (!config_.pac_mandatory()) { 1432 if (!config_.pac_mandatory()) {
1430 // Fall-back to direct when the proxy resolver fails. This corresponds 1433 // Fall-back to direct when the proxy resolver fails. This corresponds
1431 // with a javascript runtime error in the PAC script. 1434 // with a javascript runtime error in the PAC script.
1432 // 1435 //
1433 // This implicit fall-back to direct matches Firefox 3.5 and 1436 // This implicit fall-back to direct matches Firefox 3.5 and
1434 // Internet Explorer 8. For more information, see: 1437 // Internet Explorer 8. For more information, see:
1435 // 1438 //
1436 // http://www.chromium.org/developers/design-documents/proxy-settings-fall back 1439 // http://www.chromium.org/developers/design-documents/proxy-settings-fall back
(...skipping 10 matching lines...) Expand all
1447 if (reset_config) { 1450 if (reset_config) {
1448 ResetProxyConfig(false); 1451 ResetProxyConfig(false);
1449 // If the ProxyResolver crashed, force it to be re-initialized for the 1452 // If the ProxyResolver crashed, force it to be re-initialized for the
1450 // next request by resetting the proxy config. If there are other pending 1453 // next request by resetting the proxy config. If there are other pending
1451 // requests, trigger the recreation immediately so those requests retry. 1454 // requests, trigger the recreation immediately so those requests retry.
1452 if (pending_requests_.size() > 1) 1455 if (pending_requests_.size() > 1)
1453 ApplyProxyConfigIfAvailable(); 1456 ApplyProxyConfigIfAvailable();
1454 } 1457 }
1455 } 1458 }
1456 1459
1457 net_log.EndEvent(NetLog::TYPE_PROXY_SERVICE); 1460 net_log.EndEvent(NetLogEventType::PROXY_SERVICE);
1458 return result_code; 1461 return result_code;
1459 } 1462 }
1460 1463
1461 void ProxyService::SetProxyScriptFetchers( 1464 void ProxyService::SetProxyScriptFetchers(
1462 ProxyScriptFetcher* proxy_script_fetcher, 1465 ProxyScriptFetcher* proxy_script_fetcher,
1463 std::unique_ptr<DhcpProxyScriptFetcher> dhcp_proxy_script_fetcher) { 1466 std::unique_ptr<DhcpProxyScriptFetcher> dhcp_proxy_script_fetcher) {
1464 DCHECK(CalledOnValidThread()); 1467 DCHECK(CalledOnValidThread());
1465 State previous_state = ResetProxyConfig(false); 1468 State previous_state = ResetProxyConfig(false);
1466 proxy_script_fetcher_.reset(proxy_script_fetcher); 1469 proxy_script_fetcher_.reset(proxy_script_fetcher);
1467 dhcp_proxy_script_fetcher_ = std::move(dhcp_proxy_script_fetcher); 1470 dhcp_proxy_script_fetcher_ = std::move(dhcp_proxy_script_fetcher);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 case ProxyConfigService::CONFIG_VALID: 1589 case ProxyConfigService::CONFIG_VALID:
1587 effective_config = config; 1590 effective_config = config;
1588 break; 1591 break;
1589 case ProxyConfigService::CONFIG_UNSET: 1592 case ProxyConfigService::CONFIG_UNSET:
1590 effective_config = ProxyConfig::CreateDirect(); 1593 effective_config = ProxyConfig::CreateDirect();
1591 break; 1594 break;
1592 } 1595 }
1593 1596
1594 // Emit the proxy settings change to the NetLog stream. 1597 // Emit the proxy settings change to the NetLog stream.
1595 if (net_log_) { 1598 if (net_log_) {
1596 net_log_->AddGlobalEntry(NetLog::TYPE_PROXY_CONFIG_CHANGED, 1599 net_log_->AddGlobalEntry(NetLogEventType::PROXY_CONFIG_CHANGED,
1597 base::Bind(&NetLogProxyConfigChangedCallback, 1600 base::Bind(&NetLogProxyConfigChangedCallback,
1598 &fetched_config_, &effective_config)); 1601 &fetched_config_, &effective_config));
1599 } 1602 }
1600 1603
1601 // Set the new configuration as the most recently fetched one. 1604 // Set the new configuration as the most recently fetched one.
1602 fetched_config_ = effective_config; 1605 fetched_config_ = effective_config;
1603 fetched_config_.set_id(1); // Needed for a later DCHECK of is_valid(). 1606 fetched_config_.set_id(1); // Needed for a later DCHECK of is_valid().
1604 1607
1605 InitializeUsingLastFetchedConfig(); 1608 InitializeUsingLastFetchedConfig();
1606 } 1609 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 State previous_state = ResetProxyConfig(false); 1670 State previous_state = ResetProxyConfig(false);
1668 if (previous_state != STATE_NONE) 1671 if (previous_state != STATE_NONE)
1669 ApplyProxyConfigIfAvailable(); 1672 ApplyProxyConfigIfAvailable();
1670 } 1673 }
1671 1674
1672 void ProxyService::OnDNSChanged() { 1675 void ProxyService::OnDNSChanged() {
1673 OnIPAddressChanged(); 1676 OnIPAddressChanged();
1674 } 1677 }
1675 1678
1676 } // namespace net 1679 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_script_decider_unittest.cc ('k') | net/proxy/proxy_service_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698