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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 500 << " " << actual_address.port(); | 500 << " " << actual_address.port(); |
| 501 DVLOG(1) << "Expected address: " << expected_address.address().ToString() | 501 DVLOG(1) << "Expected address: " << expected_address.address().ToString() |
| 502 << " " << expected_address.port(); | 502 << " " << expected_address.port(); |
| 503 | 503 |
| 504 stream.reset(); | 504 stream.reset(); |
| 505 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | 505 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); |
| 506 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 506 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
| 507 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 507 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
| 508 } | 508 } |
| 509 | 509 |
| 510 void RunTestLoopUntilIdle() { | |
| 511 while (runner_->GetPostedTasks().size() > 0) | |
| 512 runner_->RunNextTask(); | |
| 513 } | |
| 514 | |
| 510 // Helper methods for tests of connection migration on write error. | 515 // Helper methods for tests of connection migration on write error. |
| 511 void TestMigrationOnWriteErrorNonMigratableStream(IoMode write_error_mode); | 516 void TestMigrationOnWriteErrorNonMigratableStream(IoMode write_error_mode); |
| 512 void TestMigrationOnWriteErrorMigrationDisabled(IoMode write_error_mode); | 517 void TestMigrationOnWriteErrorMigrationDisabled(IoMode write_error_mode); |
| 513 void TestMigrationOnWriteError(IoMode write_error_mode); | 518 void TestMigrationOnWriteError(IoMode write_error_mode); |
| 514 void TestMigrationOnWriteErrorNoNewNetwork(IoMode write_error_mode); | 519 void TestMigrationOnWriteErrorNoNewNetwork(IoMode write_error_mode); |
| 515 void TestMigrationOnMultipleWriteErrors(IoMode first_write_error_mode, | 520 void TestMigrationOnMultipleWriteErrors(IoMode first_write_error_mode, |
| 516 IoMode second_write_error_mode); | 521 IoMode second_write_error_mode); |
| 517 void TestMigrationOnWriteErrorWithNotificationQueued(bool disconnected); | 522 void TestMigrationOnWriteErrorWithNotificationQueued(bool disconnected); |
| 518 void TestMigrationOnNotificationWithWriteErrorQueued(bool disconnected); | 523 void TestMigrationOnNotificationWithWriteErrorQueued(bool disconnected); |
| 519 void OnNetworkDisconnected(bool async_write_before); | 524 void OnNetworkDisconnected(bool async_write_before); |
| 520 void OnNetworkMadeDefault(bool async_write_before); | 525 void OnNetworkMadeDefault(bool async_write_before); |
| 526 void MigrateSessionOnWriteErrorPauseBeforeConnected(IoMode write_error_mode); | |
| 527 void OnNetworkDisconnectedWithNetworkList( | |
| 528 NetworkChangeNotifier::NetworkList network_list); | |
| 521 | 529 |
| 522 MockHostResolver host_resolver_; | 530 MockHostResolver host_resolver_; |
| 523 scoped_refptr<SSLConfigService> ssl_config_service_; | 531 scoped_refptr<SSLConfigService> ssl_config_service_; |
| 524 MockClientSocketFactory socket_factory_; | 532 MockClientSocketFactory socket_factory_; |
| 525 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 533 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 526 MockRandom random_generator_; | 534 MockRandom random_generator_; |
| 527 MockClock* clock_; // Owned by |factory_| once created. | 535 MockClock* clock_; // Owned by |factory_| once created. |
| 528 scoped_refptr<TestTaskRunner> runner_; | 536 scoped_refptr<TestTaskRunner> runner_; |
| 529 QuicVersion version_; | 537 QuicVersion version_; |
| 530 QuicTestPacketMaker client_maker_; | 538 QuicTestPacketMaker client_maker_; |
| (...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1704 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1712 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 1705 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1713 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 1706 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | 1714 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); |
| 1707 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); | 1715 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); |
| 1708 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 1716 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
| 1709 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 1717 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
| 1710 } | 1718 } |
| 1711 | 1719 |
| 1712 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNetworks) { | 1720 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNetworks) { |
| 1713 NetworkChangeNotifier::NetworkList no_networks(0); | 1721 NetworkChangeNotifier::NetworkList no_networks(0); |
| 1714 InitializeConnectionMigrationTest(no_networks); | 1722 OnNetworkDisconnectedWithNetworkList(no_networks); |
| 1723 } | |
| 1724 | |
| 1725 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNewNetwork) { | |
| 1726 OnNetworkDisconnectedWithNetworkList({kDefaultNetworkForTests}); | |
| 1727 } | |
| 1728 | |
| 1729 void QuicStreamFactoryTestBase::OnNetworkDisconnectedWithNetworkList( | |
| 1730 NetworkChangeNotifier::NetworkList network_list) { | |
| 1731 InitializeConnectionMigrationTest(network_list); | |
| 1715 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1732 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 1716 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1733 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 1717 | 1734 |
| 1735 // Use the test task runner, to force the migration alarm timeout later. | |
| 1736 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); | |
| 1737 | |
| 1718 MockQuicData socket_data; | 1738 MockQuicData socket_data; |
| 1719 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 1739 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 1720 socket_data.AddWrite(client_maker_.MakeRstPacket( | |
| 1721 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | |
| 1722 socket_data.AddSocketDataToFactory(&socket_factory_); | 1740 socket_data.AddSocketDataToFactory(&socket_factory_); |
| 1723 | 1741 |
| 1724 // Create request and QuicHttpStream. | 1742 // Create request and QuicHttpStream. |
| 1725 QuicStreamRequest request(factory_.get()); | |
| 1726 EXPECT_EQ(ERR_IO_PENDING, | |
| 1727 request.Request(host_port_pair_, privacy_mode_, | |
| 1728 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
| 1729 callback_.callback())); | |
| 1730 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 1731 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | |
| 1732 EXPECT_TRUE(stream.get()); | |
| 1733 | |
| 1734 // Cause QUIC stream to be created. | |
| 1735 HttpRequestInfo request_info; | |
| 1736 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | |
| 1737 net_log_, CompletionCallback())); | |
| 1738 | |
| 1739 // Ensure that session is alive and active. | |
| 1740 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | |
| 1741 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 1742 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 1743 | |
| 1744 // Trigger connection migration. Since there are no networks | |
| 1745 // to migrate to, this should cause a RST_STREAM frame to be emitted | |
| 1746 // and the session to be closed. | |
| 1747 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 1748 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | |
| 1749 | |
| 1750 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 1751 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
| 1752 | |
| 1753 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | |
| 1754 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | |
| 1755 } | |
| 1756 | |
| 1757 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNewNetwork) { | |
| 1758 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | |
| 1759 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
| 1760 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 1761 | |
| 1762 MockQuicData socket_data; | |
| 1763 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 1764 socket_data.AddWrite(client_maker_.MakeRstPacket( | |
| 1765 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | |
| 1766 socket_data.AddSocketDataToFactory(&socket_factory_); | |
| 1767 | |
| 1768 // Create request and QuicHttpStream. | |
| 1769 QuicStreamRequest request(factory_.get()); | 1743 QuicStreamRequest request(factory_.get()); |
| 1770 EXPECT_EQ(ERR_IO_PENDING, | 1744 EXPECT_EQ(ERR_IO_PENDING, |
| 1771 request.Request(host_port_pair_, privacy_mode_, | 1745 request.Request(host_port_pair_, privacy_mode_, |
| 1772 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 1746 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 1773 callback_.callback())); | 1747 callback_.callback())); |
| 1774 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1748 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1775 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 1749 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
| 1776 EXPECT_TRUE(stream.get()); | 1750 EXPECT_TRUE(stream.get()); |
| 1777 | 1751 |
| 1778 // Cause QUIC stream to be created. | 1752 // Cause QUIC stream to be created. |
| 1779 HttpRequestInfo request_info; | 1753 HttpRequestInfo request_info; |
| 1780 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | 1754 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, |
| 1781 net_log_, CompletionCallback())); | 1755 net_log_, CompletionCallback())); |
| 1782 | 1756 |
| 1783 // Ensure that session is alive and active. | 1757 // Ensure that session is alive and active. |
| 1784 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 1758 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
| 1785 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1759 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 1786 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 1760 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
| 1787 | 1761 |
| 1788 // Trigger connection migration. Since there are no networks | 1762 // Trigger connection migration. Since there are no networks |
| 1789 // to migrate to, this should cause a RST_STREAM frame to be emitted | 1763 // to migrate to, this should cause the session to wait for a new network. |
| 1790 // with QUIC_RST_ACKNOWLEDGEMENT error code, and the session will be closed. | |
| 1791 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 1764 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
| 1792 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 1765 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
| 1793 | 1766 |
| 1767 // The migration will not fail until the migration alarm timeout. | |
| 1768 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 1769 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
| 1770 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 1771 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback())); | |
| 1772 EXPECT_EQ(true, session->connection()->writer()->IsWriteBlocked()); | |
| 1773 | |
| 1774 // Force the migration alarm timeout to run. | |
| 1775 RunTestLoopUntilIdle(); | |
| 1776 | |
| 1777 // The connection should now be closed. A request for response | |
| 1778 // headers should fail. | |
| 1794 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 1779 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 1795 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 1780 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
| 1781 EXPECT_EQ(ERR_NETWORK_CHANGED, callback_.WaitForResult()); | |
| 1796 | 1782 |
| 1797 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1783 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 1798 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1784 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 1799 } | 1785 } |
| 1800 | 1786 |
| 1801 TEST_P(QuicStreamFactoryTest, OnNetworkMadeDefaultNonMigratableStream) { | 1787 TEST_P(QuicStreamFactoryTest, OnNetworkMadeDefaultNonMigratableStream) { |
| 1802 InitializeConnectionMigrationTest( | 1788 InitializeConnectionMigrationTest( |
| 1803 {kDefaultNetworkForTests, kNewNetworkForTests}); | 1789 {kDefaultNetworkForTests, kNewNetworkForTests}); |
| 1804 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 1790 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 1805 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1791 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2060 scoped_mock_network_change_notifier_->mock_network_change_notifier() | 2046 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
| 2061 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | 2047 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
| 2062 | 2048 |
| 2063 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2049 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 2064 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 2050 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
| 2065 | 2051 |
| 2066 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 2052 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 2067 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 2053 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 2068 } | 2054 } |
| 2069 | 2055 |
| 2056 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedPauseBeforeConnected) { | |
| 2057 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | |
| 2058 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
| 2059 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 2060 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 2061 | |
| 2062 // Use the test task runner, to force the migration alarm timeout later. | |
| 2063 // QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); | |
| 2064 | |
| 2065 MockQuicData socket_data; | |
| 2066 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 2067 socket_data.AddWrite( | |
| 2068 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true)); | |
| 2069 socket_data.AddSocketDataToFactory(&socket_factory_); | |
| 2070 | |
| 2071 // Create request and QuicHttpStream. | |
| 2072 QuicStreamRequest request(factory_.get()); | |
| 2073 EXPECT_EQ(ERR_IO_PENDING, | |
| 2074 request.Request(host_port_pair_, privacy_mode_, | |
| 2075 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
| 2076 callback_.callback())); | |
| 2077 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 2078 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | |
| 2079 EXPECT_TRUE(stream.get()); | |
| 2080 | |
| 2081 // Cause QUIC stream to be created. | |
| 2082 HttpRequestInfo request_info; | |
| 2083 request_info.method = "GET"; | |
| 2084 request_info.url = url_; | |
| 2085 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | |
| 2086 net_log_, CompletionCallback())); | |
| 2087 | |
| 2088 // Ensure that session is alive and active. | |
| 2089 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | |
| 2090 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2091 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 2092 | |
| 2093 // Send GET request on stream. | |
| 2094 HttpResponseInfo response; | |
| 2095 HttpRequestHeaders request_headers; | |
| 2096 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response, | |
| 2097 callback_.callback())); | |
| 2098 | |
| 2099 // Trigger connection migration. Since there are no networks | |
| 2100 // to migrate to, this should cause the session to wait for a new network. | |
| 2101 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 2102 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | |
| 2103 | |
| 2104 // The connection should still be alive, but marked as going away. | |
| 2105 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2106 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
| 2107 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 2108 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback())); | |
| 2109 | |
| 2110 // Set up second socket data provider that is used after migration. | |
| 2111 // The response to the earlier request is read on this new socket. | |
| 2112 MockQuicData socket_data1; | |
| 2113 socket_data1.AddWrite( | |
| 2114 client_maker_.MakePingPacket(2, /*include_version=*/true)); | |
| 2115 socket_data1.AddRead( | |
| 2116 ConstructOkResponsePacket(1, kClientDataStreamId1, false, false)); | |
| 2117 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 2118 socket_data1.AddWrite(client_maker_.MakeAckAndRstPacket( | |
| 2119 3, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1, true)); | |
| 2120 socket_data1.AddSocketDataToFactory(&socket_factory_); | |
| 2121 | |
| 2122 // Add a new network and notify the stream factory of a new connected network. | |
| 2123 // This causes a PING packet to be sent over the new network. | |
| 2124 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 2125 ->SetConnectedNetworksList({kNewNetworkForTests}); | |
| 2126 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 2127 ->NotifyNetworkConnected(kNewNetworkForTests); | |
| 2128 | |
| 2129 // Ensure that the session is still alive. | |
| 2130 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2131 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
| 2132 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 2133 | |
| 2134 // Run the message loop so that data queued in the new socket is read by the | |
| 2135 // packet reader. | |
| 2136 base::RunLoop().RunUntilIdle(); | |
| 2137 | |
| 2138 // Response headers are received over the new network. | |
| 2139 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 2140 EXPECT_EQ(200, response.headers->response_code()); | |
| 2141 | |
| 2142 // Create a new request and verify that a new session is created. | |
| 2143 MockQuicData socket_data2; | |
| 2144 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 2145 socket_data2.AddSocketDataToFactory(&socket_factory_); | |
| 2146 QuicStreamRequest request2(factory_.get()); | |
| 2147 EXPECT_EQ(ERR_IO_PENDING, | |
| 2148 request2.Request(host_port_pair_, privacy_mode_, | |
| 2149 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
| 2150 callback_.callback())); | |
| 2151 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 2152 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); | |
| 2153 EXPECT_TRUE(stream2.get()); | |
| 2154 | |
| 2155 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 2156 EXPECT_NE(session, GetActiveSession(host_port_pair_)); | |
| 2157 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2158 | |
| 2159 stream.reset(); | |
| 2160 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | |
| 2161 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | |
| 2162 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | |
| 2163 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); | |
| 2164 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | |
| 2165 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | |
| 2166 } | |
| 2167 | |
| 2168 // @@@ add a test to (i) cause write error with no new network, | |
| 2169 // causing pause, (ii) new network gets added, but no new network | |
| 2170 // notification, (iii) onnetworkdisconected issued, causing migration | |
| 2171 // to finish, (iv) onnetworkconnected issued, which is a nop. | |
| 2172 | |
| 2070 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) { | 2173 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) { |
| 2071 InitializeConnectionMigrationTest( | 2174 InitializeConnectionMigrationTest( |
| 2072 {kDefaultNetworkForTests, kNewNetworkForTests}); | 2175 {kDefaultNetworkForTests, kNewNetworkForTests}); |
| 2073 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 2176 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 2074 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 2177 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 2075 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 2178 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 2076 | 2179 |
| 2077 MockQuicData socket_data; | 2180 MockQuicData socket_data; |
| 2078 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 2181 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 2079 socket_data.AddWrite( | 2182 socket_data.AddWrite( |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2545 TEST_P(QuicStreamFactoryTest, MigrateSessionOnWriteErrorAsync) { | 2648 TEST_P(QuicStreamFactoryTest, MigrateSessionOnWriteErrorAsync) { |
| 2546 TestMigrationOnWriteError(ASYNC); | 2649 TestMigrationOnWriteError(ASYNC); |
| 2547 } | 2650 } |
| 2548 | 2651 |
| 2549 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNoNewNetwork( | 2652 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNoNewNetwork( |
| 2550 IoMode write_error_mode) { | 2653 IoMode write_error_mode) { |
| 2551 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | 2654 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); |
| 2552 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 2655 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 2553 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 2656 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 2554 | 2657 |
| 2658 // Use the test task runner, to force the migration alarm timeout later. | |
| 2659 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); | |
| 2660 | |
| 2555 MockQuicData socket_data; | 2661 MockQuicData socket_data; |
| 2556 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 2662 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 2557 socket_data.AddWrite(write_error_mode, ERR_ADDRESS_UNREACHABLE); | 2663 socket_data.AddWrite(write_error_mode, ERR_ADDRESS_UNREACHABLE); |
| 2558 socket_data.AddSocketDataToFactory(&socket_factory_); | 2664 socket_data.AddSocketDataToFactory(&socket_factory_); |
| 2559 | 2665 |
| 2560 // Create request and QuicHttpStream. | 2666 // Create request and QuicHttpStream. |
| 2561 QuicStreamRequest request(factory_.get()); | 2667 QuicStreamRequest request(factory_.get()); |
| 2562 EXPECT_EQ(ERR_IO_PENDING, | 2668 EXPECT_EQ(ERR_IO_PENDING, |
| 2563 request.Request(host_port_pair_, privacy_mode_, | 2669 request.Request(host_port_pair_, privacy_mode_, |
| 2564 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 2670 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 2565 callback_.callback())); | 2671 callback_.callback())); |
| 2566 EXPECT_EQ(OK, callback_.WaitForResult()); | 2672 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 2567 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 2673 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
| 2568 EXPECT_TRUE(stream.get()); | 2674 EXPECT_TRUE(stream.get()); |
| 2569 | 2675 |
| 2570 // Cause QUIC stream to be created. | 2676 // Cause QUIC stream to be created. |
| 2571 HttpRequestInfo request_info; | 2677 HttpRequestInfo request_info; |
| 2572 request_info.method = "GET"; | 2678 request_info.method = "GET"; |
| 2573 request_info.url = GURL("https://www.example.org/"); | 2679 request_info.url = GURL("https://www.example.org/"); |
| 2574 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | 2680 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, |
| 2575 net_log_, CompletionCallback())); | 2681 net_log_, CompletionCallback())); |
| 2576 | 2682 |
| 2577 // Ensure that session is alive and active. | 2683 // Ensure that session is alive and active. |
| 2578 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 2684 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
| 2579 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2685 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 2580 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 2686 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
| 2581 | 2687 |
| 2582 // Send GET request on stream. This should cause a write error, which triggers | 2688 // Send GET request on stream. This causes a write error, which triggers |
| 2583 // a connection migration attempt. | 2689 // a connection migration attempt. Since there are no networks |
| 2690 // to migrate to, this causes the session to wait for a new network. | |
| 2584 HttpResponseInfo response; | 2691 HttpResponseInfo response; |
| 2585 HttpRequestHeaders request_headers; | 2692 HttpRequestHeaders request_headers; |
| 2586 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response, | 2693 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response, |
| 2587 callback_.callback())); | 2694 callback_.callback())); |
| 2588 // Run message loop to execute migration attempt. | 2695 |
| 2589 base::RunLoop().RunUntilIdle(); | 2696 // Complete any pending writes. |
| 2590 // Migration fails, and session is closed and deleted. | 2697 if (write_error_mode == ASYNC) |
| 2698 runner_->RunNextTask(); | |
| 2699 | |
| 2700 // Migration has not yet failed. The session should be alive and active. | |
| 2701 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2702 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 2703 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 2704 EXPECT_TRUE(session->connection()->writer()->IsWriteBlocked()); | |
| 2705 | |
| 2706 // The migration will not fail until the migration alarm timeout. | |
| 2707 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 2708 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 2709 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 2710 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback())); | |
| 2711 | |
| 2712 // Force migration alarm timeout to run. | |
| 2713 RunTestLoopUntilIdle(); | |
| 2714 | |
| 2715 // The connection should be closed. A request for response headers | |
| 2716 // should fail. | |
| 2591 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 2717 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 2592 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | 2718 EXPECT_FALSE(HasActiveSession(host_port_pair_)); |
| 2719 EXPECT_EQ(ERR_NETWORK_CHANGED, callback_.WaitForResult()); | |
| 2720 EXPECT_EQ(ERR_NETWORK_CHANGED, | |
| 2721 stream->ReadResponseHeaders(callback_.callback())); | |
| 2593 | 2722 |
| 2594 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 2723 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 2595 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 2724 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 2596 } | 2725 } |
| 2597 | 2726 |
| 2598 TEST_P(QuicStreamFactoryTest, | 2727 TEST_P(QuicStreamFactoryTest, |
| 2599 MigrateSessionOnWriteErrorNoNewNetworkSynchronous) { | 2728 MigrateSessionOnWriteErrorNoNewNetworkSynchronous) { |
| 2600 TestMigrationOnWriteErrorNoNewNetwork(SYNCHRONOUS); | 2729 TestMigrationOnWriteErrorNoNewNetwork(SYNCHRONOUS); |
| 2601 } | 2730 } |
| 2602 | 2731 |
| 2603 TEST_P(QuicStreamFactoryTest, MigrateSessionOnWriteErrorNoNewNetworkAsync) { | 2732 TEST_P(QuicStreamFactoryTest, |
| 2733 DISABLED_MigrateSessionOnWriteErrorNoNewNetworkAsync) { | |
|
Ryan Hamilton
2016/09/13 00:33:18
Let's get this test working.
Jana
2016/09/13 01:12:19
Done.
| |
| 2604 TestMigrationOnWriteErrorNoNewNetwork(ASYNC); | 2734 TestMigrationOnWriteErrorNoNewNetwork(ASYNC); |
| 2605 } | 2735 } |
| 2606 | 2736 |
| 2607 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNonMigratableStream( | 2737 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNonMigratableStream( |
| 2608 IoMode write_error_mode) { | 2738 IoMode write_error_mode) { |
| 2609 DVLOG(1) << "Mode: " | 2739 DVLOG(1) << "Mode: " |
| 2610 << ((write_error_mode == SYNCHRONOUS) ? "SYNCHRONOUS" : "ASYNC"); | 2740 << ((write_error_mode == SYNCHRONOUS) ? "SYNCHRONOUS" : "ASYNC"); |
| 2611 InitializeConnectionMigrationTest( | 2741 InitializeConnectionMigrationTest( |
| 2612 {kDefaultNetworkForTests, kNewNetworkForTests}); | 2742 {kDefaultNetworkForTests, kNewNetworkForTests}); |
| 2613 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 2743 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3004 TEST_P(QuicStreamFactoryTest, | 3134 TEST_P(QuicStreamFactoryTest, |
| 3005 MigrateSessionOnNetworkDisconnectedWithWriteErrorQueued) { | 3135 MigrateSessionOnNetworkDisconnectedWithWriteErrorQueued) { |
| 3006 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); | 3136 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); |
| 3007 } | 3137 } |
| 3008 | 3138 |
| 3009 TEST_P(QuicStreamFactoryTest, | 3139 TEST_P(QuicStreamFactoryTest, |
| 3010 MigrateSessionOnNetworkMadeDefaultWithWriteErrorQueued) { | 3140 MigrateSessionOnNetworkMadeDefaultWithWriteErrorQueued) { |
| 3011 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); | 3141 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); |
| 3012 } | 3142 } |
| 3013 | 3143 |
| 3144 void QuicStreamFactoryTestBase::MigrateSessionOnWriteErrorPauseBeforeConnected( | |
| 3145 IoMode write_error_mode) { | |
| 3146 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); | |
| 3147 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | |
| 3148 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 3149 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 3150 | |
| 3151 MockQuicData socket_data; | |
| 3152 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 3153 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); | |
| 3154 socket_data.AddSocketDataToFactory(&socket_factory_); | |
| 3155 | |
| 3156 // Create request and QuicHttpStream. | |
| 3157 QuicStreamRequest request(factory_.get()); | |
| 3158 EXPECT_EQ(ERR_IO_PENDING, | |
| 3159 request.Request(host_port_pair_, privacy_mode_, | |
| 3160 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
| 3161 callback_.callback())); | |
| 3162 EXPECT_EQ(OK, callback_.WaitForResult()); | |
| 3163 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | |
| 3164 EXPECT_TRUE(stream.get()); | |
| 3165 | |
| 3166 // Cause QUIC stream to be created. | |
| 3167 HttpRequestInfo request_info; | |
| 3168 request_info.method = "GET"; | |
| 3169 request_info.url = GURL("https://www.example.org/"); | |
| 3170 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | |
| 3171 net_log_, CompletionCallback())); | |
| 3172 | |
| 3173 // Ensure that session is alive and active. | |
| 3174 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | |
| 3175 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 3176 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 3177 | |
| 3178 // Send GET request on stream. This should cause a write error, which triggers | |
| 3179 // a connection migration attempt. | |
| 3180 HttpResponseInfo response; | |
| 3181 HttpRequestHeaders request_headers; | |
| 3182 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response, | |
| 3183 callback_.callback())); | |
| 3184 | |
| 3185 // Run the message loop so that data queued in the new socket is read by the | |
| 3186 // packet reader. | |
| 3187 base::RunLoop().RunUntilIdle(); | |
| 3188 | |
| 3189 // In this particular code path, the network will not yet be marked | |
| 3190 // as going away and the session will still be alive. | |
| 3191 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 3192 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 3193 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 3194 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback())); | |
| 3195 | |
| 3196 // On a DISCONNECTED notification, nothing happens. | |
| 3197 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 3198 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); | |
| 3199 | |
| 3200 // Set up second socket data provider that is used after | |
| 3201 // migration. The request is rewritten to this new socket, and the | |
| 3202 // response to the request is read on this new socket. | |
| 3203 MockQuicData socket_data1; | |
| 3204 socket_data1.AddWrite( | |
| 3205 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true)); | |
| 3206 socket_data1.AddRead( | |
| 3207 ConstructOkResponsePacket(1, kClientDataStreamId1, false, false)); | |
| 3208 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 3209 socket_data1.AddWrite(client_maker_.MakeAckAndRstPacket( | |
| 3210 2, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1, true)); | |
| 3211 socket_data1.AddSocketDataToFactory(&socket_factory_); | |
| 3212 | |
| 3213 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 3214 ->SetConnectedNetworksList({kNewNetworkForTests}); | |
| 3215 scoped_mock_network_change_notifier_->mock_network_change_notifier() | |
| 3216 ->NotifyNetworkConnected(kNewNetworkForTests); | |
| 3217 | |
| 3218 // The session should now be marked as going away. Ensure that | |
| 3219 // while it is still alive, it is no longer active. | |
| 3220 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | |
| 3221 EXPECT_FALSE(HasActiveSession(host_port_pair_)); | |
| 3222 EXPECT_EQ(1u, session->GetNumActiveStreams()); | |
| 3223 | |
| 3224 // This is the callback for the response headers that returned | |
| 3225 // pending previously, because no result was available. Check that | |
| 3226 // the result is now available due to the successful migration. | |
| 3227 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 3228 EXPECT_EQ(200, response.headers->response_code()); | |
| 3229 | |
| 3230 // Create a new request for the same destination and verify that a | |
| 3231 // new session is created. | |
| 3232 MockQuicData socket_data2; | |
| 3233 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | |
| 3234 socket_data2.AddSocketDataToFactory(&socket_factory_); | |
| 3235 | |
| 3236 QuicStreamRequest request2(factory_.get()); | |
| 3237 EXPECT_EQ(ERR_IO_PENDING, | |
| 3238 request2.Request(host_port_pair_, privacy_mode_, | |
| 3239 /*cert_verify_flags=*/0, url_, "GET", net_log_, | |
| 3240 callback_.callback())); | |
| 3241 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 3242 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); | |
| 3243 EXPECT_TRUE(stream2.get()); | |
| 3244 | |
| 3245 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | |
| 3246 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); | |
| 3247 EXPECT_NE(session, new_session); | |
| 3248 | |
| 3249 stream.reset(); | |
| 3250 stream2.reset(); | |
| 3251 | |
| 3252 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | |
| 3253 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | |
| 3254 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | |
| 3255 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); | |
| 3256 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | |
| 3257 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | |
| 3258 } | |
| 3259 | |
| 3260 TEST_P(QuicStreamFactoryTest, | |
| 3261 MigrateSessionOnWriteErrorPauseBeforeConnectedSync) { | |
| 3262 MigrateSessionOnWriteErrorPauseBeforeConnected(SYNCHRONOUS); | |
| 3263 } | |
| 3264 | |
| 3265 TEST_P(QuicStreamFactoryTest, | |
| 3266 MigrateSessionOnWriteErrorPauseBeforeConnectedAsync) { | |
| 3267 MigrateSessionOnWriteErrorPauseBeforeConnected(ASYNC); | |
| 3268 } | |
| 3269 | |
| 3014 TEST_P(QuicStreamFactoryTest, MigrateSessionEarlyToBadSocket) { | 3270 TEST_P(QuicStreamFactoryTest, MigrateSessionEarlyToBadSocket) { |
| 3015 // This simulates the case where we attempt to migrate to a new | 3271 // This simulates the case where we attempt to migrate to a new |
| 3016 // socket but the socket is unusable, such as an ipv4/ipv6 mismatch. | 3272 // socket but the socket is unusable, such as an ipv4/ipv6 mismatch. |
| 3017 InitializeConnectionMigrationTest( | 3273 InitializeConnectionMigrationTest( |
| 3018 {kDefaultNetworkForTests, kNewNetworkForTests}); | 3274 {kDefaultNetworkForTests, kNewNetworkForTests}); |
| 3019 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 3275 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 3020 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 3276 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 3021 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 3277 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 3022 | 3278 |
| 3023 MockQuicData socket_data; | 3279 MockQuicData socket_data; |
| (...skipping 2485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5509 // Clear all cached states. | 5765 // Clear all cached states. |
| 5510 factory_->ClearCachedStatesInCryptoConfig( | 5766 factory_->ClearCachedStatesInCryptoConfig( |
| 5511 base::Callback<bool(const GURL&)>()); | 5767 base::Callback<bool(const GURL&)>()); |
| 5512 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5768 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
| 5513 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5769 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
| 5514 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5770 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
| 5515 } | 5771 } |
| 5516 | 5772 |
| 5517 } // namespace test | 5773 } // namespace test |
| 5518 } // namespace net | 5774 } // namespace net |
| OLD | NEW |