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

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

Issue 2802015: Massively simplify the NetworkChangeNotifier infrastructure:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months 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
OLDNEW
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 #ifndef NET_SPDY_SPDY_SESSION_POOL_H_ 5 #ifndef NET_SPDY_SPDY_SESSION_POOL_H_
6 #define NET_SPDY_SPDY_SESSION_POOL_H_ 6 #define NET_SPDY_SPDY_SESSION_POOL_H_
7 7
8 #include <map> 8 #include <map>
9 #include <list> 9 #include <list>
10 #include <string> 10 #include <string>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/ref_counted.h" 13 #include "base/ref_counted.h"
14 #include "base/scoped_ptr.h" 14 #include "base/scoped_ptr.h"
15 #include "net/base/host_port_pair.h" 15 #include "net/base/host_port_pair.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/base/network_change_notifier.h" 17 #include "net/base/network_change_notifier.h"
18 18
19 namespace net { 19 namespace net {
20 20
21 class BoundNetLog; 21 class BoundNetLog;
22 class ClientSocketHandle; 22 class ClientSocketHandle;
23 class HttpNetworkSession; 23 class HttpNetworkSession;
24 class NetworkChangeNotifier;
25 class SpdySession; 24 class SpdySession;
26 25
27 // This is a very simple pool for open SpdySessions. 26 // This is a very simple pool for open SpdySessions.
28 // TODO(mbelshe): Make this production ready. 27 // TODO(mbelshe): Make this production ready.
29 class SpdySessionPool 28 class SpdySessionPool
30 : public base::RefCounted<SpdySessionPool>, 29 : public base::RefCounted<SpdySessionPool>,
31 public NetworkChangeNotifier::Observer { 30 public NetworkChangeNotifier::Observer {
32 public: 31 public:
33 explicit SpdySessionPool(NetworkChangeNotifier* notifier); 32 SpdySessionPool();
34 33
35 // Either returns an existing SpdySession or creates a new SpdySession for 34 // Either returns an existing SpdySession or creates a new SpdySession for
36 // use. 35 // use.
37 scoped_refptr<SpdySession> Get( 36 scoped_refptr<SpdySession> Get(
38 const HostPortPair& host_port_pair, HttpNetworkSession* session, 37 const HostPortPair& host_port_pair, HttpNetworkSession* session,
39 const BoundNetLog& net_log); 38 const BoundNetLog& net_log);
40 39
41 // Set the maximum concurrent sessions per domain. 40 // Set the maximum concurrent sessions per domain.
42 static void set_max_sessions_per_domain(int max) { 41 static void set_max_sessions_per_domain(int max) {
43 if (max >= 1) 42 if (max >= 1)
(...skipping 21 matching lines...) Expand all
65 void CloseAllSessions() { RemoveAllSessions(true); } 64 void CloseAllSessions() { RemoveAllSessions(true); }
66 65
67 // Removes a SpdySession from the SpdySessionPool. 66 // Removes a SpdySession from the SpdySessionPool.
68 void Remove(const scoped_refptr<SpdySession>& session); 67 void Remove(const scoped_refptr<SpdySession>& session);
69 68
70 // NetworkChangeNotifier::Observer methods: 69 // NetworkChangeNotifier::Observer methods:
71 70
72 // We flush all idle sessions and release references to the active ones so 71 // We flush all idle sessions and release references to the active ones so
73 // they won't get re-used. The active ones will either complete successfully 72 // they won't get re-used. The active ones will either complete successfully
74 // or error out due to the IP address change. 73 // or error out due to the IP address change.
75 virtual void OnIPAddressChanged() { ClearSessions(); } 74 virtual void OnIPAddressChanged();
76 75
77 private: 76 private:
78 friend class base::RefCounted<SpdySessionPool>; 77 friend class base::RefCounted<SpdySessionPool>;
79 friend class SpdySessionPoolPeer; // For testing. 78 friend class SpdySessionPoolPeer; // For testing.
80 friend class SpdyNetworkTransactionTest; // For testing. 79 friend class SpdyNetworkTransactionTest; // For testing.
81 80
82 typedef std::list<scoped_refptr<SpdySession> > SpdySessionList; 81 typedef std::list<scoped_refptr<SpdySession> > SpdySessionList;
83 typedef std::map<HostPortPair, SpdySessionList*> SpdySessionsMap; 82 typedef std::map<HostPortPair, SpdySessionList*> SpdySessionsMap;
84 83
85 virtual ~SpdySessionPool(); 84 virtual ~SpdySessionPool();
86 85
87 // Helper functions for manipulating the lists. 86 // Helper functions for manipulating the lists.
88 SpdySessionList* AddSessionList(const HostPortPair& host_port_pair); 87 SpdySessionList* AddSessionList(const HostPortPair& host_port_pair);
89 SpdySessionList* GetSessionList(const HostPortPair& host_port_pair); 88 SpdySessionList* GetSessionList(const HostPortPair& host_port_pair);
90 const SpdySessionList* GetSessionList( 89 const SpdySessionList* GetSessionList(
91 const HostPortPair& host_port_pair) const; 90 const HostPortPair& host_port_pair) const;
92 void RemoveSessionList(const HostPortPair& host_port_pair); 91 void RemoveSessionList(const HostPortPair& host_port_pair);
93 // Releases the SpdySessionPool reference to all sessions. Will result in all 92 // Releases the SpdySessionPool reference to all sessions. Will result in all
94 // idle sessions being deleted, and the active sessions from being reused, so 93 // idle sessions being deleted, and the active sessions from being reused, so
95 // they will be deleted once all active streams belonging to that session go 94 // they will be deleted once all active streams belonging to that session go
96 // away. 95 // away.
97 void ClearSessions() { RemoveAllSessions(false); } 96 void ClearSessions() { RemoveAllSessions(false); }
98 void RemoveAllSessions(bool close); 97 void RemoveAllSessions(bool close);
99 98
100 // This is our weak session pool - one session per domain. 99 // This is our weak session pool - one session per domain.
101 SpdySessionsMap sessions_; 100 SpdySessionsMap sessions_;
102 101
103 NetworkChangeNotifier* const network_change_notifier_;
104
105 static int g_max_sessions_per_domain; 102 static int g_max_sessions_per_domain;
106 103
107 DISALLOW_COPY_AND_ASSIGN(SpdySessionPool); 104 DISALLOW_COPY_AND_ASSIGN(SpdySessionPool);
108 }; 105 };
109 106
110 } // namespace net 107 } // namespace net
111 108
112 #endif // NET_SPDY_SPDY_SESSION_POOL_H_ 109 #endif // NET_SPDY_SPDY_SESSION_POOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698