Index: net/quic/chromium/quic_stream_factory.cc |
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc |
index df0e5caf2fd1ce950da40fff2c1a64e8bf0036ed..d0b813464832a454c61e44d15763b8c92551d52f 100644 |
--- a/net/quic/chromium/quic_stream_factory.cc |
+++ b/net/quic/chromium/quic_stream_factory.cc |
@@ -73,18 +73,6 @@ enum CreateSessionFailure { |
CREATION_ERROR_MAX |
}; |
-enum QuicConnectionMigrationStatus { |
- MIGRATION_STATUS_NO_MIGRATABLE_STREAMS, |
- MIGRATION_STATUS_ALREADY_MIGRATED, |
- MIGRATION_STATUS_INTERNAL_ERROR, |
- MIGRATION_STATUS_TOO_MANY_CHANGES, |
- MIGRATION_STATUS_SUCCESS, |
- MIGRATION_STATUS_NON_MIGRATABLE_STREAM, |
- MIGRATION_STATUS_DISABLED, |
- MIGRATION_STATUS_NO_ALTERNATE_NETWORK, |
- MIGRATION_STATUS_MAX |
-}; |
- |
// The maximum receive window sizes for QUIC sessions and streams. |
const int32_t kQuicSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB |
const int32_t kQuicStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB |
@@ -1448,6 +1436,11 @@ void QuicStreamFactory::OnIPAddressChanged() { |
void QuicStreamFactory::OnNetworkConnected(NetworkHandle network) { |
num_timeouts_with_open_streams_ = 0; |
status_ = OPEN; |
+ ScopedConnectionMigrationEventLog scoped_event_log(net_log_, |
+ "OnNetworkConnected"); |
+ for (auto session : all_sessions_) { |
+ session.first->OnNetworkConnected(network, scoped_event_log.net_log()); |
+ } |
} |
void QuicStreamFactory::OnNetworkMadeDefault(NetworkHandle network) { |
@@ -1492,16 +1485,6 @@ void QuicStreamFactory::MaybeMigrateOrCloseSessions( |
QuicChromiumClientSession* session = it->first; |
++it; |
- // Migration attempted, but no new network was found. Close session. |
- if (new_network == NetworkChangeNotifier::kInvalidNetworkHandle) { |
- HistogramAndLogMigrationFailure( |
- bound_net_log, MIGRATION_STATUS_NO_ALTERNATE_NETWORK, |
- session->connection_id(), "No alternate network found"); |
- session->CloseSessionOnError(ERR_NETWORK_CHANGED, |
- QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK); |
- continue; |
- } |
- |
// If session is already bound to |new_network|, move on. |
if (session->GetDefaultSocket()->GetBoundNetwork() == new_network) { |
HistogramAndLogMigrationFailure( |
@@ -1548,6 +1531,13 @@ void QuicStreamFactory::MaybeMigrateOrCloseSessions( |
continue; |
} |
+ // No new network was found. Notify session, so it can wait for a |
+ // new network. |
+ if (new_network == NetworkChangeNotifier::kInvalidNetworkHandle) { |
+ session->OnNoNewNetwork(); |
+ continue; |
+ } |
+ |
MigrateSessionToNewNetwork(session, new_network, |
/*close_session_on_error=*/true, bound_net_log); |
} |
@@ -1852,8 +1842,7 @@ int QuicStreamFactory::CreateSession( |
clock_.get(), transport_security_state_, std::move(server_info), |
server_id, yield_after_packets_, yield_after_duration_, cert_verify_flags, |
config, &crypto_config_, network_connection_.GetDescription(), |
- dns_resolution_end_time, &push_promise_index_, |
- base::ThreadTaskRunnerHandle::Get().get(), |
+ dns_resolution_end_time, &push_promise_index_, task_runner_, |
std::move(socket_performance_watcher), net_log.net_log()); |
all_sessions_[*session] = key; // owning pointer |