Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: chrome/browser/ssl/ssl_error_handler_unittest.cc

Issue 2777383002: Update SSL error handling code to account for Subject CN deprecation (Closed)
Patch Set: Address nits Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698