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

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

Issue 2910473005: Deprecate NonThreadSafe in net/ in favor of SequenceChecker/ThreadChecker. (Closed)
Patch Set: rebase on r476634 Created 3 years, 6 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/ssl/channel_id_service.h » ('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 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 proxy_delegate, net_log); 1035 proxy_delegate, net_log);
1036 } 1036 }
1037 1037
1038 int ProxyService::ResolveProxyHelper(const GURL& raw_url, 1038 int ProxyService::ResolveProxyHelper(const GURL& raw_url,
1039 const std::string& method, 1039 const std::string& method,
1040 ProxyInfo* result, 1040 ProxyInfo* result,
1041 const CompletionCallback& callback, 1041 const CompletionCallback& callback,
1042 PacRequest** pac_request, 1042 PacRequest** pac_request,
1043 ProxyDelegate* proxy_delegate, 1043 ProxyDelegate* proxy_delegate,
1044 const NetLogWithSource& net_log) { 1044 const NetLogWithSource& net_log) {
1045 DCHECK(CalledOnValidThread()); 1045 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1046 1046
1047 net_log.BeginEvent(NetLogEventType::PROXY_SERVICE); 1047 net_log.BeginEvent(NetLogEventType::PROXY_SERVICE);
1048 1048
1049 // Notify our polling-based dependencies that a resolve is taking place. 1049 // Notify our polling-based dependencies that a resolve is taking place.
1050 // This way they can schedule their polls in response to network activity. 1050 // This way they can schedule their polls in response to network activity.
1051 config_service_->OnLazyPoll(); 1051 config_service_->OnLazyPoll();
1052 if (script_poller_.get()) 1052 if (script_poller_.get())
1053 script_poller_->OnLazyPoll(); 1053 script_poller_->OnLazyPoll();
1054 1054
1055 if (current_state_ == STATE_NONE) 1055 if (current_state_ == STATE_NONE)
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 1130
1131 // Use the manual proxy settings. 1131 // Use the manual proxy settings.
1132 config_.proxy_rules().Apply(url, result); 1132 config_.proxy_rules().Apply(url, result);
1133 result->config_source_ = config_.source(); 1133 result->config_source_ = config_.source();
1134 result->config_id_ = config_.id(); 1134 result->config_id_ = config_.id();
1135 1135
1136 return OK; 1136 return OK;
1137 } 1137 }
1138 1138
1139 ProxyService::~ProxyService() { 1139 ProxyService::~ProxyService() {
1140 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1140 NetworkChangeNotifier::RemoveIPAddressObserver(this); 1141 NetworkChangeNotifier::RemoveIPAddressObserver(this);
1141 NetworkChangeNotifier::RemoveDNSObserver(this); 1142 NetworkChangeNotifier::RemoveDNSObserver(this);
1142 config_service_->RemoveObserver(this); 1143 config_service_->RemoveObserver(this);
1143 1144
1144 // Cancel any inprogress requests. 1145 // Cancel any inprogress requests.
1145 for (PendingRequests::iterator it = pending_requests_.begin(); 1146 for (PendingRequests::iterator it = pending_requests_.begin();
1146 it != pending_requests_.end(); 1147 it != pending_requests_.end();
1147 ++it) { 1148 ++it) {
1148 (*it)->Cancel(); 1149 (*it)->Cancel();
1149 } 1150 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 } 1266 }
1266 1267
1267 int ProxyService::ReconsiderProxyAfterError(const GURL& url, 1268 int ProxyService::ReconsiderProxyAfterError(const GURL& url,
1268 const std::string& method, 1269 const std::string& method,
1269 int net_error, 1270 int net_error,
1270 ProxyInfo* result, 1271 ProxyInfo* result,
1271 const CompletionCallback& callback, 1272 const CompletionCallback& callback,
1272 PacRequest** pac_request, 1273 PacRequest** pac_request,
1273 ProxyDelegate* proxy_delegate, 1274 ProxyDelegate* proxy_delegate,
1274 const NetLogWithSource& net_log) { 1275 const NetLogWithSource& net_log) {
1275 DCHECK(CalledOnValidThread()); 1276 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1276 1277
1277 // Check to see if we have a new config since ResolveProxy was called. We 1278 // Check to see if we have a new config since ResolveProxy was called. We
1278 // want to re-run ResolveProxy in two cases: 1) we have a new config, or 2) a 1279 // want to re-run ResolveProxy in two cases: 1) we have a new config, or 2) a
1279 // direct connection failed and we never tried the current config. 1280 // direct connection failed and we never tried the current config.
1280 1281
1281 DCHECK(result); 1282 DCHECK(result);
1282 bool re_resolve = result->config_id_ != config_.id(); 1283 bool re_resolve = result->config_id_ != config_.id();
1283 1284
1284 if (re_resolve) { 1285 if (re_resolve) {
1285 // If we have a new config or the config was never tried, we delete the 1286 // If we have a new config or the config was never tried, we delete the
(...skipping 21 matching lines...) Expand all
1307 const std::vector<ProxyServer>& additional_bad_proxies, 1308 const std::vector<ProxyServer>& additional_bad_proxies,
1308 const NetLogWithSource& net_log) { 1309 const NetLogWithSource& net_log) {
1309 result.proxy_list_.UpdateRetryInfoOnFallback(&proxy_retry_info_, retry_delay, 1310 result.proxy_list_.UpdateRetryInfoOnFallback(&proxy_retry_info_, retry_delay,
1310 false, additional_bad_proxies, 1311 false, additional_bad_proxies,
1311 OK, net_log); 1312 OK, net_log);
1312 return result.proxy_list_.size() > (additional_bad_proxies.size() + 1); 1313 return result.proxy_list_.size() > (additional_bad_proxies.size() + 1);
1313 } 1314 }
1314 1315
1315 void ProxyService::ReportSuccess(const ProxyInfo& result, 1316 void ProxyService::ReportSuccess(const ProxyInfo& result,
1316 ProxyDelegate* proxy_delegate) { 1317 ProxyDelegate* proxy_delegate) {
1317 DCHECK(CalledOnValidThread()); 1318 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1318 1319
1319 const ProxyRetryInfoMap& new_retry_info = result.proxy_retry_info(); 1320 const ProxyRetryInfoMap& new_retry_info = result.proxy_retry_info();
1320 if (new_retry_info.empty()) 1321 if (new_retry_info.empty())
1321 return; 1322 return;
1322 1323
1323 for (ProxyRetryInfoMap::const_iterator iter = new_retry_info.begin(); 1324 for (ProxyRetryInfoMap::const_iterator iter = new_retry_info.begin();
1324 iter != new_retry_info.end(); ++iter) { 1325 iter != new_retry_info.end(); ++iter) {
1325 ProxyRetryInfoMap::iterator existing = proxy_retry_info_.find(iter->first); 1326 ProxyRetryInfoMap::iterator existing = proxy_retry_info_.find(iter->first);
1326 if (existing == proxy_retry_info_.end()) { 1327 if (existing == proxy_retry_info_.end()) {
1327 proxy_retry_info_[iter->first] = iter->second; 1328 proxy_retry_info_[iter->first] = iter->second;
1328 if (proxy_delegate) { 1329 if (proxy_delegate) {
1329 const ProxyServer& bad_proxy = 1330 const ProxyServer& bad_proxy =
1330 ProxyServer::FromURI(iter->first, ProxyServer::SCHEME_HTTP); 1331 ProxyServer::FromURI(iter->first, ProxyServer::SCHEME_HTTP);
1331 const ProxyRetryInfo& proxy_retry_info = iter->second; 1332 const ProxyRetryInfo& proxy_retry_info = iter->second;
1332 proxy_delegate->OnFallback(bad_proxy, proxy_retry_info.net_error); 1333 proxy_delegate->OnFallback(bad_proxy, proxy_retry_info.net_error);
1333 } 1334 }
1334 } 1335 }
1335 else if (existing->second.bad_until < iter->second.bad_until) 1336 else if (existing->second.bad_until < iter->second.bad_until)
1336 existing->second.bad_until = iter->second.bad_until; 1337 existing->second.bad_until = iter->second.bad_until;
1337 } 1338 }
1338 if (net_log_) { 1339 if (net_log_) {
1339 net_log_->AddGlobalEntry( 1340 net_log_->AddGlobalEntry(
1340 NetLogEventType::BAD_PROXY_LIST_REPORTED, 1341 NetLogEventType::BAD_PROXY_LIST_REPORTED,
1341 base::Bind(&NetLogBadProxyListCallback, &new_retry_info)); 1342 base::Bind(&NetLogBadProxyListCallback, &new_retry_info));
1342 } 1343 }
1343 } 1344 }
1344 1345
1345 void ProxyService::CancelPacRequest(PacRequest* req) { 1346 void ProxyService::CancelPacRequest(PacRequest* req) {
1346 DCHECK(CalledOnValidThread()); 1347 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1347 DCHECK(req); 1348 DCHECK(req);
1348 req->Cancel(); 1349 req->Cancel();
1349 RemovePendingRequest(req); 1350 RemovePendingRequest(req);
1350 } 1351 }
1351 1352
1352 LoadState ProxyService::GetLoadState(const PacRequest* req) const { 1353 LoadState ProxyService::GetLoadState(const PacRequest* req) const {
1353 CHECK(req); 1354 CHECK(req);
1354 if (current_state_ == STATE_WAITING_FOR_INIT_PROXY_RESOLVER) 1355 if (current_state_ == STATE_WAITING_FOR_INIT_PROXY_RESOLVER)
1355 return init_proxy_resolver_->GetLoadState(); 1356 return init_proxy_resolver_->GetLoadState();
1356 return req->GetLoadState(); 1357 return req->GetLoadState();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 } 1448 }
1448 } 1449 }
1449 1450
1450 net_log.EndEvent(NetLogEventType::PROXY_SERVICE); 1451 net_log.EndEvent(NetLogEventType::PROXY_SERVICE);
1451 return result_code; 1452 return result_code;
1452 } 1453 }
1453 1454
1454 void ProxyService::SetProxyScriptFetchers( 1455 void ProxyService::SetProxyScriptFetchers(
1455 ProxyScriptFetcher* proxy_script_fetcher, 1456 ProxyScriptFetcher* proxy_script_fetcher,
1456 std::unique_ptr<DhcpProxyScriptFetcher> dhcp_proxy_script_fetcher) { 1457 std::unique_ptr<DhcpProxyScriptFetcher> dhcp_proxy_script_fetcher) {
1457 DCHECK(CalledOnValidThread()); 1458 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1458 State previous_state = ResetProxyConfig(false); 1459 State previous_state = ResetProxyConfig(false);
1459 proxy_script_fetcher_.reset(proxy_script_fetcher); 1460 proxy_script_fetcher_.reset(proxy_script_fetcher);
1460 dhcp_proxy_script_fetcher_ = std::move(dhcp_proxy_script_fetcher); 1461 dhcp_proxy_script_fetcher_ = std::move(dhcp_proxy_script_fetcher);
1461 if (previous_state != STATE_NONE) 1462 if (previous_state != STATE_NONE)
1462 ApplyProxyConfigIfAvailable(); 1463 ApplyProxyConfigIfAvailable();
1463 } 1464 }
1464 1465
1465 void ProxyService::OnShutdown() { 1466 void ProxyService::OnShutdown() {
1466 // Order here does not matter for correctness. |init_proxy_resolver_| is first 1467 // Order here does not matter for correctness. |init_proxy_resolver_| is first
1467 // because shutting it down also cancels its requests using the fetcher. 1468 // because shutting it down also cancels its requests using the fetcher.
1468 if (init_proxy_resolver_) 1469 if (init_proxy_resolver_)
1469 init_proxy_resolver_->OnShutdown(); 1470 init_proxy_resolver_->OnShutdown();
1470 if (proxy_script_fetcher_) 1471 if (proxy_script_fetcher_)
1471 proxy_script_fetcher_->OnShutdown(); 1472 proxy_script_fetcher_->OnShutdown();
1472 if (dhcp_proxy_script_fetcher_) 1473 if (dhcp_proxy_script_fetcher_)
1473 dhcp_proxy_script_fetcher_->OnShutdown(); 1474 dhcp_proxy_script_fetcher_->OnShutdown();
1474 } 1475 }
1475 1476
1476 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const { 1477 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const {
1477 DCHECK(CalledOnValidThread()); 1478 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1478 return proxy_script_fetcher_.get(); 1479 return proxy_script_fetcher_.get();
1479 } 1480 }
1480 1481
1481 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) { 1482 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) {
1482 DCHECK(CalledOnValidThread()); 1483 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1483 State previous_state = current_state_; 1484 State previous_state = current_state_;
1484 1485
1485 permanent_error_ = OK; 1486 permanent_error_ = OK;
1486 proxy_retry_info_.clear(); 1487 proxy_retry_info_.clear();
1487 script_poller_.reset(); 1488 script_poller_.reset();
1488 init_proxy_resolver_.reset(); 1489 init_proxy_resolver_.reset();
1489 SuspendAllPendingRequests(); 1490 SuspendAllPendingRequests();
1490 resolver_.reset(); 1491 resolver_.reset();
1491 config_ = ProxyConfig(); 1492 config_ = ProxyConfig();
1492 if (reset_fetched_config) 1493 if (reset_fetched_config)
1493 fetched_config_ = ProxyConfig(); 1494 fetched_config_ = ProxyConfig();
1494 current_state_ = STATE_NONE; 1495 current_state_ = STATE_NONE;
1495 1496
1496 return previous_state; 1497 return previous_state;
1497 } 1498 }
1498 1499
1499 void ProxyService::ResetConfigService( 1500 void ProxyService::ResetConfigService(
1500 std::unique_ptr<ProxyConfigService> new_proxy_config_service) { 1501 std::unique_ptr<ProxyConfigService> new_proxy_config_service) {
1501 DCHECK(CalledOnValidThread()); 1502 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1502 State previous_state = ResetProxyConfig(true); 1503 State previous_state = ResetProxyConfig(true);
1503 1504
1504 // Release the old configuration service. 1505 // Release the old configuration service.
1505 if (config_service_.get()) 1506 if (config_service_.get())
1506 config_service_->RemoveObserver(this); 1507 config_service_->RemoveObserver(this);
1507 1508
1508 // Set the new configuration service. 1509 // Set the new configuration service.
1509 config_service_ = std::move(new_proxy_config_service); 1510 config_service_ = std::move(new_proxy_config_service);
1510 config_service_->AddObserver(this); 1511 config_service_->AddObserver(this);
1511 1512
1512 if (previous_state != STATE_NONE) 1513 if (previous_state != STATE_NONE)
1513 ApplyProxyConfigIfAvailable(); 1514 ApplyProxyConfigIfAvailable();
1514 } 1515 }
1515 1516
1516 void ProxyService::ForceReloadProxyConfig() { 1517 void ProxyService::ForceReloadProxyConfig() {
1517 DCHECK(CalledOnValidThread()); 1518 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
1518 ResetProxyConfig(false); 1519 ResetProxyConfig(false);
1519 ApplyProxyConfigIfAvailable(); 1520 ApplyProxyConfigIfAvailable();
1520 } 1521 }
1521 1522
1522 // static 1523 // static
1523 std::unique_ptr<ProxyConfigService> 1524 std::unique_ptr<ProxyConfigService>
1524 ProxyService::CreateSystemProxyConfigService( 1525 ProxyService::CreateSystemProxyConfigService(
1525 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, 1526 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
1526 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) { 1527 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) {
1527 #if defined(OS_WIN) 1528 #if defined(OS_WIN)
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 State previous_state = ResetProxyConfig(false); 1672 State previous_state = ResetProxyConfig(false);
1672 if (previous_state != STATE_NONE) 1673 if (previous_state != STATE_NONE)
1673 ApplyProxyConfigIfAvailable(); 1674 ApplyProxyConfigIfAvailable();
1674 } 1675 }
1675 1676
1676 void ProxyService::OnDNSChanged() { 1677 void ProxyService::OnDNSChanged() {
1677 OnIPAddressChanged(); 1678 OnIPAddressChanged();
1678 } 1679 }
1679 1680
1680 } // namespace net 1681 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_service.h ('k') | net/ssl/channel_id_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698