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

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

Issue 2690333006: Captive portal certificate list should be checked when name mismatch is the only error (Closed)
Patch Set: Fix Android tests Created 3 years, 9 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
« no previous file with comments | « chrome/browser/ssl/ssl_error_handler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 bool captive_portal_interstitial_shown_; 184 bool captive_portal_interstitial_shown_;
185 bool redirected_to_suggested_url_; 185 bool redirected_to_suggested_url_;
186 bool is_overridable_error_; 186 bool is_overridable_error_;
187 CommonNameMismatchHandler::CheckUrlCallback suggested_url_callback_; 187 CommonNameMismatchHandler::CheckUrlCallback suggested_url_callback_;
188 188
189 DISALLOW_COPY_AND_ASSIGN(TestSSLErrorHandlerDelegate); 189 DISALLOW_COPY_AND_ASSIGN(TestSSLErrorHandlerDelegate);
190 }; 190 };
191 191
192 } // namespace 192 } // namespace
193 193
194 template <net::CertStatus cert_status> 194 // A class to test name mismatch errors. Creates an error handler with a name
195 class SSLErrorHandlerCertStatusTestBase 195 // mismatch error.
196 : public ChromeRenderViewHostTestHarness { 196 class SSLErrorHandlerNameMismatchTest : public ChromeRenderViewHostTestHarness {
197 public: 197 public:
198 SSLErrorHandlerCertStatusTestBase() : 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 = 204 ssl_info_.cert =
205 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); 205 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
206 ssl_info_.cert_status = cert_status; 206 ssl_info_.cert_status = net::CERT_STATUS_COMMON_NAME_INVALID;
207 ssl_info_.public_key_hashes.push_back( 207 ssl_info_.public_key_hashes.push_back(
208 net::HashValue(kCertPublicKeyHashValue)); 208 net::HashValue(kCertPublicKeyHashValue));
209 209
210 delegate_ = 210 delegate_ =
211 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_); 211 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_);
212 error_handler_.reset(new TestSSLErrorHandler( 212 error_handler_.reset(new TestSSLErrorHandler(
213 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(), 213 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(),
214 profile(), net::MapCertStatusToNetError(ssl_info_.cert_status), 214 profile(), net::MapCertStatusToNetError(ssl_info_.cert_status),
215 ssl_info_, 215 ssl_info_,
216 GURL(), // request_url 216 GURL(), // request_url
217 base::Callback<void(content::CertificateRequestResultType)>())); 217 base::Callback<void(content::CertificateRequestResultType)>()));
218
219 // Enable finch experiment for captive portal interstitials.
220 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
221 "CaptivePortalInterstitial", "Enabled"));
222 // Enable finch experiment for SSL common name mismatch handling.
223 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
224 "SSLCommonNameMismatchHandling", "Enabled"));
225 } 218 }
226 219
227 void TearDown() override { 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 the captive portal certificate list feature. Creates an error
242 // handler with a name mismatch error by default. The error handler can be
243 // recreated by calling ResetErrorHandler() with an appropriate cert status.
244 class SSLErrorHandlerCaptivePortalCertListTest
245 : public ChromeRenderViewHostTestHarness {
246 public:
247 SSLErrorHandlerCaptivePortalCertListTest() : field_trial_list_(nullptr) {}
248
249 void SetUp() override {
250 ChromeRenderViewHostTestHarness::SetUp();
251 SSLErrorHandler::ResetConfigForTesting();
252 SSLErrorHandler::SetInterstitialDelayForTesting(base::TimeDelta());
253 ResetErrorHandler(net::CERT_STATUS_COMMON_NAME_INVALID);
254 }
255
256 void TearDown() override {
228 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); 257 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
229 error_handler_.reset(nullptr); 258 error_handler_.reset(nullptr);
230 SSLErrorHandler::ResetConfigForTesting(); 259 SSLErrorHandler::ResetConfigForTesting();
231 ChromeRenderViewHostTestHarness::TearDown(); 260 ChromeRenderViewHostTestHarness::TearDown();
232 } 261 }
233 262
234 TestSSLErrorHandler* error_handler() { return error_handler_.get(); } 263 TestSSLErrorHandler* error_handler() { return error_handler_.get(); }
235 TestSSLErrorHandlerDelegate* delegate() { return delegate_; } 264 TestSSLErrorHandlerDelegate* delegate() { return delegate_; }
236 265
237 const net::SSLInfo& ssl_info() { return ssl_info_; } 266 const net::SSLInfo& ssl_info() { return ssl_info_; }
238 267
268 protected:
269 void SetFeatureEnabled(bool enabled) {
270 if (enabled) {
271 scoped_feature_list_.InitFromCommandLine(
272 "CaptivePortalCertificateList" /* enabled */,
273 std::string() /* disabled */);
274 } else {
275 scoped_feature_list_.InitFromCommandLine(
276 std::string(), "CaptivePortalCertificateList" /* disabled */);
277 }
278 }
279
280 // Deletes the current error handler and creates a new one with the given
281 // |cert_status|.
282 void ResetErrorHandler(net::CertStatus cert_status) {
283 ssl_info_.Reset();
284 ssl_info_.cert =
285 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
286 ssl_info_.cert_status = cert_status;
287 ssl_info_.public_key_hashes.push_back(
288 net::HashValue(kCertPublicKeyHashValue));
289
290 delegate_ =
291 new TestSSLErrorHandlerDelegate(profile(), web_contents(), ssl_info_);
292 error_handler_.reset(new TestSSLErrorHandler(
293 std::unique_ptr<SSLErrorHandler::Delegate>(delegate_), web_contents(),
294 profile(), net::MapCertStatusToNetError(ssl_info_.cert_status),
295 ssl_info_,
296 GURL(), // request_url
297 base::Callback<void(content::CertificateRequestResultType)>()));
298
299 // Enable finch experiment for captive portal interstitials.
300 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
301 "CaptivePortalInterstitial", "Enabled"));
302 // Enable finch experiment for SSL common name mismatch handling.
303 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
304 "SSLCommonNameMismatchHandling", "Enabled"));
305 }
306
307 void TestNoCaptivePortalInterstitial() {
308 base::HistogramTester histograms;
309
310 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
311 EXPECT_EQ(1u, ssl_info().public_key_hashes.size());
312
313 auto config_proto =
314 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>();
315 config_proto->add_captive_portal_cert()->set_sha256_hash(
316 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
317 config_proto->add_captive_portal_cert()->set_sha256_hash(
318 ssl_info().public_key_hashes[0].ToString());
319 config_proto->add_captive_portal_cert()->set_sha256_hash(
320 "sha256/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
321 SSLErrorHandler::SetErrorAssistantProto(std::move(config_proto));
322
323 error_handler()->StartHandlingError();
324
325 // Timer should start for captive portal detection.
326 EXPECT_TRUE(error_handler()->IsTimerRunningForTesting());
327 EXPECT_TRUE(delegate()->captive_portal_checked());
328 EXPECT_FALSE(delegate()->ssl_interstitial_shown());
329 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
330 EXPECT_FALSE(delegate()->suggested_url_checked());
331
332 base::RunLoop().RunUntilIdle();
333
334 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
335 EXPECT_TRUE(delegate()->captive_portal_checked());
336 EXPECT_TRUE(delegate()->ssl_interstitial_shown());
337 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
338 EXPECT_FALSE(delegate()->suggested_url_checked());
339
340 // Check that the histogram for the captive portal cert was recorded.
341 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(),
342 2);
343 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(),
344 SSLErrorHandler::HANDLE_ALL, 1);
345 histograms.ExpectBucketCount(
346 SSLErrorHandler::GetHistogramNameForTesting(),
347 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1);
348 }
349
239 private: 350 private:
240 net::SSLInfo ssl_info_; 351 net::SSLInfo ssl_info_;
241 std::unique_ptr<TestSSLErrorHandler> error_handler_; 352 std::unique_ptr<TestSSLErrorHandler> error_handler_;
242 TestSSLErrorHandlerDelegate* delegate_; 353 TestSSLErrorHandlerDelegate* delegate_;
243 base::FieldTrialList field_trial_list_; 354 base::FieldTrialList field_trial_list_;
355 base::test::ScopedFeatureList scoped_feature_list_;
244 356
245 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandlerCertStatusTestBase); 357 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandlerCaptivePortalCertListTest);
246 }; 358 };
247 359
248 using SSLErrorHandlerNameMismatchTest =
249 SSLErrorHandlerCertStatusTestBase<net::CERT_STATUS_COMMON_NAME_INVALID>;
250 using SSLErrorHandlerAuthorityInvalidTest =
251 SSLErrorHandlerCertStatusTestBase<net::CERT_STATUS_AUTHORITY_INVALID>;
252 360
253 class SSLErrorHandlerDateInvalidTest : public ChromeRenderViewHostTestHarness { 361 class SSLErrorHandlerDateInvalidTest : public ChromeRenderViewHostTestHarness {
254 public: 362 public:
255 SSLErrorHandlerDateInvalidTest() 363 SSLErrorHandlerDateInvalidTest()
256 : field_trial_test_(new network_time::FieldTrialTest()), 364 : field_trial_test_(new network_time::FieldTrialTest()),
257 clock_(new base::SimpleTestClock), 365 clock_(new base::SimpleTestClock),
258 tick_clock_(new base::SimpleTestTickClock), 366 tick_clock_(new base::SimpleTestTickClock),
259 test_server_(new net::EmbeddedTestServer) { 367 test_server_(new net::EmbeddedTestServer) {
260 SetThreadBundleOptions(content::TestBrowserThreadBundle::REAL_IO_THREAD); 368 SetThreadBundleOptions(content::TestBrowserThreadBundle::REAL_IO_THREAD);
261 network_time::NetworkTimeTracker::RegisterPrefs(pref_service_.registry()); 369 network_time::NetworkTimeTracker::RegisterPrefs(pref_service_.registry());
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 ClearErrorHandler(); 804 ClearErrorHandler();
697 805
698 // Shut down the server to cancel the pending request. 806 // Shut down the server to cancel the pending request.
699 ASSERT_TRUE(test_server()->ShutdownAndWaitUntilComplete()); 807 ASSERT_TRUE(test_server()->ShutdownAndWaitUntilComplete());
700 } 808 }
701 809
702 #if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) 810 #if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION)
703 811
704 // Tests that a certificate marked as a known captive portal certificate causes 812 // Tests that a certificate marked as a known captive portal certificate causes
705 // the captive portal interstitial to be shown. 813 // the captive portal interstitial to be shown.
706 TEST_F(SSLErrorHandlerNameMismatchTest, CaptivePortalCertificateList_Enabled) { 814 TEST_F(SSLErrorHandlerCaptivePortalCertListTest, Enabled) {
707 base::test::ScopedFeatureList scoped_feature_list; 815 SetFeatureEnabled(true);
708 scoped_feature_list.InitFromCommandLine(
709 "CaptivePortalCertificateList" /* enabled */,
710 std::string() /* disabled */);
711 816
712 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); 817 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
713 EXPECT_EQ(1u, ssl_info().public_key_hashes.size()); 818 EXPECT_EQ(1u, ssl_info().public_key_hashes.size());
714 819
715 auto config_proto = 820 auto config_proto =
716 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>(); 821 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>();
717 config_proto->add_captive_portal_cert()->set_sha256_hash( 822 config_proto->add_captive_portal_cert()->set_sha256_hash(
718 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); 823 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
719 config_proto->add_captive_portal_cert()->set_sha256_hash( 824 config_proto->add_captive_portal_cert()->set_sha256_hash(
720 ssl_info().public_key_hashes[0].ToString()); 825 ssl_info().public_key_hashes[0].ToString());
(...skipping 28 matching lines...) Expand all
749 histograms.ExpectBucketCount( 854 histograms.ExpectBucketCount(
750 SSLErrorHandler::GetHistogramNameForTesting(), 855 SSLErrorHandler::GetHistogramNameForTesting(),
751 SSLErrorHandler::SHOW_CAPTIVE_PORTAL_INTERSTITIAL_OVERRIDABLE, 1); 856 SSLErrorHandler::SHOW_CAPTIVE_PORTAL_INTERSTITIAL_OVERRIDABLE, 1);
752 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), 857 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(),
753 SSLErrorHandler::CAPTIVE_PORTAL_CERT_FOUND, 1); 858 SSLErrorHandler::CAPTIVE_PORTAL_CERT_FOUND, 1);
754 } 859 }
755 860
756 // Tests that a certificate marked as a known captive portal certificate does 861 // Tests that a certificate marked as a known captive portal certificate does
757 // not cause the captive portal interstitial to be shown, if the feature is 862 // not cause the captive portal interstitial to be shown, if the feature is
758 // disabled. 863 // disabled.
759 TEST_F(SSLErrorHandlerNameMismatchTest, CaptivePortalCertificateList_Disabled) { 864 TEST_F(SSLErrorHandlerCaptivePortalCertListTest, Disabled) {
760 base::test::ScopedFeatureList scoped_feature_list; 865 SetFeatureEnabled(false);
761 scoped_feature_list.InitFromCommandLine(
762 std::string() /* enabled */,
763 "CaptivePortalCertificateList" /* disabled */);
764 866
765 base::HistogramTester histograms; 867 // Default error for SSLErrorHandlerNameMismatchTest tests is name mismatch.
766 868 TestNoCaptivePortalInterstitial();
767 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
768 EXPECT_EQ(1u, ssl_info().public_key_hashes.size());
769
770 auto config_proto =
771 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>();
772 config_proto->add_captive_portal_cert()->set_sha256_hash(
773 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
774 config_proto->add_captive_portal_cert()->set_sha256_hash(
775 ssl_info().public_key_hashes[0].ToString());
776 config_proto->add_captive_portal_cert()->set_sha256_hash(
777 "sha256/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
778 SSLErrorHandler::SetErrorAssistantProto(std::move(config_proto));
779
780 error_handler()->StartHandlingError();
781
782 // Timer should start since captive portal certificate list feature is
783 // disabled.
784 EXPECT_TRUE(error_handler()->IsTimerRunningForTesting());
785 EXPECT_TRUE(delegate()->captive_portal_checked());
786 EXPECT_FALSE(delegate()->ssl_interstitial_shown());
787 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
788 EXPECT_FALSE(delegate()->suggested_url_checked());
789
790 // A buggy SSL error handler might have incorrectly started the timer. Run to
791 // completion to ensure the timer is expired.
792 base::RunLoop().RunUntilIdle();
793
794 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
795 EXPECT_TRUE(delegate()->captive_portal_checked());
796 EXPECT_TRUE(delegate()->ssl_interstitial_shown());
797 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
798 EXPECT_FALSE(delegate()->suggested_url_checked());
799
800 // Check that the histogram for the captive portal cert was recorded.
801 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2);
802 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(),
803 SSLErrorHandler::HANDLE_ALL, 1);
804 histograms.ExpectBucketCount(
805 SSLErrorHandler::GetHistogramNameForTesting(),
806 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1);
807 } 869 }
808 870
809 // Tests that an error other than name mismatch does not cause a captive portal 871 // Tests that an error other than name mismatch does not cause a captive portal
810 // interstitial to be shown, even if the certificate is marked as a known 872 // interstitial to be shown, even if the certificate is marked as a known
811 // captive portal certificate. 873 // captive portal certificate.
812 TEST_F(SSLErrorHandlerAuthorityInvalidTest, 874 TEST_F(SSLErrorHandlerCaptivePortalCertListTest, AuthorityInvalid) {
813 CaptivePortalCertificateList_ShouldShowGenericInterstitial) { 875 SetFeatureEnabled(true);
814 base::test::ScopedFeatureList scoped_feature_list;
815 scoped_feature_list.InitFromCommandLine(
816 "CaptivePortalCertificateList" /* enabled */,
817 std::string() /* disabled */);
818 876
877 ResetErrorHandler(net::CERT_STATUS_AUTHORITY_INVALID);
878 TestNoCaptivePortalInterstitial();
879 }
880
881 // Tests that an authority invalid error in addition to name mismatch error does
882 // not cause a captive portal interstitial to be shown, even if the certificate
883 // is marked as a known captive portal certificate. The resulting error is
884 // authority-invalid.
885 TEST_F(SSLErrorHandlerCaptivePortalCertListTest,
886 NameMismatchAndAuthorityInvalid) {
887 SetFeatureEnabled(true);
888
889 const net::CertStatus cert_status =
890 net::CERT_STATUS_COMMON_NAME_INVALID | net::CERT_STATUS_AUTHORITY_INVALID;
891 // Sanity check that AUTHORITY_INVALID is seen as the net error.
892 ASSERT_EQ(net::ERR_CERT_AUTHORITY_INVALID,
893 net::MapCertStatusToNetError(cert_status));
894 ResetErrorHandler(cert_status);
895 TestNoCaptivePortalInterstitial();
896 }
897
898 // Tests that another error in addition to name mismatch error does not cause a
899 // captive portal interstitial to be shown, even if the certificate is marked as
900 // a known captive portal certificate. Similar to
901 // NameMismatchAndAuthorityInvalid, except the resulting error is name mismatch.
902 TEST_F(SSLErrorHandlerCaptivePortalCertListTest, NameMismatchAndWeakKey) {
903 SetFeatureEnabled(true);
904
905 const net::CertStatus cert_status =
906 net::CERT_STATUS_COMMON_NAME_INVALID | net::CERT_STATUS_WEAK_KEY;
907 // Sanity check that COMMON_NAME_INVALID is seen as the net error, since the
908 // test is designed to verify that SSLErrorHandler notices other errors in the
909 // CertStatus even when COMMON_NAME_INVALID is the net error.
910 ASSERT_EQ(net::ERR_CERT_COMMON_NAME_INVALID,
911 net::MapCertStatusToNetError(cert_status));
912 ResetErrorHandler(cert_status);
913 TestNoCaptivePortalInterstitial();
914 }
915
916 #else
917
918 TEST_F(SSLErrorHandlerCaptivePortalCertListTest, DisabledByBuild) {
919 SetFeatureEnabled(true);
920
921 // Default error for SSLErrorHandlerNameMismatchTest tests is name mismatch,
922 // but the feature is disabled by build so a generic SSL interstitial will be
923 // displayed.
819 base::HistogramTester histograms; 924 base::HistogramTester histograms;
820 925
821 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); 926 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
822 EXPECT_EQ(1u, ssl_info().public_key_hashes.size()); 927 EXPECT_EQ(1u, ssl_info().public_key_hashes.size());
823 928
824 auto config_proto = 929 auto config_proto =
825 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>(); 930 base::MakeUnique<chrome_browser_ssl::SSLErrorAssistantConfig>();
826 config_proto->add_captive_portal_cert()->set_sha256_hash( 931 config_proto->add_captive_portal_cert()->set_sha256_hash(
827 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); 932 "sha256/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
828 config_proto->add_captive_portal_cert()->set_sha256_hash( 933 config_proto->add_captive_portal_cert()->set_sha256_hash(
829 ssl_info().public_key_hashes[0].ToString()); 934 ssl_info().public_key_hashes[0].ToString());
830 config_proto->add_captive_portal_cert()->set_sha256_hash( 935 config_proto->add_captive_portal_cert()->set_sha256_hash(
831 "sha256/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); 936 "sha256/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
832 SSLErrorHandler::SetErrorAssistantProto(std::move(config_proto)); 937 SSLErrorHandler::SetErrorAssistantProto(std::move(config_proto));
833 938
834 error_handler()->StartHandlingError(); 939 error_handler()->StartHandlingError();
835 940
836 // Timer should start for captive portal detection. 941 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
837 EXPECT_TRUE(error_handler()->IsTimerRunningForTesting()); 942 EXPECT_FALSE(delegate()->captive_portal_checked());
838 EXPECT_TRUE(delegate()->captive_portal_checked()); 943 EXPECT_TRUE(delegate()->ssl_interstitial_shown());
839 EXPECT_FALSE(delegate()->ssl_interstitial_shown());
840 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown()); 944 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
841 EXPECT_FALSE(delegate()->suggested_url_checked()); 945 EXPECT_FALSE(delegate()->suggested_url_checked());
842 946
843 base::RunLoop().RunUntilIdle(); 947 base::RunLoop().RunUntilIdle();
844 948
845 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting()); 949 EXPECT_FALSE(error_handler()->IsTimerRunningForTesting());
846 EXPECT_TRUE(delegate()->captive_portal_checked()); 950 EXPECT_FALSE(delegate()->captive_portal_checked());
847 EXPECT_TRUE(delegate()->ssl_interstitial_shown()); 951 EXPECT_TRUE(delegate()->ssl_interstitial_shown());
848 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown()); 952 EXPECT_FALSE(delegate()->captive_portal_interstitial_shown());
849 EXPECT_FALSE(delegate()->suggested_url_checked()); 953 EXPECT_FALSE(delegate()->suggested_url_checked());
850 954
851 // Check that the histogram for the captive portal cert was recorded.
852 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2); 955 histograms.ExpectTotalCount(SSLErrorHandler::GetHistogramNameForTesting(), 2);
853 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), 956 histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(),
854 SSLErrorHandler::HANDLE_ALL, 1); 957 SSLErrorHandler::HANDLE_ALL, 1);
855 histograms.ExpectBucketCount( 958 histograms.ExpectBucketCount(
856 SSLErrorHandler::GetHistogramNameForTesting(), 959 SSLErrorHandler::GetHistogramNameForTesting(),
857 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1); 960 SSLErrorHandler::SHOW_SSL_INTERSTITIAL_OVERRIDABLE, 1);
858 } 961 }
859 962
860 #endif // BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) 963 #endif // BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION)
OLDNEW
« no previous file with comments | « chrome/browser/ssl/ssl_error_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698