| 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 <memory> | 7 #include <memory> |
| 8 #include <ostream> | 8 #include <ostream> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 params.push_back(PoolingTestParams{version, SAME_AS_SECOND}); | 150 params.push_back(PoolingTestParams{version, SAME_AS_SECOND}); |
| 151 params.push_back(PoolingTestParams{version, DIFFERENT}); | 151 params.push_back(PoolingTestParams{version, DIFFERENT}); |
| 152 } | 152 } |
| 153 return params; | 153 return params; |
| 154 } | 154 } |
| 155 | 155 |
| 156 } // namespace | 156 } // namespace |
| 157 | 157 |
| 158 class QuicHttpStreamPeer { | 158 class QuicHttpStreamPeer { |
| 159 public: | 159 public: |
| 160 static QuicChromiumClientSession* GetSession(HttpStream* stream) { | 160 static QuicChromiumClientSession::Handle* GetSessionHandle( |
| 161 return static_cast<QuicHttpStream*>(stream)->session_.get(); | 161 HttpStream* stream) { |
| 162 return static_cast<QuicHttpStream*>(stream)->quic_session(); |
| 162 } | 163 } |
| 163 }; | 164 }; |
| 164 | 165 |
| 165 class QuicStreamFactoryTestBase { | 166 class QuicStreamFactoryTestBase { |
| 166 protected: | 167 protected: |
| 167 explicit QuicStreamFactoryTestBase(QuicVersion version) | 168 explicit QuicStreamFactoryTestBase(QuicVersion version) |
| 168 : ssl_config_service_(new MockSSLConfigService), | 169 : ssl_config_service_(new MockSSLConfigService), |
| 169 random_generator_(0), | 170 random_generator_(0), |
| 170 runner_(new TestTaskRunner(&clock_)), | 171 runner_(new TestTaskRunner(&clock_)), |
| 171 version_(version), | 172 version_(version), |
| (...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 | 768 |
| 768 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 769 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 769 std::unique_ptr<HttpStream> stream = request.CreateStream(); | 770 std::unique_ptr<HttpStream> stream = request.CreateStream(); |
| 770 EXPECT_TRUE(stream.get()); | 771 EXPECT_TRUE(stream.get()); |
| 771 | 772 |
| 772 QuicStreamRequest request2(factory_.get(), &http_server_properties_); | 773 QuicStreamRequest request2(factory_.get(), &http_server_properties_); |
| 773 EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_, | 774 EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_, |
| 774 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 775 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 775 callback_.callback())); | 776 callback_.callback())); |
| 776 // Will reset stream 3. | 777 // Will reset stream 3. |
| 777 stream = request.CreateStream(); | 778 stream = request2.CreateStream(); |
| 778 | 779 |
| 779 EXPECT_TRUE(stream.get()); | 780 EXPECT_TRUE(stream.get()); |
| 780 | 781 |
| 781 // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result | 782 // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result |
| 782 // in streams on different sessions. | 783 // in streams on different sessions. |
| 783 QuicStreamRequest request3(factory_.get(), &http_server_properties_); | 784 QuicStreamRequest request3(factory_.get(), &http_server_properties_); |
| 784 EXPECT_EQ(OK, request3.Request(host_port_pair_, privacy_mode_, | 785 EXPECT_EQ(OK, request3.Request(host_port_pair_, privacy_mode_, |
| 785 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 786 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 786 callback_.callback())); | 787 callback_.callback())); |
| 787 stream = request3.CreateStream(); // Will reset stream 5. | 788 stream = request3.CreateStream(); // Will reset stream 5. |
| (...skipping 3881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4669 | 4670 |
| 4670 // Second request returns synchronously because it pools to existing session. | 4671 // Second request returns synchronously because it pools to existing session. |
| 4671 TestCompletionCallback callback2; | 4672 TestCompletionCallback callback2; |
| 4672 QuicStreamRequest request2(factory_.get(), &http_server_properties_); | 4673 QuicStreamRequest request2(factory_.get(), &http_server_properties_); |
| 4673 EXPECT_EQ(OK, request2.Request(destination2, privacy_mode_, | 4674 EXPECT_EQ(OK, request2.Request(destination2, privacy_mode_, |
| 4674 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 4675 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 4675 callback2.callback())); | 4676 callback2.callback())); |
| 4676 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); | 4677 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); |
| 4677 EXPECT_TRUE(stream2.get()); | 4678 EXPECT_TRUE(stream2.get()); |
| 4678 | 4679 |
| 4679 QuicChromiumClientSession* session1 = | 4680 QuicChromiumClientSession::Handle* session1 = |
| 4680 QuicHttpStreamPeer::GetSession(stream1.get()); | 4681 QuicHttpStreamPeer::GetSessionHandle(stream1.get()); |
| 4681 QuicChromiumClientSession* session2 = | 4682 QuicChromiumClientSession::Handle* session2 = |
| 4682 QuicHttpStreamPeer::GetSession(stream2.get()); | 4683 QuicHttpStreamPeer::GetSessionHandle(stream2.get()); |
| 4683 EXPECT_EQ(session1, session2); | 4684 EXPECT_TRUE(session1->SharesSameSession(*session2)); |
| 4684 EXPECT_EQ(QuicServerId(host_port_pair_, privacy_mode_), | 4685 EXPECT_EQ(QuicServerId(host_port_pair_, privacy_mode_), |
| 4685 session1->server_id()); | 4686 session1->server_id()); |
| 4686 | 4687 |
| 4687 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 4688 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 4688 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 4689 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 4689 } | 4690 } |
| 4690 | 4691 |
| 4691 TEST_P(QuicStreamFactoryTest, ForceHolBlockingEnabled) { | 4692 TEST_P(QuicStreamFactoryTest, ForceHolBlockingEnabled) { |
| 4692 force_hol_blocking_ = true; | 4693 force_hol_blocking_ = true; |
| 4693 Initialize(); | 4694 Initialize(); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4852 | 4853 |
| 4853 // Second request returns synchronously because it pools to existing session. | 4854 // Second request returns synchronously because it pools to existing session. |
| 4854 TestCompletionCallback callback2; | 4855 TestCompletionCallback callback2; |
| 4855 QuicStreamRequest request2(factory_.get(), &http_server_properties_); | 4856 QuicStreamRequest request2(factory_.get(), &http_server_properties_); |
| 4856 EXPECT_EQ(OK, request2.Request(destination, privacy_mode_, | 4857 EXPECT_EQ(OK, request2.Request(destination, privacy_mode_, |
| 4857 /*cert_verify_flags=*/0, url2, "GET", net_log_, | 4858 /*cert_verify_flags=*/0, url2, "GET", net_log_, |
| 4858 callback2.callback())); | 4859 callback2.callback())); |
| 4859 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); | 4860 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); |
| 4860 EXPECT_TRUE(stream2.get()); | 4861 EXPECT_TRUE(stream2.get()); |
| 4861 | 4862 |
| 4862 QuicChromiumClientSession* session1 = | 4863 QuicChromiumClientSession::Handle* session1 = |
| 4863 QuicHttpStreamPeer::GetSession(stream1.get()); | 4864 QuicHttpStreamPeer::GetSessionHandle(stream1.get()); |
| 4864 QuicChromiumClientSession* session2 = | 4865 QuicChromiumClientSession::Handle* session2 = |
| 4865 QuicHttpStreamPeer::GetSession(stream2.get()); | 4866 QuicHttpStreamPeer::GetSessionHandle(stream2.get()); |
| 4866 EXPECT_EQ(session1, session2); | 4867 EXPECT_TRUE(session1->SharesSameSession(*session2)); |
| 4867 | 4868 |
| 4868 EXPECT_EQ(QuicServerId(origin1_, privacy_mode_), session1->server_id()); | 4869 EXPECT_EQ(QuicServerId(origin1_, privacy_mode_), session1->server_id()); |
| 4869 | 4870 |
| 4870 EXPECT_TRUE(AllDataConsumed()); | 4871 EXPECT_TRUE(AllDataConsumed()); |
| 4871 } | 4872 } |
| 4872 | 4873 |
| 4873 // QuicStreamRequest is not pooled if PrivacyMode differs. | 4874 // QuicStreamRequest is not pooled if PrivacyMode differs. |
| 4874 TEST_P(QuicStreamFactoryWithDestinationTest, DifferentPrivacyMode) { | 4875 TEST_P(QuicStreamFactoryWithDestinationTest, DifferentPrivacyMode) { |
| 4875 Initialize(); | 4876 Initialize(); |
| 4876 | 4877 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4927 request2.Request(destination, PRIVACY_MODE_ENABLED, | 4928 request2.Request(destination, PRIVACY_MODE_ENABLED, |
| 4928 /*cert_verify_flags=*/0, url2, "GET", net_log_, | 4929 /*cert_verify_flags=*/0, url2, "GET", net_log_, |
| 4929 callback2.callback())); | 4930 callback2.callback())); |
| 4930 EXPECT_EQ(OK, callback2.WaitForResult()); | 4931 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 4931 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); | 4932 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); |
| 4932 EXPECT_TRUE(stream2.get()); | 4933 EXPECT_TRUE(stream2.get()); |
| 4933 | 4934 |
| 4934 // |request2| does not pool to the first session, because PrivacyMode does not | 4935 // |request2| does not pool to the first session, because PrivacyMode does not |
| 4935 // match. Instead, another session is opened to the same destination, but | 4936 // match. Instead, another session is opened to the same destination, but |
| 4936 // with a different QuicServerId. | 4937 // with a different QuicServerId. |
| 4937 QuicChromiumClientSession* session1 = | 4938 QuicChromiumClientSession::Handle* session1 = |
| 4938 QuicHttpStreamPeer::GetSession(stream1.get()); | 4939 QuicHttpStreamPeer::GetSessionHandle(stream1.get()); |
| 4939 QuicChromiumClientSession* session2 = | 4940 QuicChromiumClientSession::Handle* session2 = |
| 4940 QuicHttpStreamPeer::GetSession(stream2.get()); | 4941 QuicHttpStreamPeer::GetSessionHandle(stream2.get()); |
| 4941 EXPECT_NE(session1, session2); | 4942 EXPECT_FALSE(session1->SharesSameSession(*session2)); |
| 4942 | 4943 |
| 4943 EXPECT_EQ(QuicServerId(origin1_, PRIVACY_MODE_DISABLED), | 4944 EXPECT_EQ(QuicServerId(origin1_, PRIVACY_MODE_DISABLED), |
| 4944 session1->server_id()); | 4945 session1->server_id()); |
| 4945 EXPECT_EQ(QuicServerId(origin2_, PRIVACY_MODE_ENABLED), | 4946 EXPECT_EQ(QuicServerId(origin2_, PRIVACY_MODE_ENABLED), |
| 4946 session2->server_id()); | 4947 session2->server_id()); |
| 4947 | 4948 |
| 4948 EXPECT_TRUE(AllDataConsumed()); | 4949 EXPECT_TRUE(AllDataConsumed()); |
| 4949 } | 4950 } |
| 4950 | 4951 |
| 4951 // QuicStreamRequest is not pooled if certificate does not match its origin. | 4952 // QuicStreamRequest is not pooled if certificate does not match its origin. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5010 request2.Request(destination, privacy_mode_, | 5011 request2.Request(destination, privacy_mode_, |
| 5011 /*cert_verify_flags=*/0, url2, "GET", net_log_, | 5012 /*cert_verify_flags=*/0, url2, "GET", net_log_, |
| 5012 callback2.callback())); | 5013 callback2.callback())); |
| 5013 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 5014 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 5014 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); | 5015 std::unique_ptr<HttpStream> stream2 = request2.CreateStream(); |
| 5015 EXPECT_TRUE(stream2.get()); | 5016 EXPECT_TRUE(stream2.get()); |
| 5016 | 5017 |
| 5017 // |request2| does not pool to the first session, because the certificate does | 5018 // |request2| does not pool to the first session, because the certificate does |
| 5018 // not match. Instead, another session is opened to the same destination, but | 5019 // not match. Instead, another session is opened to the same destination, but |
| 5019 // with a different QuicServerId. | 5020 // with a different QuicServerId. |
| 5020 QuicChromiumClientSession* session1 = | 5021 QuicChromiumClientSession::Handle* session1 = |
| 5021 QuicHttpStreamPeer::GetSession(stream1.get()); | 5022 QuicHttpStreamPeer::GetSessionHandle(stream1.get()); |
| 5022 QuicChromiumClientSession* session2 = | 5023 QuicChromiumClientSession::Handle* session2 = |
| 5023 QuicHttpStreamPeer::GetSession(stream2.get()); | 5024 QuicHttpStreamPeer::GetSessionHandle(stream2.get()); |
| 5024 EXPECT_NE(session1, session2); | 5025 EXPECT_FALSE(session1->SharesSameSession(*session2)); |
| 5025 | 5026 |
| 5026 EXPECT_EQ(QuicServerId(origin1_, privacy_mode_), session1->server_id()); | 5027 EXPECT_EQ(QuicServerId(origin1_, privacy_mode_), session1->server_id()); |
| 5027 EXPECT_EQ(QuicServerId(origin2_, privacy_mode_), session2->server_id()); | 5028 EXPECT_EQ(QuicServerId(origin2_, privacy_mode_), session2->server_id()); |
| 5028 | 5029 |
| 5029 EXPECT_TRUE(AllDataConsumed()); | 5030 EXPECT_TRUE(AllDataConsumed()); |
| 5030 } | 5031 } |
| 5031 | 5032 |
| 5032 // This test verifies that QuicStreamFactory::ClearCachedStatesInCryptoConfig | 5033 // This test verifies that QuicStreamFactory::ClearCachedStatesInCryptoConfig |
| 5033 // correctly transform an origin filter to a ServerIdFilter. Whether the | 5034 // correctly transform an origin filter to a ServerIdFilter. Whether the |
| 5034 // deletion itself works correctly is tested in QuicCryptoClientConfigTest. | 5035 // deletion itself works correctly is tested in QuicCryptoClientConfigTest. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5071 // Clear all cached states. | 5072 // Clear all cached states. |
| 5072 factory_->ClearCachedStatesInCryptoConfig( | 5073 factory_->ClearCachedStatesInCryptoConfig( |
| 5073 base::Callback<bool(const GURL&)>()); | 5074 base::Callback<bool(const GURL&)>()); |
| 5074 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5075 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
| 5075 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5076 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
| 5076 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5077 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
| 5077 } | 5078 } |
| 5078 | 5079 |
| 5079 } // namespace test | 5080 } // namespace test |
| 5080 } // namespace net | 5081 } // namespace net |
| OLD | NEW |