Chromium Code Reviews| 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 |