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

Unified Diff: net/quic/quic_stream_factory.cc

Issue 1613513003: Early connection migration in QUIC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@home
Patch Set: Comments addressed. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_stream_factory.h ('k') | net/quic/quic_stream_factory_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_stream_factory.cc
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 703e9ea6cf0c4c1b6ddb4062db7949499f267a2a..850cb9ce2b5242d39471f82740a990b2f0ae0f01 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -59,6 +59,7 @@
#endif
using std::min;
+using NetworkHandle = net::NetworkChangeNotifier::NetworkHandle;
namespace net {
@@ -591,6 +592,7 @@ QuicStreamFactory::QuicStreamFactory(
bool disable_quic_on_timeout_with_open_streams,
int idle_connection_timeout_seconds,
bool migrate_sessions_on_network_change,
+ bool migrate_sessions_early,
const QuicTagVector& connection_options)
: require_confirmation_(true),
host_resolver_(host_resolver),
@@ -640,6 +642,8 @@ QuicStreamFactory::QuicStreamFactory(
migrate_sessions_on_network_change_(
migrate_sessions_on_network_change &&
NetworkChangeNotifier::AreNetworkHandlesSupported()),
+ migrate_sessions_early_(migrate_sessions_early &&
+ migrate_sessions_on_network_change_),
port_seed_(random_generator_->RandUint64()),
check_persisted_supports_quic_(true),
has_initialized_data_(false),
@@ -680,8 +684,12 @@ QuicStreamFactory::QuicStreamFactory(
new PropertiesBasedQuicServerInfoFactory(http_server_properties_));
}
- DCHECK(
- !(close_sessions_on_ip_change_ && migrate_sessions_on_network_change_));
+ // migrate_sessions_early_ should only be set to true if
+ // migrate_sessions_on_network_change_ is set to true.
+ DCHECK(migrate_sessions_on_network_change_ || !migrate_sessions_early_);
+ // close_sessions_on_ip_change_ and migrate_sessions_on_network_change_ should
+ // never be simultaneously set to true.
+ DCHECK(!close_sessions_on_ip_change_ || !migrate_sessions_on_network_change_);
if (migrate_sessions_on_network_change_) {
NetworkChangeNotifier::AddNetworkObserver(this);
} else if (close_sessions_on_ip_change_) {
@@ -1188,31 +1196,27 @@ void QuicStreamFactory::OnIPAddressChanged() {
set_require_confirmation(true);
}
-void QuicStreamFactory::OnNetworkConnected(
- NetworkChangeNotifier::NetworkHandle network) {}
+void QuicStreamFactory::OnNetworkConnected(NetworkHandle network) {}
-void QuicStreamFactory::OnNetworkMadeDefault(
- NetworkChangeNotifier::NetworkHandle network) {}
+void QuicStreamFactory::OnNetworkMadeDefault(NetworkHandle network) {}
-void QuicStreamFactory::OnNetworkDisconnected(
- NetworkChangeNotifier::NetworkHandle network) {
+void QuicStreamFactory::OnNetworkDisconnected(NetworkHandle network) {
MaybeMigrateOrCloseSessions(network, /*force_close=*/true);
set_require_confirmation(true);
}
// This method is expected to only be called when migrating from Cellular to
// WiFi on Android.
-void QuicStreamFactory::OnNetworkSoonToDisconnect(
- NetworkChangeNotifier::NetworkHandle network) {
+void QuicStreamFactory::OnNetworkSoonToDisconnect(NetworkHandle network) {
MaybeMigrateOrCloseSessions(network, /*force_close=*/false);
}
-NetworkChangeNotifier::NetworkHandle QuicStreamFactory::FindAlternateNetwork(
- NetworkChangeNotifier::NetworkHandle old_network) {
+NetworkHandle QuicStreamFactory::FindAlternateNetwork(
+ NetworkHandle old_network) {
// Find a new network that sessions bound to |old_network| can be migrated to.
NetworkChangeNotifier::NetworkList network_list;
NetworkChangeNotifier::GetConnectedNetworks(&network_list);
- for (NetworkChangeNotifier::NetworkHandle new_network : network_list) {
+ for (NetworkHandle new_network : network_list) {
if (new_network != old_network) {
return new_network;
}
@@ -1220,12 +1224,10 @@ NetworkChangeNotifier::NetworkHandle QuicStreamFactory::FindAlternateNetwork(
return NetworkChangeNotifier::kInvalidNetworkHandle;
}
-void QuicStreamFactory::MaybeMigrateOrCloseSessions(
- NetworkChangeNotifier::NetworkHandle network,
- bool force_close) {
+void QuicStreamFactory::MaybeMigrateOrCloseSessions(NetworkHandle network,
+ bool force_close) {
DCHECK_NE(NetworkChangeNotifier::kInvalidNetworkHandle, network);
- NetworkChangeNotifier::NetworkHandle new_network =
- FindAlternateNetwork(network);
+ NetworkHandle new_network = FindAlternateNetwork(network);
QuicStreamFactory::SessionIdMap::iterator it = all_sessions_.begin();
while (it != all_sessions_.end()) {
@@ -1261,13 +1263,11 @@ void QuicStreamFactory::MaybeMigrateOrCloseSessions(
void QuicStreamFactory::MaybeMigrateSessionEarly(
QuicChromiumClientSession* session) {
- if (session->GetNumActiveStreams() == 0) {
+ if (!migrate_sessions_early_) {
return;
}
- NetworkChangeNotifier::NetworkHandle current_network =
- session->GetDefaultSocket()->GetBoundNetwork();
- NetworkChangeNotifier::NetworkHandle new_network =
- FindAlternateNetwork(current_network);
+ NetworkHandle new_network =
+ FindAlternateNetwork(session->GetDefaultSocket()->GetBoundNetwork());
if (new_network == NetworkChangeNotifier::kInvalidNetworkHandle) {
// No alternate network found.
return;
@@ -1278,7 +1278,7 @@ void QuicStreamFactory::MaybeMigrateSessionEarly(
void QuicStreamFactory::MigrateSessionToNetwork(
QuicChromiumClientSession* session,
- NetworkChangeNotifier::NetworkHandle new_network) {
+ NetworkHandle new_network) {
// Use OS-specified port for socket (DEFAULT_BIND) instead of
// using the PortSuggester since the connection is being migrated
// and not being newly created.
@@ -1341,10 +1341,9 @@ bool QuicStreamFactory::HasActiveJob(const QuicServerId& key) const {
return ContainsKey(active_jobs_, key);
}
-int QuicStreamFactory::ConfigureSocket(
- DatagramClientSocket* socket,
- IPEndPoint addr,
- NetworkChangeNotifier::NetworkHandle network) {
+int QuicStreamFactory::ConfigureSocket(DatagramClientSocket* socket,
+ IPEndPoint addr,
+ NetworkHandle network) {
if (enable_non_blocking_io_ &&
client_socket_factory_ == ClientSocketFactory::GetDefaultFactory()) {
#if defined(OS_WIN)
« no previous file with comments | « net/quic/quic_stream_factory.h ('k') | net/quic/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698