| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <shlobj.h> | 9 #include <shlobj.h> |
| 10 #endif | 10 #endif |
| (...skipping 4903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4914 request.Start(); | 4914 request.Start(); |
| 4915 base::RunLoop().Run(); | 4915 base::RunLoop().Run(); |
| 4916 | 4916 |
| 4917 TransportSecurityState* security_state = | 4917 TransportSecurityState* security_state = |
| 4918 default_context_.transport_security_state(); | 4918 default_context_.transport_security_state(); |
| 4919 bool sni_available = true; | 4919 bool sni_available = true; |
| 4920 TransportSecurityState::DomainState domain_state; | 4920 TransportSecurityState::DomainState domain_state; |
| 4921 EXPECT_TRUE(security_state->GetDomainState( | 4921 EXPECT_TRUE(security_state->GetDomainState( |
| 4922 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); | 4922 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); |
| 4923 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, | 4923 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, |
| 4924 domain_state.upgrade_mode); | 4924 domain_state.dynamic_sts.upgrade_mode); |
| 4925 EXPECT_TRUE(domain_state.sts_include_subdomains); | 4925 EXPECT_TRUE(domain_state.dynamic_sts.include_subdomains); |
| 4926 EXPECT_FALSE(domain_state.pkp_include_subdomains); | 4926 EXPECT_FALSE(domain_state.dynamic_pkp.include_subdomains); |
| 4927 #if defined(OS_ANDROID) | 4927 #if defined(OS_ANDROID) |
| 4928 // Android's CertVerifyProc does not (yet) handle pins. | 4928 // Android's CertVerifyProc does not (yet) handle pins. |
| 4929 #else | 4929 #else |
| 4930 EXPECT_FALSE(domain_state.HasPublicKeyPins()); | 4930 EXPECT_FALSE(domain_state.HasPublicKeyPins()); |
| 4931 #endif | 4931 #endif |
| 4932 } | 4932 } |
| 4933 | 4933 |
| 4934 // Android's CertVerifyProc does not (yet) handle pins. Therefore, it will | 4934 // Android's CertVerifyProc does not (yet) handle pins. Therefore, it will |
| 4935 // reject HPKP headers, and a test setting only HPKP headers will fail (no | 4935 // reject HPKP headers, and a test setting only HPKP headers will fail (no |
| 4936 // DomainState present because header rejected). | 4936 // DomainState present because header rejected). |
| (...skipping 21 matching lines...) Expand all Loading... |
| 4958 request.Start(); | 4958 request.Start(); |
| 4959 base::RunLoop().Run(); | 4959 base::RunLoop().Run(); |
| 4960 | 4960 |
| 4961 TransportSecurityState* security_state = | 4961 TransportSecurityState* security_state = |
| 4962 default_context_.transport_security_state(); | 4962 default_context_.transport_security_state(); |
| 4963 bool sni_available = true; | 4963 bool sni_available = true; |
| 4964 TransportSecurityState::DomainState domain_state; | 4964 TransportSecurityState::DomainState domain_state; |
| 4965 EXPECT_TRUE(security_state->GetDomainState( | 4965 EXPECT_TRUE(security_state->GetDomainState( |
| 4966 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); | 4966 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); |
| 4967 EXPECT_EQ(TransportSecurityState::DomainState::MODE_DEFAULT, | 4967 EXPECT_EQ(TransportSecurityState::DomainState::MODE_DEFAULT, |
| 4968 domain_state.upgrade_mode); | 4968 domain_state.dynamic_sts.upgrade_mode); |
| 4969 EXPECT_FALSE(domain_state.sts_include_subdomains); | 4969 EXPECT_FALSE(domain_state.dynamic_sts.include_subdomains); |
| 4970 EXPECT_FALSE(domain_state.pkp_include_subdomains); | 4970 EXPECT_FALSE(domain_state.dynamic_pkp.include_subdomains); |
| 4971 EXPECT_TRUE(domain_state.HasPublicKeyPins()); | 4971 EXPECT_TRUE(domain_state.HasPublicKeyPins()); |
| 4972 EXPECT_NE(domain_state.upgrade_expiry, | 4972 EXPECT_NE(domain_state.dynamic_sts.expiry, domain_state.dynamic_pkp.expiry); |
| 4973 domain_state.dynamic_spki_hashes_expiry); | |
| 4974 } | 4973 } |
| 4975 | 4974 |
| 4976 TEST_F(URLRequestTestHTTP, ProcessSTSOnce) { | 4975 TEST_F(URLRequestTestHTTP, ProcessSTSOnce) { |
| 4977 SpawnedTestServer::SSLOptions ssl_options; | 4976 SpawnedTestServer::SSLOptions ssl_options; |
| 4978 SpawnedTestServer https_test_server( | 4977 SpawnedTestServer https_test_server( |
| 4979 SpawnedTestServer::TYPE_HTTPS, | 4978 SpawnedTestServer::TYPE_HTTPS, |
| 4980 ssl_options, | 4979 ssl_options, |
| 4981 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); | 4980 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); |
| 4982 ASSERT_TRUE(https_test_server.Start()); | 4981 ASSERT_TRUE(https_test_server.Start()); |
| 4983 | 4982 |
| 4984 TestDelegate d; | 4983 TestDelegate d; |
| 4985 URLRequest request( | 4984 URLRequest request( |
| 4986 https_test_server.GetURL("files/hsts-multiple-headers.html"), | 4985 https_test_server.GetURL("files/hsts-multiple-headers.html"), |
| 4987 DEFAULT_PRIORITY, | 4986 DEFAULT_PRIORITY, |
| 4988 &d, | 4987 &d, |
| 4989 &default_context_); | 4988 &default_context_); |
| 4990 request.Start(); | 4989 request.Start(); |
| 4991 base::RunLoop().Run(); | 4990 base::RunLoop().Run(); |
| 4992 | 4991 |
| 4993 // We should have set parameters from the first header, not the second. | 4992 // We should have set parameters from the first header, not the second. |
| 4994 TransportSecurityState* security_state = | 4993 TransportSecurityState* security_state = |
| 4995 default_context_.transport_security_state(); | 4994 default_context_.transport_security_state(); |
| 4996 bool sni_available = true; | 4995 bool sni_available = true; |
| 4997 TransportSecurityState::DomainState domain_state; | 4996 TransportSecurityState::DomainState domain_state; |
| 4998 EXPECT_TRUE(security_state->GetDomainState( | 4997 EXPECT_TRUE(security_state->GetDomainState( |
| 4999 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); | 4998 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); |
| 5000 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, | 4999 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, |
| 5001 domain_state.upgrade_mode); | 5000 domain_state.dynamic_sts.upgrade_mode); |
| 5002 EXPECT_FALSE(domain_state.sts_include_subdomains); | 5001 EXPECT_FALSE(domain_state.dynamic_sts.include_subdomains); |
| 5003 EXPECT_FALSE(domain_state.pkp_include_subdomains); | 5002 EXPECT_FALSE(domain_state.dynamic_pkp.include_subdomains); |
| 5004 } | 5003 } |
| 5005 | 5004 |
| 5006 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP) { | 5005 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP) { |
| 5007 SpawnedTestServer::SSLOptions ssl_options; | 5006 SpawnedTestServer::SSLOptions ssl_options; |
| 5008 SpawnedTestServer https_test_server( | 5007 SpawnedTestServer https_test_server( |
| 5009 SpawnedTestServer::TYPE_HTTPS, | 5008 SpawnedTestServer::TYPE_HTTPS, |
| 5010 ssl_options, | 5009 ssl_options, |
| 5011 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); | 5010 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); |
| 5012 ASSERT_TRUE(https_test_server.Start()); | 5011 ASSERT_TRUE(https_test_server.Start()); |
| 5013 | 5012 |
| 5014 TestDelegate d; | 5013 TestDelegate d; |
| 5015 URLRequest request( | 5014 URLRequest request( |
| 5016 https_test_server.GetURL("files/hsts-and-hpkp-headers.html"), | 5015 https_test_server.GetURL("files/hsts-and-hpkp-headers.html"), |
| 5017 DEFAULT_PRIORITY, | 5016 DEFAULT_PRIORITY, |
| 5018 &d, | 5017 &d, |
| 5019 &default_context_); | 5018 &default_context_); |
| 5020 request.Start(); | 5019 request.Start(); |
| 5021 base::RunLoop().Run(); | 5020 base::RunLoop().Run(); |
| 5022 | 5021 |
| 5023 // We should have set parameters from the first header, not the second. | 5022 // We should have set parameters from the first header, not the second. |
| 5024 TransportSecurityState* security_state = | 5023 TransportSecurityState* security_state = |
| 5025 default_context_.transport_security_state(); | 5024 default_context_.transport_security_state(); |
| 5026 bool sni_available = true; | 5025 bool sni_available = true; |
| 5027 TransportSecurityState::DomainState domain_state; | 5026 TransportSecurityState::DomainState domain_state; |
| 5028 EXPECT_TRUE(security_state->GetDomainState( | 5027 EXPECT_TRUE(security_state->GetDomainState( |
| 5029 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); | 5028 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); |
| 5030 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, | 5029 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, |
| 5031 domain_state.upgrade_mode); | 5030 domain_state.dynamic_sts.upgrade_mode); |
| 5032 #if defined(OS_ANDROID) | 5031 #if defined(OS_ANDROID) |
| 5033 // Android's CertVerifyProc does not (yet) handle pins. | 5032 // Android's CertVerifyProc does not (yet) handle pins. |
| 5034 #else | 5033 #else |
| 5035 EXPECT_TRUE(domain_state.HasPublicKeyPins()); | 5034 EXPECT_TRUE(domain_state.HasPublicKeyPins()); |
| 5036 #endif | 5035 #endif |
| 5037 EXPECT_NE(domain_state.upgrade_expiry, | 5036 EXPECT_NE(domain_state.dynamic_sts.expiry, domain_state.dynamic_pkp.expiry); |
| 5038 domain_state.dynamic_spki_hashes_expiry); | |
| 5039 | 5037 |
| 5040 // Even though there is an HSTS header asserting includeSubdomains, it is | 5038 // Even though there is an HSTS header asserting includeSubdomains, it is |
| 5041 // the *second* such header, and we MUST process only the first. | 5039 // the *second* such header, and we MUST process only the first. |
| 5042 EXPECT_FALSE(domain_state.sts_include_subdomains); | 5040 EXPECT_FALSE(domain_state.dynamic_sts.include_subdomains); |
| 5043 // includeSubdomains does not occur in the test HPKP header. | 5041 // includeSubdomains does not occur in the test HPKP header. |
| 5044 EXPECT_FALSE(domain_state.pkp_include_subdomains); | 5042 EXPECT_FALSE(domain_state.dynamic_pkp.include_subdomains); |
| 5045 } | 5043 } |
| 5046 | 5044 |
| 5047 // Tests that when multiple HPKP headers are present, asserting different | 5045 // Tests that when multiple HPKP headers are present, asserting different |
| 5048 // policies, that only the first such policy is processed. | 5046 // policies, that only the first such policy is processed. |
| 5049 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP2) { | 5047 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP2) { |
| 5050 SpawnedTestServer::SSLOptions ssl_options; | 5048 SpawnedTestServer::SSLOptions ssl_options; |
| 5051 SpawnedTestServer https_test_server( | 5049 SpawnedTestServer https_test_server( |
| 5052 SpawnedTestServer::TYPE_HTTPS, | 5050 SpawnedTestServer::TYPE_HTTPS, |
| 5053 ssl_options, | 5051 ssl_options, |
| 5054 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); | 5052 base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); |
| 5055 ASSERT_TRUE(https_test_server.Start()); | 5053 ASSERT_TRUE(https_test_server.Start()); |
| 5056 | 5054 |
| 5057 TestDelegate d; | 5055 TestDelegate d; |
| 5058 URLRequest request( | 5056 URLRequest request( |
| 5059 https_test_server.GetURL("files/hsts-and-hpkp-headers2.html"), | 5057 https_test_server.GetURL("files/hsts-and-hpkp-headers2.html"), |
| 5060 DEFAULT_PRIORITY, | 5058 DEFAULT_PRIORITY, |
| 5061 &d, | 5059 &d, |
| 5062 &default_context_); | 5060 &default_context_); |
| 5063 request.Start(); | 5061 request.Start(); |
| 5064 base::RunLoop().Run(); | 5062 base::RunLoop().Run(); |
| 5065 | 5063 |
| 5066 TransportSecurityState* security_state = | 5064 TransportSecurityState* security_state = |
| 5067 default_context_.transport_security_state(); | 5065 default_context_.transport_security_state(); |
| 5068 bool sni_available = true; | 5066 bool sni_available = true; |
| 5069 TransportSecurityState::DomainState domain_state; | 5067 TransportSecurityState::DomainState domain_state; |
| 5070 EXPECT_TRUE(security_state->GetDomainState( | 5068 EXPECT_TRUE(security_state->GetDomainState( |
| 5071 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); | 5069 SpawnedTestServer::kLocalhost, sni_available, &domain_state)); |
| 5072 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, | 5070 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS, |
| 5073 domain_state.upgrade_mode); | 5071 domain_state.dynamic_sts.upgrade_mode); |
| 5074 #if defined(OS_ANDROID) | 5072 #if defined(OS_ANDROID) |
| 5075 // Android's CertVerifyProc does not (yet) handle pins. | 5073 // Android's CertVerifyProc does not (yet) handle pins. |
| 5076 #else | 5074 #else |
| 5077 EXPECT_TRUE(domain_state.HasPublicKeyPins()); | 5075 EXPECT_TRUE(domain_state.HasPublicKeyPins()); |
| 5078 #endif | 5076 #endif |
| 5079 EXPECT_NE(domain_state.upgrade_expiry, | 5077 EXPECT_NE(domain_state.dynamic_sts.expiry, domain_state.dynamic_pkp.expiry); |
| 5080 domain_state.dynamic_spki_hashes_expiry); | |
| 5081 | 5078 |
| 5082 EXPECT_TRUE(domain_state.sts_include_subdomains); | 5079 EXPECT_TRUE(domain_state.dynamic_sts.include_subdomains); |
| 5083 EXPECT_FALSE(domain_state.pkp_include_subdomains); | 5080 EXPECT_FALSE(domain_state.dynamic_pkp.include_subdomains); |
| 5084 } | 5081 } |
| 5085 | 5082 |
| 5086 TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) { | 5083 TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) { |
| 5087 ASSERT_TRUE(test_server_.Start()); | 5084 ASSERT_TRUE(test_server_.Start()); |
| 5088 | 5085 |
| 5089 TestDelegate d; | 5086 TestDelegate d; |
| 5090 URLRequest req(test_server_.GetURL("files/content-type-normalization.html"), | 5087 URLRequest req(test_server_.GetURL("files/content-type-normalization.html"), |
| 5091 DEFAULT_PRIORITY, | 5088 DEFAULT_PRIORITY, |
| 5092 &d, | 5089 &d, |
| 5093 &default_context_); | 5090 &default_context_); |
| (...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6293 | 6290 |
| 6294 EXPECT_EQ(1, d.response_started_count()); | 6291 EXPECT_EQ(1, d.response_started_count()); |
| 6295 EXPECT_FALSE(d.received_data_before_response()); | 6292 EXPECT_FALSE(d.received_data_before_response()); |
| 6296 EXPECT_TRUE(d.have_certificate_errors()); | 6293 EXPECT_TRUE(d.have_certificate_errors()); |
| 6297 EXPECT_TRUE(d.certificate_errors_are_fatal()); | 6294 EXPECT_TRUE(d.certificate_errors_are_fatal()); |
| 6298 | 6295 |
| 6299 // Get a fresh copy of the state, and check that it hasn't been updated. | 6296 // Get a fresh copy of the state, and check that it hasn't been updated. |
| 6300 TransportSecurityState::DomainState new_domain_state; | 6297 TransportSecurityState::DomainState new_domain_state; |
| 6301 EXPECT_TRUE(transport_security_state.GetDomainState("www.google.com", true, | 6298 EXPECT_TRUE(transport_security_state.GetDomainState("www.google.com", true, |
| 6302 &new_domain_state)); | 6299 &new_domain_state)); |
| 6303 EXPECT_EQ(new_domain_state.upgrade_mode, domain_state.upgrade_mode); | 6300 EXPECT_EQ(new_domain_state.dynamic_sts.upgrade_mode, |
| 6304 EXPECT_EQ(new_domain_state.sts_include_subdomains, | 6301 domain_state.dynamic_sts.upgrade_mode); |
| 6305 domain_state.sts_include_subdomains); | 6302 EXPECT_EQ(new_domain_state.dynamic_sts.include_subdomains, |
| 6306 EXPECT_EQ(new_domain_state.pkp_include_subdomains, | 6303 domain_state.dynamic_sts.include_subdomains); |
| 6307 domain_state.pkp_include_subdomains); | 6304 EXPECT_EQ(new_domain_state.dynamic_pkp.include_subdomains, |
| 6308 EXPECT_TRUE(FingerprintsEqual(new_domain_state.static_spki_hashes, | 6305 domain_state.dynamic_pkp.include_subdomains); |
| 6309 domain_state.static_spki_hashes)); | 6306 EXPECT_TRUE(FingerprintsEqual(new_domain_state.static_pkp.spki_hashes, |
| 6310 EXPECT_TRUE(FingerprintsEqual(new_domain_state.dynamic_spki_hashes, | 6307 domain_state.static_pkp.spki_hashes)); |
| 6311 domain_state.dynamic_spki_hashes)); | 6308 EXPECT_TRUE(FingerprintsEqual(new_domain_state.dynamic_pkp.spki_hashes, |
| 6312 EXPECT_TRUE(FingerprintsEqual(new_domain_state.bad_static_spki_hashes, | 6309 domain_state.dynamic_pkp.spki_hashes)); |
| 6313 domain_state.bad_static_spki_hashes)); | 6310 EXPECT_TRUE(FingerprintsEqual(new_domain_state.static_pkp.bad_spki_hashes, |
| 6311 domain_state.static_pkp.bad_spki_hashes)); |
| 6314 } | 6312 } |
| 6315 | 6313 |
| 6316 // Make sure HSTS preserves a POST request's method and body. | 6314 // Make sure HSTS preserves a POST request's method and body. |
| 6317 TEST_F(HTTPSRequestTest, HSTSPreservesPosts) { | 6315 TEST_F(HTTPSRequestTest, HSTSPreservesPosts) { |
| 6318 static const char kData[] = "hello world"; | 6316 static const char kData[] = "hello world"; |
| 6319 | 6317 |
| 6320 SpawnedTestServer::SSLOptions ssl_options( | 6318 SpawnedTestServer::SSLOptions ssl_options( |
| 6321 SpawnedTestServer::SSLOptions::CERT_OK); | 6319 SpawnedTestServer::SSLOptions::CERT_OK); |
| 6322 SpawnedTestServer test_server( | 6320 SpawnedTestServer test_server( |
| 6323 SpawnedTestServer::TYPE_HTTPS, | 6321 SpawnedTestServer::TYPE_HTTPS, |
| (...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7593 | 7591 |
| 7594 EXPECT_FALSE(r.is_pending()); | 7592 EXPECT_FALSE(r.is_pending()); |
| 7595 EXPECT_EQ(1, d->response_started_count()); | 7593 EXPECT_EQ(1, d->response_started_count()); |
| 7596 EXPECT_FALSE(d->received_data_before_response()); | 7594 EXPECT_FALSE(d->received_data_before_response()); |
| 7597 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 7595 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
| 7598 } | 7596 } |
| 7599 } | 7597 } |
| 7600 #endif // !defined(DISABLE_FTP_SUPPORT) | 7598 #endif // !defined(DISABLE_FTP_SUPPORT) |
| 7601 | 7599 |
| 7602 } // namespace net | 7600 } // namespace net |
| OLD | NEW |