| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/logging.h" | 7 #include "base/logging.h" | 
| 8 #include "net/spdy/spdy_session.h" | 8 #include "net/spdy/spdy_session.h" | 
| 9 | 9 | 
| 10 namespace net { | 10 namespace net { | 
| 11 | 11 | 
| 12 // The maximum number of sessions to open to a single domain. | 12 // The maximum number of sessions to open to a single domain. | 
| 13 static const size_t kMaxSessionsPerDomain = 1; | 13 static const size_t kMaxSessionsPerDomain = 1; | 
| 14 | 14 | 
| 15 int SpdySessionPool::g_max_sessions_per_domain = kMaxSessionsPerDomain; | 15 int SpdySessionPool::g_max_sessions_per_domain = kMaxSessionsPerDomain; | 
| 16 | 16 | 
| 17 SpdySessionPool::SpdySessionPool(NetworkChangeNotifier* notifier) | 17 SpdySessionPool::SpdySessionPool() { | 
| 18     : network_change_notifier_(notifier) { | 18   NetworkChangeNotifier::AddObserver(this); | 
| 19   if (network_change_notifier_) |  | 
| 20     network_change_notifier_->AddObserver(this); |  | 
| 21 } | 19 } | 
| 22 | 20 | 
| 23 SpdySessionPool::~SpdySessionPool() { | 21 SpdySessionPool::~SpdySessionPool() { | 
| 24   CloseAllSessions(); | 22   CloseAllSessions(); | 
| 25 | 23 | 
| 26   if (network_change_notifier_) | 24   NetworkChangeNotifier::RemoveObserver(this); | 
| 27     network_change_notifier_->RemoveObserver(this); |  | 
| 28 } | 25 } | 
| 29 | 26 | 
| 30 scoped_refptr<SpdySession> SpdySessionPool::Get( | 27 scoped_refptr<SpdySession> SpdySessionPool::Get( | 
| 31     const HostPortPair& host_port_pair, HttpNetworkSession* session, | 28     const HostPortPair& host_port_pair, HttpNetworkSession* session, | 
| 32     const BoundNetLog& net_log) { | 29     const BoundNetLog& net_log) { | 
| 33   scoped_refptr<SpdySession> spdy_session; | 30   scoped_refptr<SpdySession> spdy_session; | 
| 34   SpdySessionList* list = GetSessionList(host_port_pair); | 31   SpdySessionList* list = GetSessionList(host_port_pair); | 
| 35   if (list) { | 32   if (list) { | 
| 36     if (list->size() >= static_cast<unsigned int>(g_max_sessions_per_domain)) { | 33     if (list->size() >= static_cast<unsigned int>(g_max_sessions_per_domain)) { | 
| 37       spdy_session = list->front(); | 34       spdy_session = list->front(); | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 78 void SpdySessionPool::Remove(const scoped_refptr<SpdySession>& session) { | 75 void SpdySessionPool::Remove(const scoped_refptr<SpdySession>& session) { | 
| 79   SpdySessionList* list = GetSessionList(session->host_port_pair()); | 76   SpdySessionList* list = GetSessionList(session->host_port_pair()); | 
| 80   DCHECK(list);  // We really shouldn't remove if we've already been removed. | 77   DCHECK(list);  // We really shouldn't remove if we've already been removed. | 
| 81   if (!list) | 78   if (!list) | 
| 82     return; | 79     return; | 
| 83   list->remove(session); | 80   list->remove(session); | 
| 84   if (list->empty()) | 81   if (list->empty()) | 
| 85     RemoveSessionList(session->host_port_pair()); | 82     RemoveSessionList(session->host_port_pair()); | 
| 86 } | 83 } | 
| 87 | 84 | 
|  | 85 void SpdySessionPool::OnIPAddressChanged() { | 
|  | 86   ClearSessions(); | 
|  | 87 } | 
|  | 88 | 
| 88 SpdySessionPool::SpdySessionList* | 89 SpdySessionPool::SpdySessionList* | 
| 89     SpdySessionPool::AddSessionList(const HostPortPair& host_port_pair) { | 90     SpdySessionPool::AddSessionList(const HostPortPair& host_port_pair) { | 
| 90   DCHECK(sessions_.find(host_port_pair) == sessions_.end()); | 91   DCHECK(sessions_.find(host_port_pair) == sessions_.end()); | 
| 91   SpdySessionPool::SpdySessionList* list = new SpdySessionList(); | 92   SpdySessionPool::SpdySessionList* list = new SpdySessionList(); | 
| 92   sessions_[host_port_pair] = list; | 93   sessions_[host_port_pair] = list; | 
| 93   return list; | 94   return list; | 
| 94 } | 95 } | 
| 95 | 96 | 
| 96 SpdySessionPool::SpdySessionList* | 97 SpdySessionPool::SpdySessionList* | 
| 97     SpdySessionPool::GetSessionList(const HostPortPair& host_port_pair) { | 98     SpdySessionPool::GetSessionList(const HostPortPair& host_port_pair) { | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 128       scoped_refptr<SpdySession> session = list->front(); | 129       scoped_refptr<SpdySession> session = list->front(); | 
| 129       list->pop_front(); | 130       list->pop_front(); | 
| 130       if (close) | 131       if (close) | 
| 131         session->CloseAllStreams(net::ERR_ABORTED); | 132         session->CloseAllStreams(net::ERR_ABORTED); | 
| 132     } | 133     } | 
| 133     delete list; | 134     delete list; | 
| 134   } | 135   } | 
| 135 } | 136 } | 
| 136 | 137 | 
| 137 }  // namespace net | 138 }  // namespace net | 
| OLD | NEW | 
|---|