Chromium Code Reviews| Index: chrome/browser/ssl/ssl_browser_tests.cc |
| diff --git a/chrome/browser/ssl/ssl_browser_tests.cc b/chrome/browser/ssl/ssl_browser_tests.cc |
| index c89e97de6a9beddf8b6c30b7bdf4db4054acaf50..563d3f53fd37da7e1e70f4ce5b0dcc3dc53a45e3 100644 |
| --- a/chrome/browser/ssl/ssl_browser_tests.cc |
| +++ b/chrome/browser/ssl/ssl_browser_tests.cc |
| @@ -31,6 +31,7 @@ |
| #include "chrome/browser/interstitials/security_interstitial_page_test_utils.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ssl/bad_clock_blocking_page.h" |
| +#include "chrome/browser/ssl/captive_portal_blocking_page.h" |
| #include "chrome/browser/ssl/cert_report_helper.h" |
| #include "chrome/browser/ssl/cert_verifier_browser_test.h" |
| #include "chrome/browser/ssl/certificate_reporting_test_utils.h" |
| @@ -39,6 +40,7 @@ |
| #include "chrome/browser/ssl/security_state_tab_helper.h" |
| #include "chrome/browser/ssl/ssl_blocking_page.h" |
| #include "chrome/browser/ssl/ssl_error_handler.h" |
| +#include "chrome/browser/ssl/tls_error_assistant.pb.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| @@ -122,6 +124,10 @@ const base::FilePath::CharType kDocRoot[] = |
| namespace { |
| +// Sha256 fingerprint of okay.pem's Subject Public Key Information. |
| +const char* kOkayPemSPKI = |
| + "sha256/2zCMVDKgnKec0721Sp1zVh2yiHeW/LJK4STkNnEa1og="; |
|
estark
2017/01/12 18:54:43
Hmmmmm. This is unfortunate, since okay.pem will g
meacer
2017/01/20 21:29:59
How often does it change? If it's, say, yearly, I
estark
2017/01/20 23:31:17
Yeah I think it's relatively rare, so including th
|
| + |
| enum ProceedDecision { |
| SSL_INTERSTITIAL_PROCEED, |
| SSL_INTERSTITIAL_DO_NOT_PROCEED |
| @@ -224,12 +230,17 @@ class SSLInterstitialTimerObserver { |
| // Waits until the interstitial delay timer in SSLErrorHandler is started. |
| void WaitForTimerStarted() { message_loop_runner_->Run(); } |
| + // Returns true if the timer has been started. |
| + bool timer_started() const { return timer_started_; } |
| + |
| private: |
| void OnTimerStarted(content::WebContents* web_contents) { |
| + timer_started_ = true; |
| if (web_contents_ == web_contents) |
| message_loop_runner_->Quit(); |
| } |
| + bool timer_started_ = false; |
| const content::WebContents* web_contents_; |
| SSLErrorHandler::TimerStartedCallback callback_; |
| @@ -1866,7 +1877,7 @@ IN_PROC_BROWSER_TEST_F(SSLUITest, MAYBE_TestRunsCachedInsecureContent) { |
| // This test ensures the CN invalid status does not 'stick' to a certificate |
| // (see bug #1044942) and that it depends on the host-name. |
| // Test if disabled due to flakiness http://crbug.com/368280 . |
| -IN_PROC_BROWSER_TEST_F(SSLUITest, DISABLED_TestCNInvalidStickiness) { |
|
estark
2017/01/12 18:54:43
Not flaky anymore?
meacer
2017/01/12 23:54:02
I was looking into re-enabling this in another CL.
|
| +IN_PROC_BROWSER_TEST_F(SSLUITest, TestCNInvalidStickiness) { |
| ASSERT_TRUE(https_server_.Start()); |
| ASSERT_TRUE(https_server_mismatched_.Start()); |
| @@ -3885,6 +3896,35 @@ IN_PROC_BROWSER_TEST_F(SSLUITestIgnoreLocalhostCertErrors, |
| ASSERT_TRUE(content::ExecuteScript(tab, "window.open()")); |
| } |
| +IN_PROC_BROWSER_TEST_F(SSLUITest, CaptivePortalListTest) { |
| + ASSERT_TRUE(https_server_mismatched_.Start()); |
| + base::HistogramTester histograms; |
| + |
| + // Mark the server's cert as a captive portal cert. |
| + chrome_browser_ssl::TLSErrorAssistantConfig config_proto; |
| + config_proto.add_captive_portal_cert()->set_sha256_hash(kOkayPemSPKI); |
| + SSLErrorHandler::SetErrorAssistantProtoForTesting(config_proto); |
| + |
| + // Navigate to an unsafe site. Proceed with interstitial page to indicate |
| + // the user approves the bad certificate. |
| + WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); |
| + SSLInterstitialTimerObserver interstitial_timer_observer(tab); |
| + ui_test_utils::NavigateToURL( |
| + browser(), https_server_mismatched_.GetURL("/ssl/blank_page.html")); |
| + content::WaitForInterstitialAttach(tab); |
| + |
| + InterstitialPage* interstitial_page = tab->GetInterstitialPage(); |
| + ASSERT_EQ(CaptivePortalBlockingPage::kTypeForTesting, |
| + interstitial_page->GetDelegateForTesting()->GetTypeForTesting()); |
| + EXPECT_FALSE(interstitial_timer_observer.timer_started()); |
| + |
| + // Check that the histogram for the captive portal cert was recorded. |
| + histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
| + SSLErrorHandler::HANDLE_ALL, 1); |
| + histograms.ExpectBucketCount(SSLErrorHandler::GetHistogramNameForTesting(), |
| + SSLErrorHandler::CAPTIVE_PORTAL_CERT_FOUND, 1); |
| +} |
| + |
| // TODO(jcampan): more tests to do below. |
| // Visit a page over https that contains a frame with a redirect. |