diff options
-rw-r--r-- | net/http/http_network_session.cc | 1 | ||||
-rw-r--r-- | net/quic/crypto/quic_crypto_client_config.cc | 23 | ||||
-rw-r--r-- | net/quic/crypto/quic_crypto_client_config.h | 13 | ||||
-rw-r--r-- | net/quic/quic_stream_factory.cc | 5 | ||||
-rw-r--r-- | net/quic/quic_stream_factory.h | 3 | ||||
-rw-r--r-- | net/quic/quic_stream_factory_test.cc | 1 |
6 files changed, 44 insertions, 2 deletions
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 9c0e8ae..8371ecd 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -113,6 +113,7 @@ HttpNetworkSession::HttpNetworkSession(const Params& params) params.client_socket_factory : net::ClientSocketFactory::GetDefaultFactory(), params.http_server_properties, + params.quic_server_info_factory, params.quic_crypto_client_stream_factory, params.quic_random ? params.quic_random : QuicRandom::GetInstance(), diff --git a/net/quic/crypto/quic_crypto_client_config.cc b/net/quic/crypto/quic_crypto_client_config.cc index dd2d04c..84dfee0 100644 --- a/net/quic/crypto/quic_crypto_client_config.cc +++ b/net/quic/crypto/quic_crypto_client_config.cc @@ -15,6 +15,7 @@ #include "net/quic/crypto/p256_key_exchange.h" #include "net/quic/crypto/proof_verifier.h" #include "net/quic/crypto/quic_encrypter.h" +#include "net/quic/crypto/quic_server_info.h" #include "net/quic/quic_utils.h" #if defined(OS_WIN) @@ -28,7 +29,14 @@ using std::vector; namespace net { -QuicCryptoClientConfig::QuicCryptoClientConfig() {} +QuicCryptoClientConfig::QuicCryptoClientConfig() + : quic_server_info_factory_(NULL) { +} + +QuicCryptoClientConfig::QuicCryptoClientConfig( + QuicServerInfoFactory* quic_server_info_factory) + : quic_server_info_factory_(quic_server_info_factory) { +} QuicCryptoClientConfig::~QuicCryptoClientConfig() { STLDeleteValues(&cached_states_); @@ -40,6 +48,16 @@ QuicCryptoClientConfig::CachedState::CachedState() QuicCryptoClientConfig::CachedState::~CachedState() {} +void QuicCryptoClientConfig::CachedState::LoadFromDiskCache( + QuicServerInfoFactory* quic_server_info_factory, + const string& server_hostname) { + DCHECK(quic_server_info_factory); + quic_server_info_.reset( + quic_server_info_factory->GetForHost(server_hostname)); + + // TODO(rtenneti): Need to flesh out reading data from disk cache. +} + bool QuicCryptoClientConfig::CachedState::IsComplete(QuicWallTime now) const { if (server_config_.empty() || !server_config_valid_) { return false; @@ -230,6 +248,9 @@ QuicCryptoClientConfig::CachedState* QuicCryptoClientConfig::LookupOrCreate( } CachedState* cached = new CachedState; + if (quic_server_info_factory_) { + cached->LoadFromDiskCache(quic_server_info_factory_, server_hostname); + } cached_states_.insert(make_pair(server_hostname, cached)); return cached; } diff --git a/net/quic/crypto/quic_crypto_client_config.h b/net/quic/crypto/quic_crypto_client_config.h index 30f4cf6..a7c5880 100644 --- a/net/quic/crypto/quic_crypto_client_config.h +++ b/net/quic/crypto/quic_crypto_client_config.h @@ -17,6 +17,9 @@ namespace net { +class QuicServerInfo; +class QuicServerInfoFactory; + // QuicCryptoClientConfig contains crypto-related configuration settings for a // client. Note that this object isn't thread-safe. It's designed to be used on // a single thread at a time. @@ -86,6 +89,11 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig { // unchanged. void InitializeFrom(const CachedState& other); + // TODO(rtenneti): Need to flesh out the details of this method. A temporary + // place holder to load CachedState from disk cache. + void LoadFromDiskCache(QuicServerInfoFactory* quic_server_info_factory, + const std::string& server_hostname); + private: std::string server_config_id_; // An opaque id from the server. std::string server_config_; // A serialized handshake message. @@ -106,10 +114,14 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig { // scfg contains the cached, parsed value of |server_config|. mutable scoped_ptr<CryptoHandshakeMessage> scfg_; + scoped_ptr<QuicServerInfo> quic_server_info_; + DISALLOW_COPY_AND_ASSIGN(CachedState); }; QuicCryptoClientConfig(); + explicit QuicCryptoClientConfig( + QuicServerInfoFactory* quic_server_info_factory); ~QuicCryptoClientConfig(); // Sets the members to reasonable, default values. @@ -207,6 +219,7 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig { // about that server. std::map<std::string, CachedState*> cached_states_; + QuicServerInfoFactory* quic_server_info_factory_; scoped_ptr<ProofVerifier> proof_verifier_; scoped_ptr<ChannelIDSigner> channel_id_signer_; diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc index 22bb874..06e7825 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc @@ -22,6 +22,7 @@ #include "net/quic/congestion_control/tcp_receiver.h" #include "net/quic/crypto/proof_verifier_chromium.h" #include "net/quic/crypto/quic_random.h" +#include "net/quic/crypto/quic_server_info.h" #include "net/quic/port_suggester.h" #include "net/quic/quic_client_session.h" #include "net/quic/quic_clock.h" @@ -273,6 +274,7 @@ QuicStreamFactory::QuicStreamFactory( HostResolver* host_resolver, ClientSocketFactory* client_socket_factory, base::WeakPtr<HttpServerProperties> http_server_properties, + QuicServerInfoFactory* quic_server_info_factory, QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory, QuicRandom* random_generator, QuicClock* clock, @@ -283,6 +285,7 @@ QuicStreamFactory::QuicStreamFactory( host_resolver_(host_resolver), client_socket_factory_(client_socket_factory), http_server_properties_(http_server_properties), + quic_server_info_factory_(quic_server_info_factory), quic_crypto_client_stream_factory_(quic_crypto_client_stream_factory), random_generator_(random_generator), clock_(clock), @@ -603,7 +606,7 @@ QuicCryptoClientConfig* QuicStreamFactory::GetOrCreateCryptoConfig( } else { // TODO(rtenneti): if two quic_sessions for the same host_port_proxy_pair // share the same crypto_config, will it cause issues? - crypto_config = new QuicCryptoClientConfig(); + crypto_config = new QuicCryptoClientConfig(quic_server_info_factory_); crypto_config->SetDefaults(); all_crypto_configs_[host_port_proxy_pair] = crypto_config; PopulateFromCanonicalConfig(host_port_proxy_pair, crypto_config); diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h index f9e7a31..8bf2da2 100644 --- a/net/quic/quic_stream_factory.h +++ b/net/quic/quic_stream_factory.h @@ -33,6 +33,7 @@ class QuicClientSession; class QuicConnectionHelper; class QuicCryptoClientStreamFactory; class QuicRandom; +class QuicServerInfoFactory; class QuicStreamFactory; namespace test { @@ -86,6 +87,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory HostResolver* host_resolver, ClientSocketFactory* client_socket_factory, base::WeakPtr<HttpServerProperties> http_server_properties, + QuicServerInfoFactory* quic_server_info_factory, QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory, QuicRandom* random_generator, QuicClock* clock, @@ -198,6 +200,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory HostResolver* host_resolver_; ClientSocketFactory* client_socket_factory_; base::WeakPtr<HttpServerProperties> http_server_properties_; + QuicServerInfoFactory* quic_server_info_factory_; QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory_; QuicRandom* random_generator_; scoped_ptr<QuicClock> clock_; diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc index 0b1ace7..b2bdf90 100644 --- a/net/quic/quic_stream_factory_test.cc +++ b/net/quic/quic_stream_factory_test.cc @@ -77,6 +77,7 @@ class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> { clock_(new MockClock()), factory_(&host_resolver_, &socket_factory_, base::WeakPtr<HttpServerProperties>(), + NULL, // quic_server_info_factory &crypto_client_stream_factory_, &random_generator_, clock_, kDefaultMaxPacketSize, SupportedVersions(GetParam()), true), |