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 944a27f256aecaa422cbc8c0e49e9f0d26c2488e..3e04d77b1452bf1c6431ac68c0611568f17533d1 100644 |
--- a/net/quic/chromium/quic_stream_factory.cc |
+++ b/net/quic/chromium/quic_stream_factory.cc |
@@ -1454,24 +1454,26 @@ void QuicStreamFactory::OnNetworkConnected(NetworkHandle network) { |
status_ = OPEN; |
} |
-void QuicStreamFactory::OnNetworkMadeDefault(NetworkHandle network) {} |
+void QuicStreamFactory::OnNetworkMadeDefault(NetworkHandle network) { |
+ ScopedConnectionMigrationEventLog scoped_event_log(net_log_, |
+ "OnNetworkMadeDefault"); |
+ DCHECK_NE(NetworkChangeNotifier::kInvalidNetworkHandle, network); |
+ MaybeMigrateOrCloseSessions(network, /*force_close=*/false, |
+ scoped_event_log.net_log()); |
+ set_require_confirmation(true); |
+} |
void QuicStreamFactory::OnNetworkDisconnected(NetworkHandle network) { |
ScopedConnectionMigrationEventLog scoped_event_log(net_log_, |
"OnNetworkDisconnected"); |
- MaybeMigrateOrCloseSessions(network, /*force_close=*/true, |
+ NetworkHandle new_network = FindAlternateNetwork(network); |
+ MaybeMigrateOrCloseSessions(new_network, /*force_close=*/true, |
scoped_event_log.net_log()); |
- set_require_confirmation(true); |
} |
// This method is expected to only be called when migrating from Cellular to |
-// WiFi on Android. |
-void QuicStreamFactory::OnNetworkSoonToDisconnect(NetworkHandle network) { |
- ScopedConnectionMigrationEventLog scoped_event_log( |
- net_log_, "OnNetworkSoonToDisconnect"); |
- MaybeMigrateOrCloseSessions(network, /*force_close=*/false, |
- scoped_event_log.net_log()); |
-} |
+// WiFi on Android, and should always be preceded by OnNetworkMadeDefault(). |
+void QuicStreamFactory::OnNetworkSoonToDisconnect(NetworkHandle network) {} |
NetworkHandle QuicStreamFactory::FindAlternateNetwork( |
NetworkHandle old_network) { |
@@ -1486,22 +1488,19 @@ NetworkHandle QuicStreamFactory::FindAlternateNetwork( |
} |
void QuicStreamFactory::MaybeMigrateOrCloseSessions( |
- NetworkHandle network, |
+ NetworkHandle new_network, |
bool force_close, |
const BoundNetLog& bound_net_log) { |
- DCHECK_NE(NetworkChangeNotifier::kInvalidNetworkHandle, network); |
- NetworkHandle new_network = FindAlternateNetwork(network); |
- |
QuicStreamFactory::SessionIdMap::iterator it = all_sessions_.begin(); |
while (it != all_sessions_.end()) { |
QuicChromiumClientSession* session = it->first; |
++it; |
- if (session->GetDefaultSocket()->GetBoundNetwork() != network) { |
- // If session is not bound to |network|, move on. |
+ if (session->GetDefaultSocket()->GetBoundNetwork() == new_network) { |
+ // If session is already bound to |new_network|, move on. |
HistogramAndLogMigrationFailure( |
bound_net_log, MIGRATION_STATUS_ALREADY_MIGRATED, |
- session->connection_id(), "Not bound to network"); |
+ session->connection_id(), "Already bound to new network"); |
continue; |
} |
if (session->GetNumActiveStreams() == 0) { |
@@ -1523,20 +1522,16 @@ void QuicStreamFactory::MaybeMigrateOrCloseSessions( |
NetLog::TYPE_QUIC_CONNECTION_MIGRATION_FAILURE, |
base::Bind(&NetLogQuicConnectionMigrationFailureCallback, |
session->connection_id(), "No new network")); |
- if (force_close) { |
Ryan Hamilton
2016/08/19 20:05:02
This looks like a change in behavior, but I might
Jana
2016/08/19 21:44:08
I've moved the code around a bit, hopefully it'll
|
- session->CloseSessionOnError(ERR_NETWORK_CHANGED, |
- QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK); |
- } |
+ session->CloseSessionOnError(ERR_NETWORK_CHANGED, |
+ QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK); |
continue; |
} |
if (session->config()->DisableConnectionMigration()) { |
- // Do not migrate sessions where connection migration is disabled by |
- // config. |
+ // Do not migrate sessions where connection migration is disabled. |
HistogramAndLogMigrationFailure(bound_net_log, MIGRATION_STATUS_DISABLED, |
session->connection_id(), |
"Migration disabled"); |
if (force_close) { |
- // Close sessions where connection migration is disabled. |
session->CloseSessionOnError(ERR_NETWORK_CHANGED, |
QUIC_IP_ADDRESS_CHANGED); |
} |
@@ -1548,7 +1543,6 @@ void QuicStreamFactory::MaybeMigrateOrCloseSessions( |
bound_net_log, MIGRATION_STATUS_NON_MIGRATABLE_STREAM, |
session->connection_id(), "Non-migratable stream"); |
if (force_close) { |
- // Close sessions with non-migratable streams. |
session->CloseSessionOnError( |
ERR_NETWORK_CHANGED, |
QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM); |