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

Side by Side Diff: net/spdy/spdy_session_pool.cc

Issue 11464028: Introduce ERR_NETWORK_CHANGED and allow URLFetcher to automatically retry on that error. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed nits Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_session_pool.h ('k') | net/spdy/spdy_session_spdy2_unittest.cc » ('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/spdy/spdy_session_pool.h" 5 #include "net/spdy/spdy_session_pool.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/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 const HostPortProxyPair& key = it->first; 268 const HostPortProxyPair& key = it->first;
269 const HostPortProxyPair& pair = session->get()->host_port_proxy_pair(); 269 const HostPortProxyPair& pair = session->get()->host_port_proxy_pair();
270 if (key.first.Equals(pair.first) && key.second == pair.second) 270 if (key.first.Equals(pair.first) && key.second == pair.second)
271 list->Append(session->get()->GetInfoAsValue()); 271 list->Append(session->get()->GetInfoAsValue());
272 } 272 }
273 } 273 }
274 return list; 274 return list;
275 } 275 }
276 276
277 void SpdySessionPool::OnIPAddressChanged() { 277 void SpdySessionPool::OnIPAddressChanged() {
278 CloseCurrentSessions(); 278 CloseCurrentSessions(ERR_NETWORK_CHANGED);
279 http_server_properties_->ClearSpdySettings(); 279 http_server_properties_->ClearSpdySettings();
280 } 280 }
281 281
282 void SpdySessionPool::OnSSLConfigChanged() { 282 void SpdySessionPool::OnSSLConfigChanged() {
283 CloseCurrentSessions(); 283 CloseCurrentSessions(ERR_NETWORK_CHANGED);
284 } 284 }
285 285
286 scoped_refptr<SpdySession> SpdySessionPool::GetExistingSession( 286 scoped_refptr<SpdySession> SpdySessionPool::GetExistingSession(
287 SpdySessionList* list, 287 SpdySessionList* list,
288 const BoundNetLog& net_log) const { 288 const BoundNetLog& net_log) const {
289 DCHECK(list); 289 DCHECK(list);
290 DCHECK_LT(0u, list->size()); 290 DCHECK_LT(0u, list->size());
291 scoped_refptr<SpdySession> spdy_session = list->front(); 291 scoped_refptr<SpdySession> spdy_session = list->front();
292 if (list->size() > 1) { 292 if (list->size() > 1) {
293 list->pop_front(); // Rotate the list. 293 list->pop_front(); // Rotate the list.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 continue; 340 continue;
341 } 341 }
342 if (record_histograms) 342 if (record_histograms)
343 UMA_HISTOGRAM_ENUMERATION("Net.SpdyIPPoolDomainMatch", 1, 2); 343 UMA_HISTOGRAM_ENUMERATION("Net.SpdyIPPoolDomainMatch", 1, 2);
344 return spdy_session; 344 return spdy_session;
345 } 345 }
346 return NULL; 346 return NULL;
347 } 347 }
348 348
349 void SpdySessionPool::OnCertAdded(const X509Certificate* cert) { 349 void SpdySessionPool::OnCertAdded(const X509Certificate* cert) {
350 CloseCurrentSessions(); 350 CloseCurrentSessions(ERR_NETWORK_CHANGED);
351 } 351 }
352 352
353 void SpdySessionPool::OnCertTrustChanged(const X509Certificate* cert) { 353 void SpdySessionPool::OnCertTrustChanged(const X509Certificate* cert) {
354 // Per wtc, we actually only need to CloseCurrentSessions when trust is 354 // Per wtc, we actually only need to CloseCurrentSessions when trust is
355 // reduced. CloseCurrentSessions now because OnCertTrustChanged does not 355 // reduced. CloseCurrentSessions now because OnCertTrustChanged does not
356 // tell us this. 356 // tell us this.
357 // See comments in ClientSocketPoolManager::OnCertTrustChanged. 357 // See comments in ClientSocketPoolManager::OnCertTrustChanged.
358 CloseCurrentSessions(); 358 CloseCurrentSessions(ERR_NETWORK_CHANGED);
359 } 359 }
360 360
361 const HostPortProxyPair& SpdySessionPool::NormalizeListPair( 361 const HostPortProxyPair& SpdySessionPool::NormalizeListPair(
362 const HostPortProxyPair& host_port_proxy_pair) const { 362 const HostPortProxyPair& host_port_proxy_pair) const {
363 if (!force_single_domain_) 363 if (!force_single_domain_)
364 return host_port_proxy_pair; 364 return host_port_proxy_pair;
365 365
366 static HostPortProxyPair* single_domain_pair = NULL; 366 static HostPortProxyPair* single_domain_pair = NULL;
367 if (!single_domain_pair) { 367 if (!single_domain_pair) {
368 HostPortPair single_domain = HostPortPair("singledomain.com", 80); 368 HostPortPair single_domain = HostPortPair("singledomain.com", 80);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 CHECK(list); 440 CHECK(list);
441 const scoped_refptr<SpdySession>& session = list->front(); 441 const scoped_refptr<SpdySession>& session = list->front();
442 CHECK(session); 442 CHECK(session);
443 // This call takes care of removing the session from the pool, as well as 443 // This call takes care of removing the session from the pool, as well as
444 // removing the session list if the list is empty. 444 // removing the session list if the list is empty.
445 session->CloseSessionOnError( 445 session->CloseSessionOnError(
446 net::ERR_ABORTED, true, "Closing all sessions."); 446 net::ERR_ABORTED, true, "Closing all sessions.");
447 } 447 }
448 } 448 }
449 449
450 void SpdySessionPool::CloseCurrentSessions() { 450 void SpdySessionPool::CloseCurrentSessions(net::Error error) {
451 SpdySessionsMap old_map; 451 SpdySessionsMap old_map;
452 old_map.swap(sessions_); 452 old_map.swap(sessions_);
453 for (SpdySessionsMap::const_iterator it = old_map.begin(); 453 for (SpdySessionsMap::const_iterator it = old_map.begin();
454 it != old_map.end(); ++it) { 454 it != old_map.end(); ++it) {
455 SpdySessionList* list = it->second; 455 SpdySessionList* list = it->second;
456 CHECK(list); 456 CHECK(list);
457 const scoped_refptr<SpdySession>& session = list->front(); 457 const scoped_refptr<SpdySession>& session = list->front();
458 CHECK(session); 458 CHECK(session);
459 session->set_spdy_session_pool(NULL); 459 session->set_spdy_session_pool(NULL);
460 } 460 }
461 461
462 while (!old_map.empty()) { 462 while (!old_map.empty()) {
463 SpdySessionList* list = old_map.begin()->second; 463 SpdySessionList* list = old_map.begin()->second;
464 CHECK(list); 464 CHECK(list);
465 const scoped_refptr<SpdySession>& session = list->front(); 465 const scoped_refptr<SpdySession>& session = list->front();
466 CHECK(session); 466 CHECK(session);
467 session->CloseSessionOnError( 467 session->CloseSessionOnError(error, false, "Closing current sessions.");
468 net::ERR_ABORTED, false, "Closing current sessions.");
469 list->pop_front(); 468 list->pop_front();
470 if (list->empty()) { 469 if (list->empty()) {
471 delete list; 470 delete list;
472 RemoveAliases(old_map.begin()->first); 471 RemoveAliases(old_map.begin()->first);
473 old_map.erase(old_map.begin()->first); 472 old_map.erase(old_map.begin()->first);
474 } 473 }
475 } 474 }
476 DCHECK(sessions_.empty()); 475 DCHECK(sessions_.empty());
477 DCHECK(aliases_.empty()); 476 DCHECK(aliases_.empty());
478 } 477 }
(...skipping 10 matching lines...) Expand all
489 const scoped_refptr<SpdySession>& session = *session_it; 488 const scoped_refptr<SpdySession>& session = *session_it;
490 CHECK(session); 489 CHECK(session);
491 if (!session->is_active()) { 490 if (!session->is_active()) {
492 session->CloseSessionOnError( 491 session->CloseSessionOnError(
493 net::ERR_ABORTED, true, "Closing idle sessions."); 492 net::ERR_ABORTED, true, "Closing idle sessions.");
494 } 493 }
495 } 494 }
496 } 495 }
497 496
498 } // namespace net 497 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool.h ('k') | net/spdy/spdy_session_spdy2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698