| 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 #include "base/values.h" | 48 #include "base/values.h" |
| 49 #include "net/base/chunked_upload_data_stream.h" | 49 #include "net/base/chunked_upload_data_stream.h" |
| 50 #include "net/base/directory_listing.h" | 50 #include "net/base/directory_listing.h" |
| 51 #include "net/base/elements_upload_data_stream.h" | 51 #include "net/base/elements_upload_data_stream.h" |
| 52 #include "net/base/load_flags.h" | 52 #include "net/base/load_flags.h" |
| 53 #include "net/base/load_timing_info.h" | 53 #include "net/base/load_timing_info.h" |
| 54 #include "net/base/load_timing_info_test_util.h" | 54 #include "net/base/load_timing_info_test_util.h" |
| 55 #include "net/base/net_errors.h" | 55 #include "net/base/net_errors.h" |
| 56 #include "net/base/net_module.h" | 56 #include "net/base/net_module.h" |
| 57 #include "net/base/request_priority.h" | 57 #include "net/base/request_priority.h" |
| 58 #include "net/base/test_completion_callback.h" |
| 58 #include "net/base/upload_bytes_element_reader.h" | 59 #include "net/base/upload_bytes_element_reader.h" |
| 59 #include "net/base/upload_data_stream.h" | 60 #include "net/base/upload_data_stream.h" |
| 60 #include "net/base/upload_file_element_reader.h" | 61 #include "net/base/upload_file_element_reader.h" |
| 61 #include "net/base/url_util.h" | 62 #include "net/base/url_util.h" |
| 62 #include "net/cert/ct_policy_enforcer.h" | 63 #include "net/cert/ct_policy_enforcer.h" |
| 63 #include "net/cert/ct_policy_status.h" | 64 #include "net/cert/ct_policy_status.h" |
| 64 #include "net/cert/do_nothing_ct_verifier.h" | 65 #include "net/cert/do_nothing_ct_verifier.h" |
| 65 #include "net/cert/ev_root_ca_metadata.h" | 66 #include "net/cert/ev_root_ca_metadata.h" |
| 66 #include "net/cert/mock_cert_verifier.h" | 67 #include "net/cert/mock_cert_verifier.h" |
| 68 #include "net/cert/multi_log_ct_verifier.h" |
| 67 #include "net/cert/signed_certificate_timestamp_and_status.h" | 69 #include "net/cert/signed_certificate_timestamp_and_status.h" |
| 68 #include "net/cert/test_root_certs.h" | 70 #include "net/cert/test_root_certs.h" |
| 69 #include "net/cert_net/nss_ocsp.h" | 71 #include "net/cert_net/nss_ocsp.h" |
| 70 #include "net/cookies/cookie_monster.h" | 72 #include "net/cookies/cookie_monster.h" |
| 71 #include "net/cookies/cookie_store_test_helpers.h" | 73 #include "net/cookies/cookie_store_test_helpers.h" |
| 72 #include "net/disk_cache/disk_cache.h" | 74 #include "net/disk_cache/disk_cache.h" |
| 73 #include "net/dns/mock_host_resolver.h" | 75 #include "net/dns/mock_host_resolver.h" |
| 74 #include "net/http/http_byte_range.h" | 76 #include "net/http/http_byte_range.h" |
| 75 #include "net/http/http_cache.h" | 77 #include "net/http/http_cache.h" |
| 76 #include "net/http/http_network_layer.h" | 78 #include "net/http/http_network_layer.h" |
| 77 #include "net/http/http_network_session.h" | 79 #include "net/http/http_network_session.h" |
| 78 #include "net/http/http_request_headers.h" | 80 #include "net/http/http_request_headers.h" |
| 79 #include "net/http/http_response_headers.h" | 81 #include "net/http/http_response_headers.h" |
| 82 #include "net/http/http_server_properties_impl.h" |
| 80 #include "net/http/http_util.h" | 83 #include "net/http/http_util.h" |
| 81 #include "net/log/net_log_event_type.h" | 84 #include "net/log/net_log_event_type.h" |
| 82 #include "net/log/net_log_source.h" | 85 #include "net/log/net_log_source.h" |
| 83 #include "net/log/test_net_log.h" | 86 #include "net/log/test_net_log.h" |
| 84 #include "net/log/test_net_log_entry.h" | 87 #include "net/log/test_net_log_entry.h" |
| 85 #include "net/log/test_net_log_util.h" | 88 #include "net/log/test_net_log_util.h" |
| 86 #include "net/net_features.h" | 89 #include "net/net_features.h" |
| 87 #include "net/nqe/external_estimate_provider.h" | 90 #include "net/nqe/external_estimate_provider.h" |
| 88 #include "net/proxy/proxy_server.h" | 91 #include "net/proxy/proxy_server.h" |
| 89 #include "net/proxy/proxy_service.h" | 92 #include "net/proxy/proxy_service.h" |
| 93 #include "net/quic/chromium/mock_crypto_client_stream_factory.h" |
| 94 #include "net/quic/chromium/quic_server_info.h" |
| 95 #include "net/socket/socket_test_util.h" |
| 90 #include "net/socket/ssl_client_socket.h" | 96 #include "net/socket/ssl_client_socket.h" |
| 91 #include "net/ssl/channel_id_service.h" | 97 #include "net/ssl/channel_id_service.h" |
| 92 #include "net/ssl/default_channel_id_store.h" | 98 #include "net/ssl/default_channel_id_store.h" |
| 93 #include "net/ssl/ssl_connection_status_flags.h" | 99 #include "net/ssl/ssl_connection_status_flags.h" |
| 94 #include "net/ssl/ssl_server_config.h" | 100 #include "net/ssl/ssl_server_config.h" |
| 95 #include "net/ssl/token_binding.h" | 101 #include "net/ssl/token_binding.h" |
| 96 #include "net/test/cert_test_util.h" | 102 #include "net/test/cert_test_util.h" |
| 97 #include "net/test/embedded_test_server/embedded_test_server.h" | 103 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 98 #include "net/test/embedded_test_server/http_request.h" | 104 #include "net/test/embedded_test_server/http_request.h" |
| 99 #include "net/test/embedded_test_server/http_response.h" | 105 #include "net/test/embedded_test_server/http_response.h" |
| (...skipping 7620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7720 RequestPriority job_priority; | 7726 RequestPriority job_priority; |
| 7721 std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob( | 7727 std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob( |
| 7722 req.get(), &default_network_delegate_, &job_priority)); | 7728 req.get(), &default_network_delegate_, &job_priority)); |
| 7723 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 7729 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
| 7724 | 7730 |
| 7725 // Should trigger |job| to be started. | 7731 // Should trigger |job| to be started. |
| 7726 base::RunLoop().Run(); | 7732 base::RunLoop().Run(); |
| 7727 EXPECT_EQ(LOW, job_priority); | 7733 EXPECT_EQ(LOW, job_priority); |
| 7728 } | 7734 } |
| 7729 | 7735 |
| 7736 TEST_F(URLRequestTest, QuicServerInfoFactoryTest) { |
| 7737 HttpNetworkSession::Params params; |
| 7738 |
| 7739 MockClientSocketFactory socket_factory; |
| 7740 MockCryptoClientStreamFactory crypto_client_stream_factory; |
| 7741 MockHostResolver host_resolver; |
| 7742 MockCertVerifier cert_verifier; |
| 7743 CTPolicyEnforcer ct_policy_enforcer; |
| 7744 TransportSecurityState transport_security_state; |
| 7745 std::unique_ptr<CTVerifier> cert_transparency_verifier( |
| 7746 new MultiLogCTVerifier()); |
| 7747 std::unique_ptr<ProxyService> proxy_service = ProxyService::CreateDirect(); |
| 7748 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( |
| 7749 new SSLConfigServiceDefaults); |
| 7750 HttpServerPropertiesImpl http_server_properties; |
| 7751 // Set up the quic stream factory. |
| 7752 params.enable_quic = true; |
| 7753 params.client_socket_factory = &socket_factory; |
| 7754 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory; |
| 7755 params.host_resolver = &host_resolver; |
| 7756 params.cert_verifier = &cert_verifier; |
| 7757 params.ct_policy_enforcer = &ct_policy_enforcer; |
| 7758 params.transport_security_state = &transport_security_state; |
| 7759 params.cert_transparency_verifier = cert_transparency_verifier.get(); |
| 7760 |
| 7761 params.proxy_service = proxy_service.get(); |
| 7762 params.ssl_config_service = ssl_config_service.get(); |
| 7763 params.http_server_properties = &http_server_properties; |
| 7764 |
| 7765 HttpNetworkSession session(params); |
| 7766 DCHECK(session.quic_stream_factory()); |
| 7767 |
| 7768 std::unique_ptr<HttpNetworkLayer> network_layer1( |
| 7769 new HttpNetworkLayer(&session)); |
| 7770 |
| 7771 HttpCache main_cache(std::move(network_layer1), |
| 7772 HttpCache::DefaultBackend::InMemory(0), true); |
| 7773 |
| 7774 EXPECT_TRUE(session.quic_stream_factory()->has_quic_server_info_factory()); |
| 7775 |
| 7776 default_context_.set_http_transaction_factory(&main_cache); |
| 7777 |
| 7778 QuicServerInfoFactory* quic_server_info_factory = |
| 7779 session.quic_stream_factory()->quic_server_info_factory(); |
| 7780 DCHECK(quic_server_info_factory); |
| 7781 |
| 7782 QuicServerId server_id("www.google.com", 443, PRIVACY_MODE_DISABLED); |
| 7783 const string server_config_a = "server_config_a"; |
| 7784 const string source_address_token_a = "source_address_token_a"; |
| 7785 const string cert_sct_a = "cert_sct_a"; |
| 7786 const string chlo_hash_a = "chlo_hash_a"; |
| 7787 const string server_config_sig_a = "server_config_sig_a"; |
| 7788 const string cert_a = "cert_a"; |
| 7789 const string cert_b = "cert_b"; |
| 7790 |
| 7791 { |
| 7792 // Store a QuicServerInfo to the quic server info factory. |
| 7793 TestCompletionCallback cb; |
| 7794 std::unique_ptr<QuicServerInfo> quic_server_info = |
| 7795 quic_server_info_factory->GetForServer(server_id); |
| 7796 quic_server_info->Start(); |
| 7797 int rv = quic_server_info->WaitForDataReady(cb.callback()); |
| 7798 EXPECT_THAT(cb.GetResult(rv), IsOk()); |
| 7799 |
| 7800 QuicServerInfo::State* state = quic_server_info->mutable_state(); |
| 7801 EXPECT_TRUE(state->certs.empty()); |
| 7802 |
| 7803 state->server_config = server_config_a; |
| 7804 state->source_address_token = source_address_token_a; |
| 7805 state->cert_sct = cert_sct_a; |
| 7806 state->chlo_hash = chlo_hash_a; |
| 7807 state->server_config_sig = server_config_sig_a; |
| 7808 state->certs.push_back(cert_a); |
| 7809 quic_server_info->Persist(); |
| 7810 base::RunLoop().RunUntilIdle(); |
| 7811 } |
| 7812 |
| 7813 // Retrieve the QuicServerInfo from the quic server info factory and verify |
| 7814 // the data is correct. |
| 7815 { |
| 7816 TestCompletionCallback cb; |
| 7817 std::unique_ptr<QuicServerInfo> quic_server_info = |
| 7818 quic_server_info_factory->GetForServer(server_id); |
| 7819 quic_server_info->Start(); |
| 7820 int rv = quic_server_info->WaitForDataReady(cb.callback()); |
| 7821 EXPECT_THAT(cb.GetResult(rv), IsOk()); |
| 7822 |
| 7823 QuicServerInfo::State* state = quic_server_info->mutable_state(); |
| 7824 EXPECT_TRUE(quic_server_info->IsDataReady()); |
| 7825 EXPECT_EQ(server_config_a, state->server_config); |
| 7826 EXPECT_EQ(source_address_token_a, state->source_address_token); |
| 7827 EXPECT_EQ(cert_sct_a, state->cert_sct); |
| 7828 EXPECT_EQ(chlo_hash_a, state->chlo_hash); |
| 7829 EXPECT_EQ(server_config_sig_a, state->server_config_sig); |
| 7830 EXPECT_EQ(1U, state->certs.size()); |
| 7831 EXPECT_EQ(cert_a, state->certs[0]); |
| 7832 |
| 7833 // Update the data. |
| 7834 state->certs.push_back(cert_b); |
| 7835 quic_server_info->Persist(); |
| 7836 base::RunLoop().RunUntilIdle(); |
| 7837 } |
| 7838 |
| 7839 { |
| 7840 // Verify data has been successfully updated. |
| 7841 TestCompletionCallback cb; |
| 7842 std::unique_ptr<QuicServerInfo> quic_server_info = |
| 7843 quic_server_info_factory->GetForServer(server_id); |
| 7844 quic_server_info->Start(); |
| 7845 int rv = quic_server_info->WaitForDataReady(cb.callback()); |
| 7846 EXPECT_THAT(cb.GetResult(rv), IsOk()); |
| 7847 |
| 7848 QuicServerInfo::State* state = quic_server_info->mutable_state(); |
| 7849 EXPECT_TRUE(quic_server_info->IsDataReady()); |
| 7850 EXPECT_EQ(2U, state->certs.size()); |
| 7851 EXPECT_EQ(cert_a, state->certs[0]); |
| 7852 EXPECT_EQ(cert_b, state->certs[1]); |
| 7853 } |
| 7854 } |
| 7855 |
| 7730 // Check that creating a network request while entering/exiting suspend mode | 7856 // Check that creating a network request while entering/exiting suspend mode |
| 7731 // fails as it should. This is the only case where an HttpTransactionFactory | 7857 // fails as it should. This is the only case where an HttpTransactionFactory |
| 7732 // does not return an HttpTransaction. | 7858 // does not return an HttpTransaction. |
| 7733 TEST_F(URLRequestTestHTTP, NetworkSuspendTest) { | 7859 TEST_F(URLRequestTestHTTP, NetworkSuspendTest) { |
| 7734 // Create a new HttpNetworkLayer that thinks it's suspended. | 7860 // Create a new HttpNetworkLayer that thinks it's suspended. |
| 7735 std::unique_ptr<HttpNetworkLayer> network_layer(new HttpNetworkLayer( | 7861 std::unique_ptr<HttpNetworkLayer> network_layer(new HttpNetworkLayer( |
| 7736 default_context_.http_transaction_factory()->GetSession())); | 7862 default_context_.http_transaction_factory()->GetSession())); |
| 7737 network_layer->OnSuspend(); | 7863 network_layer->OnSuspend(); |
| 7738 | 7864 |
| 7739 HttpCache http_cache(std::move(network_layer), | 7865 HttpCache http_cache(std::move(network_layer), |
| (...skipping 3000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10740 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 10866 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
| 10741 | 10867 |
| 10742 req->Start(); | 10868 req->Start(); |
| 10743 req->Cancel(); | 10869 req->Cancel(); |
| 10744 base::RunLoop().RunUntilIdle(); | 10870 base::RunLoop().RunUntilIdle(); |
| 10745 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 10871 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
| 10746 EXPECT_EQ(0, d.received_redirect_count()); | 10872 EXPECT_EQ(0, d.received_redirect_count()); |
| 10747 } | 10873 } |
| 10748 | 10874 |
| 10749 } // namespace net | 10875 } // namespace net |
| OLD | NEW |