OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/ssl/ssl_error_handler.h" | 5 #include "chrome/browser/ssl/ssl_error_handler.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
194 // A class to test name mismatch errors. Creates an error handler with a name | 194 // A class to test name mismatch errors. Creates an error handler with a name |
195 // mismatch error. | 195 // mismatch error. |
196 class SSLErrorHandlerNameMismatchTest : public ChromeRenderViewHostTestHarness { | 196 class SSLErrorHandlerNameMismatchTest : public ChromeRenderViewHostTestHarness { |
197 public: | 197 public: |
198 SSLErrorHandlerNameMismatchTest() : field_trial_list_(nullptr) {} | 198 SSLErrorHandlerNameMismatchTest() : field_trial_list_(nullptr) {} |
199 | 199 |
200 void SetUp() override { | 200 void SetUp() override { |
201 ChromeRenderViewHostTestHarness::SetUp(); | 201 ChromeRenderViewHostTestHarness::SetUp(); |
202 SSLErrorHandler::ResetConfigForTesting(); | 202 SSLErrorHandler::ResetConfigForTesting(); |
203 SSLErrorHandler::SetInterstitialDelayForTesting(base::TimeDelta()); | 203 SSLErrorHandler::SetInterstitialDelayForTesting(base::TimeDelta()); |
204 ssl_info_.cert = net::ImportCertFromFile( | |
205 net::GetTestCertsDirectory(), "subjectAltName_www_example_com.pem"); | |
206 ssl_info_.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID; | |
207 ssl_info_.public_key_hashes.push_back( | |
208 net::HashValue(kCertPublicKeyHashValue)); | |
209 | |
210 delegate_ = | |
211 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_); | |
212 error_handler_.reset(new TestSSLErrorHandler( | |
213 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(), | |
214 profile(), net::MapCertStatusToNetError(ssl_info_.cert_status), | |
215 ssl_info_, | |
216 GURL(), // request_url | |
217 base::Callback<void(content::CertificateRequestResultType)>())); | |
218 } | |
219 | |
220 void TearDown() override { | |
221 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); | |
222 error_handler_.reset(nullptr); | |
223 SSLErrorHandler::ResetConfigForTesting(); | |
224 ChromeRenderViewHostTestHarness::TearDown(); | |
225 } | |
226 | |
227 TestSSLErrorHandler* error_handler() { return error_handler_.get(); } | |
228 TestSSLErrorHandlerDelegate* delegate() { return delegate_; } | |
229 | |
230 const net::SSLInfo& ssl_info() { return ssl_info_; } | |
231 | |
232 private: | |
233 net::SSLInfo ssl_info_; | |
234 std::unique_ptr<TestSSLErrorHandler> error_handler_; | |
235 TestSSLErrorHandlerDelegate* delegate_; | |
236 base::FieldTrialList field_trial_list_; | |
237 | |
238 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandlerNameMismatchTest); | |
239 }; | |
240 | |
241 // A class to test name mismatch errors, where the certificate lacks a | |
242 // SubjectAltName. Creates an error handler with a name mismatch error. | |
243 class SSLErrorHandlerNameMismatchNoSANTest | |
estark
2017/04/03 02:01:42
This test fixture is the same as the one above exc
elawrence
2017/04/04 15:52:28
I didn't know how to do that in a straightforward
estark
2017/04/04 17:22:07
Oh, I was thinking you could just call SetUpErrorH
| |
244 : public ChromeRenderViewHostTestHarness { | |
245 public: | |
246 SSLErrorHandlerNameMismatchNoSANTest() : field_trial_list_(nullptr) {} | |
247 | |
248 void SetUp() override { | |
249 ChromeRenderViewHostTestHarness::SetUp(); | |
250 SSLErrorHandler::ResetConfigForTesting(); | |
251 SSLErrorHandler::SetInterstitialDelayForTesting(base::TimeDelta()); | |
204 ssl_info_.cert = | 252 ssl_info_.cert = |
205 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); | 253 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
206 ssl_info_.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID; | 254 ssl_info_.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID; |
207 ssl_info_.public_key_hashes.push_back( | 255 ssl_info_.public_key_hashes.push_back( |
208 net::HashValue(kCertPublicKeyHashValue)); | 256 net::HashValue(kCertPublicKeyHashValue)); |
209 | 257 |
210 delegate_ = | 258 delegate_ = |
211 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_); | 259 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_); |
212 error_handler_.reset(new TestSSLErrorHandler( | 260 error_handler_.reset(new TestSSLErrorHandler( |
213 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(), | 261 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(), |
(...skipping 14 matching lines...) Expand all Loading... | |
228 TestSSLErrorHandlerDelegate* delegate() { return delegate_; } | 276 TestSSLErrorHandlerDelegate* delegate() { return delegate_; } |
229 | 277 |
230 const net::SSLInfo& ssl_info() { return ssl_info_; } | 278 const net::SSLInfo& ssl_info() { return ssl_info_; } |
231 | 279 |
232 private: | 280 private: |
233 net::SSLInfo ssl_info_; | 281 net::SSLInfo ssl_info_; |
234 std::unique_ptr<TestSSLErrorHandler> error_handler_; | 282 std::unique_ptr<TestSSLErrorHandler> error_handler_; |
235 TestSSLErrorHandlerDelegate* delegate_; | 283 TestSSLErrorHandlerDelegate* delegate_; |
236 base::FieldTrialList field_trial_list_; | 284 base::FieldTrialList field_trial_list_; |
237 | 285 |
238 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandlerNameMismatchTest); | 286 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandlerNameMismatchNoSANTest); |
239 }; | 287 }; |
240 | 288 |
241 // A class to test the captive portal certificate list feature. Creates an error | 289 // A class to test the captive portal certificate list feature. Creates an error |
242 // handler with a name mismatch error by default. The error handler can be | 290 // handler with a name mismatch error by default. The error handler can be |
243 // recreated by calling ResetErrorHandler() with an appropriate cert status. | 291 // recreated by calling ResetErrorHandler() with an appropriate cert status. |
244 class SSLErrorHandlerCaptivePortalCertListTest | 292 class SSLErrorHandlerCaptivePortalCertListTest |
245 : public ChromeRenderViewHostTestHarness { | 293 : public ChromeRenderViewHostTestHarness { |
246 public: | 294 public: |
247 SSLErrorHandlerCaptivePortalCertListTest() : field_trial_list_(nullptr) {} | 295 SSLErrorHandlerCaptivePortalCertListTest() : field_trial_list_(nullptr) {} |
248 | 296 |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
679 | 727 |
680 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 3); | 728 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 3); |
681 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | 729 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
682 SSLErrorHandler::HANDLE_ALL, 1); | 730 SSLErrorHandler::HANDLE_ALL, 1); |
683 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | 731 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
684 SSLErrorHandler::WWW_MISMATCH_FOUND, 1); | 732 SSLErrorHandler::WWW_MISMATCH_FOUND, 1); |
685 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | 733 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
686 SSLErrorHandler::WWW_MISMATCH_URL_AVAILABLE, 1); | 734 SSLErrorHandler::WWW_MISMATCH_URL_AVAILABLE, 1); |
687 } | 735 } |
688 | 736 |
737 // No suggestions should be requested if certificate lacks a SubjectAltName. | |
738 TEST_F(SSLErrorHandlerNameMismatchNoSANTest, | |
739 SSLCommonNameMismatchHandlingRequiresSubjectAltName) { | |
740 base::HistogramTester histograms; | |
741 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); | |
742 delegate()->set_suggested_url_exists(); | |
743 error_handler()->StartHandlingError(); | |
744 | |
745 EXPECT_FALSE(delegate()->suggested_url_checked()); | |
746 base::RunLoop().RunUntilIdle(); | |
747 | |
748 EXPECT_TRUE(delegate()->ssl_interstitial_shown()); | |
749 EXPECT_FALSE(delegate()->redirected_to_suggested_url()); | |
750 | |
751 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2); | |
752 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | |
753 SSLErrorHandler::HANDLE_ALL, 1); | |
754 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | |
755 SSLErrorHandler::WWW_MISMATCH_FOUND, 0); | |
756 histograms.ExpectBucketCount( | |
757 SSLErrorHandler::GetHistogramNameForTesting(), | |
758 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1); | |
759 } | |
760 | |
689 TEST_F(SSLErrorHandlerNameMismatchTest, | 761 TEST_F(SSLErrorHandlerNameMismatchTest, |
690 ShouldShowSSLInterstitialOnInvalidUrlCheckResult) { | 762 ShouldShowSSLInterstitialOnInvalidUrlCheckResult) { |
691 base::HistogramTester histograms; | 763 base::HistogramTester histograms; |
692 delegate()->set_suggested_url_exists(); | 764 delegate()->set_suggested_url_exists(); |
693 error_handler()->StartHandlingError(); | 765 error_handler()->StartHandlingError(); |
694 | 766 |
695 EXPECT_TRUE(error_handler()->IsTimerRunningForTesting()); | 767 EXPECT_TRUE(error_handler()->IsTimerRunningForTesting()); |
696 EXPECT_TRUE(delegate()->suggested_url_checked()); | 768 EXPECT_TRUE(delegate()->suggested_url_checked()); |
697 EXPECT_FALSE(delegate()->ssl_interstitial_shown()); | 769 EXPECT_FALSE(delegate()->ssl_interstitial_shown()); |
698 EXPECT_FALSE(delegate()->redirected_to_suggested_url()); | 770 EXPECT_FALSE(delegate()->redirected_to_suggested_url()); |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
954 | 1026 |
955 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2); | 1027 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2); |
956 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), | 1028 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
957 SSLErrorHandler::HANDLE_ALL, 1); | 1029 SSLErrorHandler::HANDLE_ALL, 1); |
958 histograms.ExpectBucketCount( | 1030 histograms.ExpectBucketCount( |
959 SSLErrorHandler::GetHistogramNameForTesting(), | 1031 SSLErrorHandler::GetHistogramNameForTesting(), |
960 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1); | 1032 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1); |
961 } | 1033 } |
962 | 1034 |
963 #endif // BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) | 1035 #endif // BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) |
OLD | NEW |