Chromium Code Reviews| 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_list.h" | 5 #include "net/proxy/proxy_list.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/rand_util.h" | |
| 9 #include "base/strings/string_tokenizer.h" | 10 #include "base/strings/string_tokenizer.h" |
| 10 #include "base/time.h" | 11 #include "base/time.h" |
| 11 #include "base/values.h" | 12 #include "base/values.h" |
| 12 #include "net/proxy/proxy_server.h" | 13 #include "net/proxy/proxy_server.h" |
| 13 | 14 |
| 14 using base::TimeDelta; | 15 using base::TimeDelta; |
| 15 using base::TimeTicks; | 16 using base::TimeTicks; |
| 16 | 17 |
| 17 namespace net { | 18 namespace net { |
| 18 | 19 |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 } | 187 } |
| 187 UpdateRetryInfoOnFallback(proxy_retry_info, net_log); | 188 UpdateRetryInfoOnFallback(proxy_retry_info, net_log); |
| 188 | 189 |
| 189 // Remove this proxy from our list. | 190 // Remove this proxy from our list. |
| 190 proxies_.erase(proxies_.begin()); | 191 proxies_.erase(proxies_.begin()); |
| 191 return !proxies_.empty(); | 192 return !proxies_.empty(); |
| 192 } | 193 } |
| 193 | 194 |
| 194 void ProxyList::UpdateRetryInfoOnFallback( | 195 void ProxyList::UpdateRetryInfoOnFallback( |
| 195 ProxyRetryInfoMap* proxy_retry_info, const BoundNetLog& net_log) const { | 196 ProxyRetryInfoMap* proxy_retry_info, const BoundNetLog& net_log) const { |
| 196 // Number of minutes to wait before retrying a bad proxy server. | 197 // Time to wait before retrying a bad proxy server. |
| 197 #if defined(OS_ANDROID) | 198 #if defined(OS_ANDROID) |
| 198 const TimeDelta kProxyRetryDelay = TimeDelta::FromMinutes(1); | 199 // Randomize the timeout over a range from one to five minutes. |
| 200 const TimeDelta kProxyRetryDelay = | |
| 201 TimeDelta::FromMilliseconds(base::RandInt(1 * 60 * 1000, 5 * 60 * 1000)); | |
|
mmenke
2013/05/08 16:50:08
const Blah kBlah is generally only used for values
cbentzel
2013/05/08 16:57:18
proxy_retry_delay?
I don't think the const buys u
mmenke
2013/05/08 16:58:58
The nice thing about the const is that it draws at
bengr
2013/05/08 17:23:11
Yeah, I thought about three ways of writing this:
| |
| 199 #else | 202 #else |
| 200 const TimeDelta kProxyRetryDelay = TimeDelta::FromMinutes(5); | 203 const TimeDelta kProxyRetryDelay = TimeDelta::FromMinutes(5); |
| 201 #endif | 204 #endif |
| 202 | 205 |
| 203 if (proxies_.empty()) { | 206 if (proxies_.empty()) { |
| 204 NOTREACHED(); | 207 NOTREACHED(); |
| 205 return; | 208 return; |
| 206 } | 209 } |
| 207 | 210 |
| 208 if (!proxies_[0].is_direct()) { | 211 if (!proxies_[0].is_direct()) { |
| 209 std::string key = proxies_[0].ToURI(); | 212 std::string key = proxies_[0].ToURI(); |
| 210 // Mark this proxy as bad. | 213 // Mark this proxy as bad. |
| 211 ProxyRetryInfoMap::iterator iter = proxy_retry_info->find(key); | 214 ProxyRetryInfoMap::iterator iter = proxy_retry_info->find(key); |
| 212 if (iter != proxy_retry_info->end()) { | 215 if (iter != proxy_retry_info->end()) { |
| 213 // TODO(nsylvain): This is not the first time we get this. We should | 216 // TODO(nsylvain): This is not the first time we get this. We should |
| 214 // double the retry time. Bug 997660. | 217 // double the retry time. Bug 997660. |
| 215 iter->second.bad_until = TimeTicks::Now() + iter->second.current_delay; | 218 iter->second.bad_until = TimeTicks::Now() + iter->second.current_delay; |
| 216 } else { | 219 } else { |
| 217 ProxyRetryInfo retry_info; | 220 ProxyRetryInfo retry_info; |
| 218 retry_info.current_delay = kProxyRetryDelay; | 221 retry_info.current_delay = kProxyRetryDelay; |
| 219 retry_info.bad_until = TimeTicks().Now() + retry_info.current_delay; | 222 retry_info.bad_until = TimeTicks().Now() + retry_info.current_delay; |
| 220 (*proxy_retry_info)[key] = retry_info; | 223 (*proxy_retry_info)[key] = retry_info; |
| 221 } | 224 } |
| 222 net_log.AddEvent(NetLog::TYPE_PROXY_LIST_FALLBACK, | 225 net_log.AddEvent(NetLog::TYPE_PROXY_LIST_FALLBACK, |
| 223 NetLog::StringCallback("bad_proxy", &key)); | 226 NetLog::StringCallback("bad_proxy", &key)); |
| 224 } | 227 } |
| 225 } | 228 } |
| 226 | 229 |
| 227 } // namespace net | 230 } // namespace net |
| OLD | NEW |