OLD | NEW |
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 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 default: | 450 default: |
451 NOTREACHED() << "bad state: " << state; | 451 NOTREACHED() << "bad state: " << state; |
452 rv = ERR_UNEXPECTED; | 452 rv = ERR_UNEXPECTED; |
453 break; | 453 break; |
454 } | 454 } |
455 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); | 455 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); |
456 return rv; | 456 return rv; |
457 } | 457 } |
458 | 458 |
459 int DoDecideProxyScript() { | 459 int DoDecideProxyScript() { |
| 460 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is |
| 461 // fixed. |
| 462 tracked_objects::ScopedTracker tracking_profile( |
| 463 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 464 "455942 ProxyService::InitProxyResolver::DoDecideProxyScript")); |
460 next_state_ = STATE_DECIDE_PROXY_SCRIPT_COMPLETE; | 465 next_state_ = STATE_DECIDE_PROXY_SCRIPT_COMPLETE; |
461 | 466 |
462 return decider_->Start( | 467 return decider_->Start( |
463 config_, wait_delay_, proxy_resolver_->expects_pac_bytes(), | 468 config_, wait_delay_, proxy_resolver_->expects_pac_bytes(), |
464 base::Bind(&InitProxyResolver::OnIOCompletion, base::Unretained(this))); | 469 base::Bind(&InitProxyResolver::OnIOCompletion, base::Unretained(this))); |
465 } | 470 } |
466 | 471 |
467 int DoDecideProxyScriptComplete(int result) { | 472 int DoDecideProxyScriptComplete(int result) { |
| 473 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is |
| 474 // fixed. |
| 475 tracked_objects::ScopedTracker tracking_profile( |
| 476 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 477 "455942 " |
| 478 "ProxyService::InitProxyResolver::DoDecideProxyScriptComplete")); |
468 if (result != OK) | 479 if (result != OK) |
469 return result; | 480 return result; |
470 | 481 |
471 effective_config_ = decider_->effective_config(); | 482 effective_config_ = decider_->effective_config(); |
472 script_data_ = decider_->script_data(); | 483 script_data_ = decider_->script_data(); |
473 | 484 |
474 next_state_ = STATE_SET_PAC_SCRIPT; | 485 next_state_ = STATE_SET_PAC_SCRIPT; |
475 return OK; | 486 return OK; |
476 } | 487 } |
477 | 488 |
478 int DoSetPacScript() { | 489 int DoSetPacScript() { |
| 490 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is |
| 491 // fixed. |
| 492 tracked_objects::ScopedTracker tracking_profile( |
| 493 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 494 "455942 ProxyService::InitProxyResolver::DoSetPacScript")); |
479 DCHECK(script_data_.get()); | 495 DCHECK(script_data_.get()); |
480 // TODO(eroman): Should log this latency to the NetLog. | 496 // TODO(eroman): Should log this latency to the NetLog. |
481 next_state_ = STATE_SET_PAC_SCRIPT_COMPLETE; | 497 next_state_ = STATE_SET_PAC_SCRIPT_COMPLETE; |
482 return proxy_resolver_->SetPacScript( | 498 return proxy_resolver_->SetPacScript( |
483 script_data_, | 499 script_data_, |
484 base::Bind(&InitProxyResolver::OnIOCompletion, base::Unretained(this))); | 500 base::Bind(&InitProxyResolver::OnIOCompletion, base::Unretained(this))); |
485 } | 501 } |
486 | 502 |
487 int DoSetPacScriptComplete(int result) { | 503 int DoSetPacScriptComplete(int result) { |
488 return result; | 504 return result; |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 // If a configuration is not available yet, we will get called back later | 1169 // If a configuration is not available yet, we will get called back later |
1154 // by our ProxyConfigService::Observer once it changes. | 1170 // by our ProxyConfigService::Observer once it changes. |
1155 ProxyConfig config; | 1171 ProxyConfig config; |
1156 ProxyConfigService::ConfigAvailability availability = | 1172 ProxyConfigService::ConfigAvailability availability = |
1157 config_service_->GetLatestProxyConfig(&config); | 1173 config_service_->GetLatestProxyConfig(&config); |
1158 if (availability != ProxyConfigService::CONFIG_PENDING) | 1174 if (availability != ProxyConfigService::CONFIG_PENDING) |
1159 OnProxyConfigChanged(config, availability); | 1175 OnProxyConfigChanged(config, availability); |
1160 } | 1176 } |
1161 | 1177 |
1162 void ProxyService::OnInitProxyResolverComplete(int result) { | 1178 void ProxyService::OnInitProxyResolverComplete(int result) { |
1163 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is fixed. | |
1164 tracked_objects::ScopedTracker tracking_profile( | |
1165 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1166 "455942 ProxyService::OnInitProxyResolverComplete")); | |
1167 DCHECK_EQ(STATE_WAITING_FOR_INIT_PROXY_RESOLVER, current_state_); | 1179 DCHECK_EQ(STATE_WAITING_FOR_INIT_PROXY_RESOLVER, current_state_); |
1168 DCHECK(init_proxy_resolver_.get()); | 1180 DCHECK(init_proxy_resolver_.get()); |
1169 DCHECK(fetched_config_.HasAutomaticSettings()); | 1181 DCHECK(fetched_config_.HasAutomaticSettings()); |
1170 config_ = init_proxy_resolver_->effective_config(); | 1182 config_ = init_proxy_resolver_->effective_config(); |
1171 | 1183 |
1172 // At this point we have decided which proxy settings to use (i.e. which PAC | 1184 // At this point we have decided which proxy settings to use (i.e. which PAC |
1173 // script if any). We start up a background poller to periodically revisit | 1185 // script if any). We start up a background poller to periodically revisit |
1174 // this decision. If the contents of the PAC script change, or if the | 1186 // this decision. If the contents of the PAC script change, or if the |
1175 // result of proxy auto-discovery changes, this poller will notice it and | 1187 // result of proxy auto-discovery changes, this poller will notice it and |
1176 // will trigger a re-initialization using the newly discovered PAC. | 1188 // will trigger a re-initialization using the newly discovered PAC. |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1384 if (previous_state != STATE_NONE) | 1396 if (previous_state != STATE_NONE) |
1385 ApplyProxyConfigIfAvailable(); | 1397 ApplyProxyConfigIfAvailable(); |
1386 } | 1398 } |
1387 | 1399 |
1388 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const { | 1400 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const { |
1389 DCHECK(CalledOnValidThread()); | 1401 DCHECK(CalledOnValidThread()); |
1390 return proxy_script_fetcher_.get(); | 1402 return proxy_script_fetcher_.get(); |
1391 } | 1403 } |
1392 | 1404 |
1393 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) { | 1405 ProxyService::State ProxyService::ResetProxyConfig(bool reset_fetched_config) { |
1394 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is fixed. | |
1395 tracked_objects::ScopedTracker tracking_profile( | |
1396 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1397 "455942 ProxyService::ResetProxyConfig")); | |
1398 DCHECK(CalledOnValidThread()); | 1406 DCHECK(CalledOnValidThread()); |
1399 State previous_state = current_state_; | 1407 State previous_state = current_state_; |
1400 | 1408 |
1401 permanent_error_ = OK; | 1409 permanent_error_ = OK; |
1402 proxy_retry_info_.clear(); | 1410 proxy_retry_info_.clear(); |
1403 script_poller_.reset(); | 1411 script_poller_.reset(); |
1404 init_proxy_resolver_.reset(); | 1412 init_proxy_resolver_.reset(); |
1405 SuspendAllPendingRequests(); | 1413 SuspendAllPendingRequests(); |
1406 config_ = ProxyConfig(); | 1414 config_ = ProxyConfig(); |
1407 if (reset_fetched_config) | 1415 if (reset_fetched_config) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1485 | 1493 |
1486 // static | 1494 // static |
1487 scoped_ptr<ProxyService::PacPollPolicy> | 1495 scoped_ptr<ProxyService::PacPollPolicy> |
1488 ProxyService::CreateDefaultPacPollPolicy() { | 1496 ProxyService::CreateDefaultPacPollPolicy() { |
1489 return scoped_ptr<PacPollPolicy>(new DefaultPollPolicy()); | 1497 return scoped_ptr<PacPollPolicy>(new DefaultPollPolicy()); |
1490 } | 1498 } |
1491 | 1499 |
1492 void ProxyService::OnProxyConfigChanged( | 1500 void ProxyService::OnProxyConfigChanged( |
1493 const ProxyConfig& config, | 1501 const ProxyConfig& config, |
1494 ProxyConfigService::ConfigAvailability availability) { | 1502 ProxyConfigService::ConfigAvailability availability) { |
1495 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is fixed. | |
1496 tracked_objects::ScopedTracker tracking_profile( | |
1497 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1498 "455942 ProxyService::OnProxyConfigChanged")); | |
1499 // Retrieve the current proxy configuration from the ProxyConfigService. | 1503 // Retrieve the current proxy configuration from the ProxyConfigService. |
1500 // If a configuration is not available yet, we will get called back later | 1504 // If a configuration is not available yet, we will get called back later |
1501 // by our ProxyConfigService::Observer once it changes. | 1505 // by our ProxyConfigService::Observer once it changes. |
1502 ProxyConfig effective_config; | 1506 ProxyConfig effective_config; |
1503 switch (availability) { | 1507 switch (availability) { |
1504 case ProxyConfigService::CONFIG_PENDING: | 1508 case ProxyConfigService::CONFIG_PENDING: |
1505 // ProxyConfigService implementors should never pass CONFIG_PENDING. | 1509 // ProxyConfigService implementors should never pass CONFIG_PENDING. |
1506 NOTREACHED() << "Proxy config change with CONFIG_PENDING availability!"; | 1510 NOTREACHED() << "Proxy config change with CONFIG_PENDING availability!"; |
1507 return; | 1511 return; |
1508 case ProxyConfigService::CONFIG_VALID: | 1512 case ProxyConfigService::CONFIG_VALID: |
(...skipping 13 matching lines...) Expand all Loading... |
1522 } | 1526 } |
1523 | 1527 |
1524 // Set the new configuration as the most recently fetched one. | 1528 // Set the new configuration as the most recently fetched one. |
1525 fetched_config_ = effective_config; | 1529 fetched_config_ = effective_config; |
1526 fetched_config_.set_id(1); // Needed for a later DCHECK of is_valid(). | 1530 fetched_config_.set_id(1); // Needed for a later DCHECK of is_valid(). |
1527 | 1531 |
1528 InitializeUsingLastFetchedConfig(); | 1532 InitializeUsingLastFetchedConfig(); |
1529 } | 1533 } |
1530 | 1534 |
1531 void ProxyService::InitializeUsingLastFetchedConfig() { | 1535 void ProxyService::InitializeUsingLastFetchedConfig() { |
1532 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is fixed. | |
1533 tracked_objects::ScopedTracker tracking_profile( | |
1534 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1535 "455942 ProxyService::InitializeUsingLastFetchedConfig")); | |
1536 ResetProxyConfig(false); | 1536 ResetProxyConfig(false); |
1537 | 1537 |
1538 DCHECK(fetched_config_.is_valid()); | 1538 DCHECK(fetched_config_.is_valid()); |
1539 | 1539 |
1540 // Increment the ID to reflect that the config has changed. | 1540 // Increment the ID to reflect that the config has changed. |
1541 fetched_config_.set_id(next_config_id_++); | 1541 fetched_config_.set_id(next_config_id_++); |
1542 | 1542 |
1543 if (!fetched_config_.HasAutomaticSettings()) { | 1543 if (!fetched_config_.HasAutomaticSettings()) { |
1544 config_ = fetched_config_; | 1544 config_ = fetched_config_; |
1545 SetReady(); | 1545 SetReady(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1601 State previous_state = ResetProxyConfig(false); | 1601 State previous_state = ResetProxyConfig(false); |
1602 if (previous_state != STATE_NONE) | 1602 if (previous_state != STATE_NONE) |
1603 ApplyProxyConfigIfAvailable(); | 1603 ApplyProxyConfigIfAvailable(); |
1604 } | 1604 } |
1605 | 1605 |
1606 void ProxyService::OnDNSChanged() { | 1606 void ProxyService::OnDNSChanged() { |
1607 OnIPAddressChanged(); | 1607 OnIPAddressChanged(); |
1608 } | 1608 } |
1609 | 1609 |
1610 } // namespace net | 1610 } // namespace net |
OLD | NEW |