| Index: net/spdy/spdy_session_pool.h
|
| diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h
|
| deleted file mode 100644
|
| index 7d0b294ed75b0465827bcc19929f231ae5aa4e4e..0000000000000000000000000000000000000000
|
| --- a/net/spdy/spdy_session_pool.h
|
| +++ /dev/null
|
| @@ -1,261 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef NET_SPDY_SPDY_SESSION_POOL_H_
|
| -#define NET_SPDY_SPDY_SESSION_POOL_H_
|
| -
|
| -#include <stddef.h>
|
| -
|
| -#include <map>
|
| -#include <memory>
|
| -#include <set>
|
| -#include <vector>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "net/base/host_port_pair.h"
|
| -#include "net/base/ip_endpoint.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/net_export.h"
|
| -#include "net/base/network_change_notifier.h"
|
| -#include "net/cert/cert_database.h"
|
| -#include "net/proxy/proxy_config.h"
|
| -#include "net/proxy/proxy_server.h"
|
| -#include "net/spdy/platform/api/spdy_string.h"
|
| -#include "net/spdy/server_push_delegate.h"
|
| -#include "net/spdy/spdy_protocol.h"
|
| -#include "net/spdy/spdy_session_key.h"
|
| -#include "net/ssl/ssl_config_service.h"
|
| -
|
| -namespace base {
|
| -namespace trace_event {
|
| -class ProcessMemoryDump;
|
| -}
|
| -}
|
| -
|
| -namespace net {
|
| -
|
| -class ClientSocketHandle;
|
| -class HostResolver;
|
| -class HttpServerProperties;
|
| -class NetLogWithSource;
|
| -class ProxyDelegate;
|
| -class SpdySession;
|
| -class TransportSecurityState;
|
| -
|
| -// This is a very simple pool for open SpdySessions.
|
| -class NET_EXPORT SpdySessionPool
|
| - : public NetworkChangeNotifier::IPAddressObserver,
|
| - public SSLConfigService::Observer,
|
| - public CertDatabase::Observer {
|
| - public:
|
| - typedef base::TimeTicks (*TimeFunc)(void);
|
| -
|
| - SpdySessionPool(HostResolver* host_resolver,
|
| - SSLConfigService* ssl_config_service,
|
| - HttpServerProperties* http_server_properties,
|
| - TransportSecurityState* transport_security_state,
|
| - bool enable_ping_based_connection_checking,
|
| - size_t session_max_recv_window_size,
|
| - const SettingsMap& initial_settings,
|
| - SpdySessionPool::TimeFunc time_func,
|
| - ProxyDelegate* proxy_delegate);
|
| - ~SpdySessionPool() override;
|
| -
|
| - // In the functions below, a session is "available" if this pool has
|
| - // a reference to it and there is some SpdySessionKey for which
|
| - // FindAvailableSession() will return it. A session is "unavailable"
|
| - // if this pool has a reference to it but it won't be returned by
|
| - // FindAvailableSession() for any SpdySessionKey; for example, this
|
| - // can happen when a session receives a GOAWAY frame and is still
|
| - // processing existing streams.
|
| -
|
| - // Create a new SPDY session from an existing socket. There must
|
| - // not already be a session for the given key.
|
| - //
|
| - // |is_secure| can be false for testing or when SPDY is configured
|
| - // to work with non-secure sockets.
|
| - //
|
| - // Returns the new SpdySession. Note that the SpdySession begins reading from
|
| - // |connection| on a subsequent event loop iteration, so it may be closed
|
| - // immediately afterwards if the first read of |connection| fails.
|
| - base::WeakPtr<SpdySession> CreateAvailableSessionFromSocket(
|
| - const SpdySessionKey& key,
|
| - std::unique_ptr<ClientSocketHandle> connection,
|
| - const NetLogWithSource& net_log,
|
| - bool is_secure);
|
| -
|
| - // If |url| is not empty and there is a session for |key| that has an
|
| - // unclaimed push stream for |url|, return it.
|
| - // Otherwise if there is an available session for |key|, return it.
|
| - // Otherwise if there is a session to pool to based on IP address:
|
| - // * if |enable_ip_based_pooling == true|,
|
| - // then mark it as available for |key| and return it;
|
| - // * if |enable_ip_based_pooling == false|,
|
| - // then remove it from the available sessions, and return nullptr.
|
| - // Otherwise return nullptr.
|
| - base::WeakPtr<SpdySession> FindAvailableSession(
|
| - const SpdySessionKey& key,
|
| - const GURL& url,
|
| - bool enable_ip_based_pooling,
|
| - const NetLogWithSource& net_log);
|
| -
|
| - // Remove all mappings and aliases for the given session, which must
|
| - // still be available. Except for in tests, this must be called by
|
| - // the given session itself.
|
| - void MakeSessionUnavailable(
|
| - const base::WeakPtr<SpdySession>& available_session);
|
| -
|
| - // Removes an unavailable session from the pool. Except for in
|
| - // tests, this must be called by the given session itself.
|
| - void RemoveUnavailableSession(
|
| - const base::WeakPtr<SpdySession>& unavailable_session);
|
| -
|
| - // Close only the currently existing SpdySessions with |error|.
|
| - // Let any new ones created while this method is running continue to
|
| - // live.
|
| - void CloseCurrentSessions(Error error);
|
| -
|
| - // Close only the currently existing SpdySessions that are idle.
|
| - // Let any new ones created while this method is running continue to
|
| - // live.
|
| - void CloseCurrentIdleSessions();
|
| -
|
| - // Close all SpdySessions, including any new ones created in the process of
|
| - // closing the current ones.
|
| - void CloseAllSessions();
|
| -
|
| - // (Un)register a SpdySession with an unclaimed pushed stream for |url|, so
|
| - // that the right SpdySession can be served by FindAvailableSession.
|
| - void RegisterUnclaimedPushedStream(GURL url,
|
| - base::WeakPtr<SpdySession> spdy_session);
|
| - void UnregisterUnclaimedPushedStream(const GURL& url,
|
| - SpdySession* spdy_session);
|
| -
|
| - // Creates a Value summary of the state of the spdy session pool.
|
| - std::unique_ptr<base::Value> SpdySessionPoolInfoToValue() const;
|
| -
|
| - HttpServerProperties* http_server_properties() {
|
| - return http_server_properties_;
|
| - }
|
| -
|
| - void set_server_push_delegate(ServerPushDelegate* push_delegate) {
|
| - push_delegate_ = push_delegate;
|
| - }
|
| -
|
| - // NetworkChangeNotifier::IPAddressObserver methods:
|
| -
|
| - // We flush all idle sessions and release references to the active ones so
|
| - // they won't get re-used. The active ones will either complete successfully
|
| - // or error out due to the IP address change.
|
| - void OnIPAddressChanged() override;
|
| -
|
| - // SSLConfigService::Observer methods:
|
| -
|
| - // We perform the same flushing as described above when SSL settings change.
|
| - void OnSSLConfigChanged() override;
|
| -
|
| - // CertDatabase::Observer methods:
|
| -
|
| - // We perform the same flushing as described above when certificate database
|
| - // is changed.
|
| - void OnCertDBChanged() override;
|
| -
|
| - void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
|
| - const SpdyString& parent_dump_absolute_name) const;
|
| -
|
| - private:
|
| - friend class SpdySessionPoolPeer; // For testing.
|
| -
|
| - typedef std::set<SpdySession*> SessionSet;
|
| - typedef std::vector<base::WeakPtr<SpdySession> > WeakSessionList;
|
| - typedef std::map<SpdySessionKey, base::WeakPtr<SpdySession> >
|
| - AvailableSessionMap;
|
| - typedef std::map<IPEndPoint, SpdySessionKey> AliasMap;
|
| - typedef std::map<GURL, WeakSessionList> UnclaimedPushedStreamMap;
|
| -
|
| - // Returns true iff |session| is in |available_sessions_|.
|
| - bool IsSessionAvailable(const base::WeakPtr<SpdySession>& session) const;
|
| -
|
| - // Map the given key to the given session. There must not already be
|
| - // a mapping for |key|.
|
| - void MapKeyToAvailableSession(const SpdySessionKey& key,
|
| - const base::WeakPtr<SpdySession>& session);
|
| -
|
| - // Returns an iterator into |available_sessions_| for the given key,
|
| - // which may be equal to |available_sessions_.end()|.
|
| - AvailableSessionMap::iterator LookupAvailableSessionByKey(
|
| - const SpdySessionKey& key);
|
| -
|
| - // Remove the mapping of the given key, which must exist.
|
| - void UnmapKey(const SpdySessionKey& key);
|
| -
|
| - // Remove all aliases for |key| from the aliases table.
|
| - void RemoveAliases(const SpdySessionKey& key);
|
| -
|
| - // Get a copy of the current sessions as a list of WeakPtrs. Used by
|
| - // CloseCurrentSessionsHelper() below.
|
| - WeakSessionList GetCurrentSessions() const;
|
| -
|
| - // Close only the currently existing SpdySessions with |error|. Let
|
| - // any new ones created while this method is running continue to
|
| - // live. If |idle_only| is true only idle sessions are closed.
|
| - void CloseCurrentSessionsHelper(Error error,
|
| - const SpdyString& description,
|
| - bool idle_only);
|
| -
|
| - HttpServerProperties* http_server_properties_;
|
| -
|
| - TransportSecurityState* transport_security_state_;
|
| -
|
| - // The set of all sessions. This is a superset of the sessions in
|
| - // |available_sessions_|.
|
| - //
|
| - // |sessions_| owns all its SpdySession objects.
|
| - SessionSet sessions_;
|
| -
|
| - // This is a map of available sessions by key. A session may appear
|
| - // more than once in this map if it has aliases.
|
| - AvailableSessionMap available_sessions_;
|
| -
|
| - // A map of IPEndPoint aliases for sessions.
|
| - AliasMap aliases_;
|
| -
|
| - // A map of all SpdySessions owned by |this| that have an unclaimed pushed
|
| - // streams for a GURL. Might contain invalid WeakPtr's.
|
| - // A single SpdySession can only have at most one pushed stream for each GURL,
|
| - // but it is possible that multiple SpdySessions have pushed streams for the
|
| - // same GURL.
|
| - UnclaimedPushedStreamMap unclaimed_pushed_streams_;
|
| -
|
| - const scoped_refptr<SSLConfigService> ssl_config_service_;
|
| - HostResolver* const resolver_;
|
| -
|
| - // Defaults to true. May be controlled via SpdySessionPoolPeer for tests.
|
| - bool enable_sending_initial_data_;
|
| - bool enable_ping_based_connection_checking_;
|
| -
|
| - size_t session_max_recv_window_size_;
|
| -
|
| - // Settings that are sent in the initial SETTINGS frame
|
| - // (if |enable_sending_initial_data_| is true),
|
| - // and also control SpdySession parameters like initial receive window size
|
| - // and maximum HPACK dynamic table size.
|
| - const SettingsMap initial_settings_;
|
| -
|
| - TimeFunc time_func_;
|
| - ServerPushDelegate* push_delegate_;
|
| -
|
| - // Determines if a proxy is a trusted SPDY proxy, which is allowed to push
|
| - // resources from origins that are different from those of their associated
|
| - // streams. May be nullptr.
|
| - ProxyDelegate* proxy_delegate_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SpdySessionPool);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_SPDY_SPDY_SESSION_POOL_H_
|
|
|