OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_list.h" | 5 #include "net/proxy/proxy_list.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/string_tokenizer.h" | 8 #include "base/string_tokenizer.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "net/proxy/proxy_server.h" | 10 #include "net/proxy/proxy_server.h" |
11 | 11 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 std::string proxy_list; | 108 std::string proxy_list; |
109 std::vector<ProxyServer>::const_iterator iter = proxies_.begin(); | 109 std::vector<ProxyServer>::const_iterator iter = proxies_.begin(); |
110 for (; iter != proxies_.end(); ++iter) { | 110 for (; iter != proxies_.end(); ++iter) { |
111 if (!proxy_list.empty()) | 111 if (!proxy_list.empty()) |
112 proxy_list += ";"; | 112 proxy_list += ";"; |
113 proxy_list += iter->ToPacString(); | 113 proxy_list += iter->ToPacString(); |
114 } | 114 } |
115 return proxy_list.empty() ? std::string() : proxy_list; | 115 return proxy_list.empty() ? std::string() : proxy_list; |
116 } | 116 } |
117 | 117 |
118 bool ProxyList::Fallback(ProxyRetryInfoMap* proxy_retry_info) { | 118 bool ProxyList::Fallback(ProxyRetryInfoMap* proxy_retry_info, |
| 119 const BoundNetLog& net_log) { |
119 // Number of minutes to wait before retrying a bad proxy server. | 120 // Number of minutes to wait before retrying a bad proxy server. |
120 const TimeDelta kProxyRetryDelay = TimeDelta::FromMinutes(5); | 121 const TimeDelta kProxyRetryDelay = TimeDelta::FromMinutes(5); |
121 | 122 |
122 // TODO(eroman): It would be good if instead of removing failed proxies | 123 // TODO(eroman): It would be good if instead of removing failed proxies |
123 // from the list, we simply annotated them with the error code they failed | 124 // from the list, we simply annotated them with the error code they failed |
124 // with. Of course, ProxyService::ReconsiderProxyAfterError() would need to | 125 // with. Of course, ProxyService::ReconsiderProxyAfterError() would need to |
125 // be given this information by the network transaction. | 126 // be given this information by the network transaction. |
126 // | 127 // |
127 // The advantage of this approach is when the network transaction | 128 // The advantage of this approach is when the network transaction |
128 // fails, we could output the full list of proxies that were attempted, and | 129 // fails, we could output the full list of proxies that were attempted, and |
(...skipping 16 matching lines...) Expand all Loading... |
145 if (iter != proxy_retry_info->end()) { | 146 if (iter != proxy_retry_info->end()) { |
146 // TODO(nsylvain): This is not the first time we get this. We should | 147 // TODO(nsylvain): This is not the first time we get this. We should |
147 // double the retry time. Bug 997660. | 148 // double the retry time. Bug 997660. |
148 iter->second.bad_until = TimeTicks::Now() + iter->second.current_delay; | 149 iter->second.bad_until = TimeTicks::Now() + iter->second.current_delay; |
149 } else { | 150 } else { |
150 ProxyRetryInfo retry_info; | 151 ProxyRetryInfo retry_info; |
151 retry_info.current_delay = kProxyRetryDelay; | 152 retry_info.current_delay = kProxyRetryDelay; |
152 retry_info.bad_until = TimeTicks().Now() + retry_info.current_delay; | 153 retry_info.bad_until = TimeTicks().Now() + retry_info.current_delay; |
153 (*proxy_retry_info)[key] = retry_info; | 154 (*proxy_retry_info)[key] = retry_info; |
154 } | 155 } |
| 156 net_log.AddEvent( |
| 157 NetLog::TYPE_PROXY_LIST_FALLBACK, |
| 158 make_scoped_refptr(new NetLogStringParameter("bad_proxy", key))); |
155 } | 159 } |
156 | 160 |
157 // Remove this proxy from our list. | 161 // Remove this proxy from our list. |
158 proxies_.erase(proxies_.begin()); | 162 proxies_.erase(proxies_.begin()); |
159 | 163 |
160 return !proxies_.empty(); | 164 return !proxies_.empty(); |
161 } | 165 } |
162 | 166 |
163 } // namespace net | 167 } // namespace net |
OLD | NEW |