| Index: net/proxy/proxy_list.cc
|
| ===================================================================
|
| --- net/proxy/proxy_list.cc (revision 35979)
|
| +++ net/proxy/proxy_list.cc (working copy)
|
| @@ -31,8 +31,14 @@
|
| proxies_.push_back(proxy_server);
|
| }
|
|
|
| -void ProxyList::RemoveBadProxies(const ProxyRetryInfoMap& proxy_retry_info) {
|
| - std::vector<ProxyServer> new_proxy_list;
|
| +void ProxyList::DeprioritizeBadProxies(
|
| + const ProxyRetryInfoMap& proxy_retry_info) {
|
| + // Partition the proxy list in two:
|
| + // (1) the known bad proxies
|
| + // (2) everything else
|
| + std::vector<ProxyServer> good_proxies;
|
| + std::vector<ProxyServer> bad_proxies;
|
| +
|
| std::vector<ProxyServer>::const_iterator iter = proxies_.begin();
|
| for (; iter != proxies_.end(); ++iter) {
|
| ProxyRetryInfoMap::const_iterator bad_proxy =
|
| @@ -41,13 +47,16 @@
|
| // This proxy is bad. Check if it's time to retry.
|
| if (bad_proxy->second.bad_until >= TimeTicks::Now()) {
|
| // still invalid.
|
| + bad_proxies.push_back(*iter);
|
| continue;
|
| }
|
| }
|
| - new_proxy_list.push_back(*iter);
|
| + good_proxies.push_back(*iter);
|
| }
|
|
|
| - proxies_ = new_proxy_list;
|
| + // "proxies_ = good_proxies + bad_proxies"
|
| + proxies_.swap(good_proxies);
|
| + proxies_.insert(proxies_.end(), bad_proxies.begin(), bad_proxies.end());
|
| }
|
|
|
| void ProxyList::RemoveProxiesWithoutScheme(int scheme_bit_field) {
|
|
|