Index: net/quic/chromium/quic_stream_factory.h |
diff --git a/net/quic/chromium/quic_stream_factory.h b/net/quic/chromium/quic_stream_factory.h |
index 661cfeb23ee6dcba3cfb4244d9c2be52189dfb8c..f0addeace2846b2a07a9a78f245a6ca5bc4a5744 100644 |
--- a/net/quic/chromium/quic_stream_factory.h |
+++ b/net/quic/chromium/quic_stream_factory.h |
@@ -66,6 +66,7 @@ |
class QuicCryptoClientStreamFactory; |
class QuicRandom; |
class QuicServerInfo; |
+class QuicServerInfoFactory; |
class QuicStreamFactory; |
class SocketPerformanceWatcherFactory; |
class TransportSecurityState; |
@@ -207,8 +208,11 @@ |
size_t max_packet_length, |
const std::string& user_agent_id, |
const QuicVersionVector& supported_versions, |
+ float load_server_info_timeout_srtt_multiplier, |
+ bool enable_connection_racing, |
bool enable_non_blocking_io, |
- bool store_server_configs_in_properties, |
+ bool disable_disk_cache, |
+ int max_server_configs_stored_in_properties, |
bool close_sessions_on_ip_change, |
bool mark_quic_broken_when_network_blackholes, |
int idle_connection_timeout_seconds, |
@@ -364,8 +368,24 @@ |
QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); } |
+ bool has_quic_server_info_factory() const { |
+ return quic_server_info_factory_.get() != nullptr; |
+ } |
+ |
+ QuicServerInfoFactory* quic_server_info_factory() const { |
+ return quic_server_info_factory_.get(); |
+ } |
+ |
+ void set_quic_server_info_factory( |
+ QuicServerInfoFactory* quic_server_info_factory); |
+ |
void set_server_push_delegate(ServerPushDelegate* push_delegate) { |
push_delegate_ = push_delegate; |
+ } |
+ |
+ bool enable_connection_racing() const { return enable_connection_racing_; } |
+ void set_enable_connection_racing(bool enable_connection_racing) { |
+ enable_connection_racing_ = enable_connection_racing; |
} |
bool migrate_sessions_on_network_change() const { |
@@ -400,6 +420,12 @@ |
typedef std::map<QuicServerId, std::unique_ptr<CertVerifierJob>> |
CertVerifierJobMap; |
+ // Creates a job which doesn't wait for server config to be loaded from the |
+ // disk cache. This job is started via a PostTask. |
+ void CreateAuxilaryJob(const QuicSessionKey& key, |
+ int cert_verify_flags, |
+ const NetLogWithSource& net_log); |
+ |
// Returns a newly created QuicHttpStream owned by the caller. |
std::unique_ptr<QuicHttpStream> CreateFromSession( |
QuicChromiumClientSession* session); |
@@ -412,6 +438,7 @@ |
bool HasActiveCertVerifierJob(const QuicServerId& server_id) const; |
int CreateSession(const QuicSessionKey& key, |
int cert_verify_flags, |
+ std::unique_ptr<QuicServerInfo> quic_server_info, |
bool require_confirmation, |
const AddressList& address_list, |
base::TimeTicks dns_resolution_start_time, |
@@ -456,6 +483,11 @@ |
const QuicServerId& server_id, |
const std::unique_ptr<QuicServerInfo>& server_info, |
QuicConnectionId* connection_id); |
+ |
+ // Initialize |quic_supported_servers_at_startup_| with the list of servers |
+ // that supported QUIC at start up and also initialize in-memory cache of |
+ // QuicServerInfo objects from HttpServerProperties. |
+ void MaybeInitialize(); |
void ProcessGoingAwaySession(QuicChromiumClientSession* session, |
const QuicServerId& server_id, |
@@ -481,6 +513,7 @@ |
ProxyDelegate* proxy_delegate_; |
TransportSecurityState* transport_security_state_; |
CTVerifier* cert_transparency_verifier_; |
+ std::unique_ptr<QuicServerInfoFactory> quic_server_info_factory_; |
QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory_; |
QuicRandom* random_generator_; // Unowned. |
QuicClock* clock_; // Unowned. |
@@ -525,15 +558,26 @@ |
const QuicVersionVector supported_versions_; |
+ // Specifies the ratio between time to load QUIC server information from disk |
+ // cache to 'smoothed RTT'. This ratio is used to calculate the timeout in |
+ // milliseconds to wait for loading of QUIC server information. If we don't |
+ // want to timeout, set |load_server_info_timeout_srtt_multiplier_| to 0. |
+ float load_server_info_timeout_srtt_multiplier_; |
+ |
+ // Set if we want to race connections - one connection that sends |
+ // INCHOATE_HELLO and another connection that sends CHLO after loading server |
+ // config from the disk cache. |
+ bool enable_connection_racing_; |
+ |
// Set if experimental non-blocking IO should be used on windows sockets. |
bool enable_non_blocking_io_; |
+ |
+ // Set if we do not want to load server config from the disk cache. |
+ bool disable_disk_cache_; |
// True if QUIC should be marked as broken when a connection blackholes after |
// the handshake is confirmed. |
bool mark_quic_broken_when_network_blackholes_; |
- |
- // Set if QUIC server configs should be stored in HttpServerProperties. |
- bool store_server_configs_in_properties_; |
// PING timeout for connections. |
QuicTime::Delta ping_timeout_; |
@@ -575,6 +619,8 @@ |
// Local address of socket that was created in CreateSession. |
IPEndPoint local_address_; |
bool check_persisted_supports_quic_; |
+ bool has_initialized_data_; |
+ std::set<HostPortPair> quic_supported_servers_at_startup_; |
NetworkConnection network_connection_; |