OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/chromium/quic_stream_factory.h" | 5 #include "net/quic/chromium/quic_stream_factory.h" |
6 | 6 |
7 #include <ostream> | 7 #include <ostream> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
226 | 226 |
227 void SetConnectedNetworksList(const NetworkList& network_list) { | 227 void SetConnectedNetworksList(const NetworkList& network_list) { |
228 connected_networks_ = network_list; | 228 connected_networks_ = network_list; |
229 } | 229 } |
230 | 230 |
231 void GetCurrentConnectedNetworks(NetworkList* network_list) const override { | 231 void GetCurrentConnectedNetworks(NetworkList* network_list) const override { |
232 network_list->clear(); | 232 network_list->clear(); |
233 *network_list = connected_networks_; | 233 *network_list = connected_networks_; |
234 } | 234 } |
235 | 235 |
236 void NotifyNetworkSoonToDisconnect( | 236 void NotifyNetworkMadeDefault(NetworkChangeNotifier::NetworkHandle network) { |
237 NetworkChangeNotifier::NetworkHandle network) { | |
238 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( | 237 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( |
239 NetworkChangeNotifier::SOON_TO_DISCONNECT, network); | 238 NetworkChangeNotifier::MADE_DEFAULT, network); |
240 // Spin the message loop so the notification is delivered. | 239 // Spin the message loop so the notification is delivered. |
241 base::RunLoop().RunUntilIdle(); | 240 base::RunLoop().RunUntilIdle(); |
242 } | 241 } |
243 | 242 |
244 void NotifyNetworkDisconnected(NetworkChangeNotifier::NetworkHandle network) { | 243 void NotifyNetworkDisconnected(NetworkChangeNotifier::NetworkHandle network) { |
245 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( | 244 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( |
246 NetworkChangeNotifier::DISCONNECTED, network); | 245 NetworkChangeNotifier::DISCONNECTED, network); |
247 // Spin the message loop so the notification is delivered. | 246 // Spin the message loop so the notification is delivered. |
248 base::RunLoop().RunUntilIdle(); | 247 base::RunLoop().RunUntilIdle(); |
249 } | 248 } |
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1414 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1413 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
1415 stream = request2.CreateStream(); | 1414 stream = request2.CreateStream(); |
1416 stream.reset(); // Will reset stream 3. | 1415 stream.reset(); // Will reset stream 3. |
1417 | 1416 |
1418 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1417 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1419 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1418 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1420 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 1419 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
1421 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 1420 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
1422 } | 1421 } |
1423 | 1422 |
1424 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnect) { | 1423 TEST_P(QuicStreamFactoryTest, OnNetworkChangeNetworkMadeDefault) { |
1425 InitializeConnectionMigrationTest( | 1424 InitializeConnectionMigrationTest( |
1426 {kDefaultNetworkForTests, kNewNetworkForTests}); | 1425 {kDefaultNetworkForTests, kNewNetworkForTests}); |
1427 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1426 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
1428 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1427 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1429 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1428 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1430 | 1429 |
1431 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1430 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
1432 std::unique_ptr<QuicEncryptedPacket> request_packet( | 1431 std::unique_ptr<QuicEncryptedPacket> request_packet( |
1433 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true)); | 1432 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true)); |
1434 MockWrite writes[] = {MockWrite(SYNCHRONOUS, request_packet->data(), | 1433 MockWrite writes[] = {MockWrite(SYNCHRONOUS, request_packet->data(), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1480 MockRead reads1[] = {MockRead(ASYNC, response_headers_packet->data(), | 1479 MockRead reads1[] = {MockRead(ASYNC, response_headers_packet->data(), |
1481 response_headers_packet->length(), 1), | 1480 response_headers_packet->length(), 1), |
1482 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)}; | 1481 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)}; |
1483 SequencedSocketData socket_data1(reads1, arraysize(reads1), writes1, | 1482 SequencedSocketData socket_data1(reads1, arraysize(reads1), writes1, |
1484 arraysize(writes1)); | 1483 arraysize(writes1)); |
1485 socket_factory_.AddSocketDataProvider(&socket_data1); | 1484 socket_factory_.AddSocketDataProvider(&socket_data1); |
1486 | 1485 |
1487 // Trigger connection migration. This should cause a PING frame | 1486 // Trigger connection migration. This should cause a PING frame |
1488 // to be emitted. | 1487 // to be emitted. |
1489 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1488 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
1490 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | 1489 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
1491 | 1490 |
1492 // The session should now be marked as going away. Ensure that | 1491 // The session should now be marked as going away. Ensure that |
1493 // while it is still alive, it is no longer active. | 1492 // while it is still alive, it is no longer active. |
1494 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1493 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1495 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1494 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
1496 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 1495 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
1497 | 1496 |
1498 // Verify that response headers on the migrated socket were delivered to the | 1497 // Verify that response headers on the migrated socket were delivered to the |
1499 // stream. | 1498 // stream. |
1500 EXPECT_THAT(stream->ReadResponseHeaders(callback_.callback()), IsOk()); | 1499 EXPECT_THAT(stream->ReadResponseHeaders(callback_.callback()), IsOk()); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1634 stream.reset(); | 1633 stream.reset(); |
1635 | 1634 |
1636 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1635 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1637 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1636 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1638 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | 1637 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); |
1639 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); | 1638 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); |
1640 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 1639 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
1641 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 1640 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
1642 } | 1641 } |
1643 | 1642 |
1644 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoNetworks) { | |
Ryan Hamilton
2016/08/19 20:05:02
Presumably there is a test further down in which w
Jana
2016/08/19 21:44:08
Yup -- "OnNetworkChangeDisconnectedNoNewNetwork"
| |
1645 NetworkChangeNotifier::NetworkList no_networks(0); | |
1646 InitializeConnectionMigrationTest(no_networks); | |
1647 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
1648 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
1649 | |
1650 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | |
1651 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | |
1652 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | |
1653 MockWrite writes[] = { | |
1654 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), | |
1655 }; | |
1656 SequencedSocketData socket_data(reads, arraysize(reads), writes, | |
1657 arraysize(writes)); | |
1658 socket_factory_.AddSocketDataProvider(&socket_data); | |
1659 | |
1660 // Create request and QuicHttpStream. | |
1661 QuicStreamRequest request(factory_.get()); | |
1662 EXPECT_EQ(ERR_IO_PENDING, | |
1663 request.Request(host_port_pair_, privacy_mode_, | |
1664 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
1665 callback_.callback())); | |
1666 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
1667 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | |
1668 EXPECT_TRUE(stream.get()); | |
1669 | |
1670 // Cause QUIC stream to be created. | |
1671 HttpRequestInfo request_info; | |
1672 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | |
1673 net_log_, CompletionCallback())); | |
1674 | |
1675 // Ensure that session is alive and active. | |
1676 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | |
1677 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
1678 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
1679 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
1680 | |
1681 // Trigger connection migration. Since there are no networks | |
1682 // to migrate to, this should cause the session to continue on the same | |
1683 // socket, but be marked as going away. | |
1684 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
1685 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | |
1686 | |
1687 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
1688 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
1689 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
1690 | |
1691 stream.reset(); | |
1692 | |
1693 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | |
1694 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | |
1695 } | |
1696 | |
1697 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNetworks) { | 1643 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNetworks) { |
1698 NetworkChangeNotifier::NetworkList no_networks(0); | 1644 NetworkChangeNotifier::NetworkList no_networks(0); |
1699 InitializeConnectionMigrationTest(no_networks); | 1645 InitializeConnectionMigrationTest(no_networks); |
1700 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1646 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
1701 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1647 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1702 | 1648 |
1703 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1649 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
1704 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 1650 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
1705 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 1651 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); |
1706 MockWrite writes[] = { | 1652 MockWrite writes[] = { |
(...skipping 29 matching lines...) Expand all Loading... | |
1736 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1682 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
1737 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 1683 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
1738 | 1684 |
1739 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1685 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1740 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1686 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
1741 | 1687 |
1742 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1688 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1743 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1689 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1744 } | 1690 } |
1745 | 1691 |
1746 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoNewNetwork) { | |
1747 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | |
1748 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
1749 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
1750 | |
1751 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | |
1752 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | |
1753 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | |
1754 MockWrite writes[] = { | |
1755 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), | |
1756 }; | |
1757 SequencedSocketData socket_data(reads, arraysize(reads), writes, | |
1758 arraysize(writes)); | |
1759 socket_factory_.AddSocketDataProvider(&socket_data); | |
1760 | |
1761 // Create request and QuicHttpStream. | |
1762 QuicStreamRequest request(factory_.get()); | |
1763 EXPECT_EQ(ERR_IO_PENDING, | |
1764 request.Request(host_port_pair_, privacy_mode_, | |
1765 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
1766 callback_.callback())); | |
1767 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
1768 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | |
1769 EXPECT_TRUE(stream.get()); | |
1770 | |
1771 // Cause QUIC stream to be created. | |
1772 HttpRequestInfo request_info; | |
1773 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | |
1774 net_log_, CompletionCallback())); | |
1775 | |
1776 // Ensure that session is alive and active. | |
1777 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | |
1778 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
1779 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
1780 | |
1781 // Trigger connection migration. Since there are no networks | |
1782 // to migrate to, this should cause session to be continue but be marked as | |
1783 // going away. | |
1784 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
1785 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | |
1786 | |
1787 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
1788 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
1789 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
1790 | |
1791 stream.reset(); | |
1792 | |
1793 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | |
1794 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | |
1795 } | |
1796 | |
1797 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNewNetwork) { | 1692 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNewNetwork) { |
1798 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | 1693 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); |
1799 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1694 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
1800 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1695 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1801 | 1696 |
1802 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1697 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
1803 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 1698 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
1804 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 1699 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); |
1805 MockWrite writes[] = { | 1700 MockWrite writes[] = { |
1806 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1), | 1701 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1), |
(...skipping 29 matching lines...) Expand all Loading... | |
1836 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 1731 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
1837 | 1732 |
1838 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1733 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1839 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1734 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
1840 | 1735 |
1841 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1736 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1842 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1737 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1843 } | 1738 } |
1844 | 1739 |
1845 TEST_P(QuicStreamFactoryTest, | 1740 TEST_P(QuicStreamFactoryTest, |
1846 OnNetworkChangeSoonToDisconnectNonMigratableStream) { | 1741 OnNetworkChangeNetworkMadeDefaultNonMigratableStream) { |
1847 InitializeConnectionMigrationTest( | 1742 InitializeConnectionMigrationTest( |
1848 {kDefaultNetworkForTests, kNewNetworkForTests}); | 1743 {kDefaultNetworkForTests, kNewNetworkForTests}); |
1849 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1744 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
1850 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1745 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1851 | 1746 |
1852 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1747 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
1853 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 1748 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
1854 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 1749 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); |
1855 MockWrite writes[] = { | 1750 MockWrite writes[] = { |
1856 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), | 1751 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), |
(...skipping 19 matching lines...) Expand all Loading... | |
1876 net_log_, CompletionCallback())); | 1771 net_log_, CompletionCallback())); |
1877 | 1772 |
1878 // Ensure that session is alive and active. | 1773 // Ensure that session is alive and active. |
1879 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 1774 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
1880 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1775 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1881 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 1776 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
1882 | 1777 |
1883 // Trigger connection migration. Since there is a non-migratable stream, | 1778 // Trigger connection migration. Since there is a non-migratable stream, |
1884 // this should cause session to continue but be marked as going away. | 1779 // this should cause session to continue but be marked as going away. |
1885 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1780 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
1886 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | 1781 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
1887 | 1782 |
1888 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1783 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1889 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1784 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
1890 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 1785 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
1891 | 1786 |
1892 stream.reset(); | 1787 stream.reset(); |
1893 | 1788 |
1894 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1789 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1895 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1790 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1896 } | 1791 } |
1897 | 1792 |
1898 TEST_P(QuicStreamFactoryTest, | 1793 TEST_P(QuicStreamFactoryTest, |
1899 OnNetworkChangeSoonToDisconnectConnectionMigrationDisabled) { | 1794 OnNetworkChangeNetworkMadeDefaultConnectionMigrationDisabled) { |
1900 InitializeConnectionMigrationTest( | 1795 InitializeConnectionMigrationTest( |
1901 {kDefaultNetworkForTests, kNewNetworkForTests}); | 1796 {kDefaultNetworkForTests, kNewNetworkForTests}); |
1902 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1797 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
1903 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1798 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1904 | 1799 |
1905 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1800 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
1906 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 1801 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
1907 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 1802 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); |
1908 MockWrite writes[] = { | 1803 MockWrite writes[] = { |
1909 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), | 1804 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), |
(...skipping 22 matching lines...) Expand all Loading... | |
1932 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1827 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1933 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 1828 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
1934 | 1829 |
1935 // Set session config to have connection migration disabled. | 1830 // Set session config to have connection migration disabled. |
1936 QuicConfigPeer::SetReceivedDisableConnectionMigration(session->config()); | 1831 QuicConfigPeer::SetReceivedDisableConnectionMigration(session->config()); |
1937 EXPECT_TRUE(session->config()->DisableConnectionMigration()); | 1832 EXPECT_TRUE(session->config()->DisableConnectionMigration()); |
1938 | 1833 |
1939 // Trigger connection migration. Since there is a non-migratable stream, | 1834 // Trigger connection migration. Since there is a non-migratable stream, |
1940 // this should cause session to continue but be marked as going away. | 1835 // this should cause session to continue but be marked as going away. |
1941 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1836 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
1942 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | 1837 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
1943 | 1838 |
1944 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1839 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
1945 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1840 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
1946 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 1841 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
1947 | 1842 |
1948 stream.reset(); | 1843 stream.reset(); |
1949 | 1844 |
1950 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1845 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1951 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1846 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1952 } | 1847 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2048 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1943 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2049 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 1944 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
2050 | 1945 |
2051 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1946 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2052 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1947 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
2053 | 1948 |
2054 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1949 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
2055 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1950 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
2056 } | 1951 } |
2057 | 1952 |
2058 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoOpenStreams) { | 1953 TEST_P(QuicStreamFactoryTest, OnNetworkChangeNetworkMadeDefaultNoOpenStreams) { |
2059 InitializeConnectionMigrationTest( | 1954 InitializeConnectionMigrationTest( |
2060 {kDefaultNetworkForTests, kNewNetworkForTests}); | 1955 {kDefaultNetworkForTests, kNewNetworkForTests}); |
2061 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1956 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
2062 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1957 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
2063 | 1958 |
2064 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 1959 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
2065 SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0u); | 1960 SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0u); |
2066 socket_factory_.AddSocketDataProvider(&socket_data); | 1961 socket_factory_.AddSocketDataProvider(&socket_data); |
2067 | 1962 |
2068 // Create request and QuicHttpStream. | 1963 // Create request and QuicHttpStream. |
2069 QuicStreamRequest request(factory_.get()); | 1964 QuicStreamRequest request(factory_.get()); |
2070 EXPECT_EQ(ERR_IO_PENDING, | 1965 EXPECT_EQ(ERR_IO_PENDING, |
2071 request.Request(host_port_pair_, privacy_mode_, | 1966 request.Request(host_port_pair_, privacy_mode_, |
2072 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 1967 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
2073 callback_.callback())); | 1968 callback_.callback())); |
2074 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1969 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
2075 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 1970 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
2076 EXPECT_TRUE(stream.get()); | 1971 EXPECT_TRUE(stream.get()); |
2077 | 1972 |
2078 // Ensure that session is alive and active. | 1973 // Ensure that session is alive and active. |
2079 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 1974 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
2080 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1975 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2081 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 1976 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
2082 | 1977 |
2083 // Trigger connection migration. Since there are no active streams, | 1978 // Trigger connection migration. Since there are no active streams, |
2084 // the session will be closed. | 1979 // the session will be closed. |
2085 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1980 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2086 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 1981 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
2087 | 1982 |
2088 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1983 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2089 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1984 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
2090 | 1985 |
2091 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1986 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
2092 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1987 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
2093 } | 1988 } |
2094 | 1989 |
2095 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoOpenStreams) { | 1990 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoOpenStreams) { |
2096 InitializeConnectionMigrationTest( | 1991 InitializeConnectionMigrationTest( |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2223 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 2118 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
2224 callback_.callback())); | 2119 callback_.callback())); |
2225 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 2120 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
2226 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); | 2121 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); |
2227 EXPECT_TRUE(stream2.get()); | 2122 EXPECT_TRUE(stream2.get()); |
2228 | 2123 |
2229 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 2124 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
2230 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); | 2125 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); |
2231 EXPECT_NE(session, new_session); | 2126 EXPECT_NE(session, new_session); |
2232 | 2127 |
2233 // On a SOON_TO_DISCONNECT notification, nothing happens to the | 2128 // On a NETWORK_MADE_DEFAULT notification, nothing happens to the |
2234 // migrated session, but the new session is closed since it has no | 2129 // migrated session, but the new session is closed since it has no |
2235 // open streams. | 2130 // open streams. |
2236 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 2131 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2237 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | 2132 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
2238 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2133 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2239 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 2134 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
2240 EXPECT_FALSE( | 2135 EXPECT_FALSE( |
2241 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); | 2136 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); |
2242 | 2137 |
2243 // On a DISCONNECTED notification, nothing happens to the migrated session. | 2138 // On a DISCONNECTED notification, nothing happens to the migrated session. |
2244 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 2139 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2245 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 2140 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
2246 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2141 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2247 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 2142 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2355 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 2250 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
2356 callback_.callback())); | 2251 callback_.callback())); |
2357 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 2252 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
2358 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); | 2253 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); |
2359 EXPECT_TRUE(stream2.get()); | 2254 EXPECT_TRUE(stream2.get()); |
2360 | 2255 |
2361 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 2256 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
2362 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); | 2257 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); |
2363 EXPECT_NE(session, new_session); | 2258 EXPECT_NE(session, new_session); |
2364 | 2259 |
2365 // On a SOON_TO_DISCONNECT notification, nothing happens to the | 2260 // On a NETWORK_MADE_DEFAULT notification, nothing happens to the |
2366 // migrated session, but the new session is closed since it has no | 2261 // migrated session, but the new session is closed since it has no |
2367 // open streams. | 2262 // open streams. |
2368 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 2263 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2369 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); | 2264 ->NotifyNetworkMadeDefault(kNewNetworkForTests); |
2370 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2265 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2371 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 2266 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
2372 EXPECT_FALSE( | 2267 EXPECT_FALSE( |
2373 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); | 2268 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); |
2374 | 2269 |
2375 // On a DISCONNECTED notification, nothing happens to the migrated session. | 2270 // On a DISCONNECTED notification, nothing happens to the migrated session. |
2376 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 2271 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
2377 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 2272 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
2378 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2273 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
2379 EXPECT_EQ(1u, session->GetNumActiveStreams()); | 2274 EXPECT_EQ(1u, session->GetNumActiveStreams()); |
(...skipping 2737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5117 // Clear all cached states. | 5012 // Clear all cached states. |
5118 factory_->ClearCachedStatesInCryptoConfig( | 5013 factory_->ClearCachedStatesInCryptoConfig( |
5119 base::Callback<bool(const GURL&)>()); | 5014 base::Callback<bool(const GURL&)>()); |
5120 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5015 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
5121 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5016 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
5122 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5017 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
5123 } | 5018 } |
5124 | 5019 |
5125 } // namespace test | 5020 } // namespace test |
5126 } // namespace net | 5021 } // namespace net |
OLD | NEW |