| OLD | NEW | 
|     1 // Copyright 2015 The Chromium Authors. All rights reserved. |     1 // Copyright 2015 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/security_state_tab_helper.h" |     5 #include "chrome/browser/ssl/security_state_tab_helper.h" | 
|     6  |     6  | 
|     7 #include "base/command_line.h" |     7 #include "base/command_line.h" | 
|     8 #include "base/files/file_path.h" |     8 #include "base/files/file_path.h" | 
|     9 #include "base/macros.h" |     9 #include "base/macros.h" | 
|    10 #include "base/strings/string_split.h" |    10 #include "base/strings/string_split.h" | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    56 #include "third_party/boringssl/src/include/openssl/ssl.h" |    56 #include "third_party/boringssl/src/include/openssl/ssl.h" | 
|    57 #include "ui/base/l10n/l10n_util.h" |    57 #include "ui/base/l10n/l10n_util.h" | 
|    58  |    58  | 
|    59 namespace { |    59 namespace { | 
|    60  |    60  | 
|    61 enum CertificateStatus { VALID_CERTIFICATE, INVALID_CERTIFICATE }; |    61 enum CertificateStatus { VALID_CERTIFICATE, INVALID_CERTIFICATE }; | 
|    62  |    62  | 
|    63 const base::FilePath::CharType kDocRoot[] = |    63 const base::FilePath::CharType kDocRoot[] = | 
|    64     FILE_PATH_LITERAL("chrome/test/data"); |    64     FILE_PATH_LITERAL("chrome/test/data"); | 
|    65  |    65  | 
|    66 // A WebContentsObserver useful for testing the SecurityStyleChanged() |    66 // A WebContentsObserver useful for testing the DidChangeVisibleSecurityState() | 
|    67 // method: it keeps track of the latest security style and explanation |    67 // method: it keeps track of the latest security style and explanation that was | 
|    68 // that was fired. |    68 // fired. | 
|    69 class SecurityStyleTestObserver : public content::WebContentsObserver { |    69 class SecurityStyleTestObserver : public content::WebContentsObserver { | 
|    70  public: |    70  public: | 
|    71   explicit SecurityStyleTestObserver(content::WebContents* web_contents) |    71   explicit SecurityStyleTestObserver(content::WebContents* web_contents) | 
|    72       : content::WebContentsObserver(web_contents), |    72       : content::WebContentsObserver(web_contents), | 
|    73         latest_security_style_(blink::WebSecurityStyleUnknown) {} |    73         latest_security_style_(blink::WebSecurityStyleUnknown) {} | 
|    74   ~SecurityStyleTestObserver() override {} |    74   ~SecurityStyleTestObserver() override {} | 
|    75  |    75  | 
|    76   void SecurityStyleChanged(blink::WebSecurityStyle security_style, |    76   void DidChangeVisibleSecurityState() override { | 
|    77                             const content::SecurityStyleExplanations& |    77     content::SecurityStyleExplanations explanations; | 
|    78                                 security_style_explanations) override { |    78     latest_security_style_ = web_contents()->GetDelegate()->GetSecurityStyle( | 
|    79     latest_security_style_ = security_style; |    79         web_contents(), &explanations); | 
|    80     latest_explanations_ = security_style_explanations; |    80     latest_explanations_ = explanations; | 
|    81   } |    81   } | 
|    82  |    82  | 
|    83   blink::WebSecurityStyle latest_security_style() const { |    83   blink::WebSecurityStyle latest_security_style() const { | 
|    84     return latest_security_style_; |    84     return latest_security_style_; | 
|    85   } |    85   } | 
|    86  |    86  | 
|    87   const content::SecurityStyleExplanations& latest_explanations() const { |    87   const content::SecurityStyleExplanations& latest_explanations() const { | 
|    88     return latest_explanations_; |    88     return latest_explanations_; | 
|    89   } |    89   } | 
|    90  |    90  | 
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   336       command_line->AppendSwitchASCII( |   336       command_line->AppendSwitchASCII( | 
|   337           security_state::switches::kMarkHttpAs, |   337           security_state::switches::kMarkHttpAs, | 
|   338           security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); |   338           security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); | 
|   339     } |   339     } | 
|   340   } |   340   } | 
|   341  |   341  | 
|   342  private: |   342  private: | 
|   343   DISALLOW_COPY_AND_ASSIGN(SecurityStateTabHelperTestWithPasswordCcSwitch); |   343   DISALLOW_COPY_AND_ASSIGN(SecurityStateTabHelperTestWithPasswordCcSwitch); | 
|   344 }; |   344 }; | 
|   345  |   345  | 
|   346 class SecurityStyleChangedTest : public InProcessBrowserTest { |   346 class DidChangeVisibleSecurityStateTest : public InProcessBrowserTest { | 
|   347  public: |   347  public: | 
|   348   SecurityStyleChangedTest() |   348   DidChangeVisibleSecurityStateTest() | 
|   349       : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { |   349       : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { | 
|   350     https_server_.ServeFilesFromSourceDirectory(base::FilePath(kDocRoot)); |   350     https_server_.ServeFilesFromSourceDirectory(base::FilePath(kDocRoot)); | 
|   351   } |   351   } | 
|   352  |   352  | 
|   353   void SetUpCommandLine(base::CommandLine* command_line) override { |   353   void SetUpCommandLine(base::CommandLine* command_line) override { | 
|   354     // Browser will both run and display insecure content. |   354     // Browser will both run and display insecure content. | 
|   355     command_line->AppendSwitch(switches::kAllowRunningInsecureContent); |   355     command_line->AppendSwitch(switches::kAllowRunningInsecureContent); | 
|   356   } |   356   } | 
|   357  |   357  | 
|   358  protected: |   358  protected: | 
|   359   net::EmbeddedTestServer https_server_; |   359   net::EmbeddedTestServer https_server_; | 
|   360  |   360  | 
|   361  private: |   361  private: | 
|   362   DISALLOW_COPY_AND_ASSIGN(SecurityStyleChangedTest); |   362   DISALLOW_COPY_AND_ASSIGN(DidChangeVisibleSecurityStateTest); | 
|   363 }; |   363 }; | 
|   364  |   364  | 
|   365 IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, HttpPage) { |   365 IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, HttpPage) { | 
|   366   ASSERT_TRUE(embedded_test_server()->Start()); |   366   ASSERT_TRUE(embedded_test_server()->Start()); | 
|   367   ui_test_utils::NavigateToURL( |   367   ui_test_utils::NavigateToURL( | 
|   368       browser(), embedded_test_server()->GetURL("/ssl/google.html")); |   368       browser(), embedded_test_server()->GetURL("/ssl/google.html")); | 
|   369   content::WebContents* contents = |   369   content::WebContents* contents = | 
|   370       browser()->tab_strip_model()->GetActiveWebContents(); |   370       browser()->tab_strip_model()->GetActiveWebContents(); | 
|   371   ASSERT_TRUE(contents); |   371   ASSERT_TRUE(contents); | 
|   372  |   372  | 
| (...skipping 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1505                              false /* expect cert status error */); |  1505                              false /* expect cert status error */); | 
|  1506  |  1506  | 
|  1507   browser()->tab_strip_model()->InsertWebContentsAt(0, new_contents, |  1507   browser()->tab_strip_model()->InsertWebContentsAt(0, new_contents, | 
|  1508                                                     TabStripModel::ADD_NONE); |  1508                                                     TabStripModel::ADD_NONE); | 
|  1509   CheckSecurityInfoForSecure(new_contents, security_state::SECURE, |  1509   CheckSecurityInfoForSecure(new_contents, security_state::SECURE, | 
|  1510                              security_state::NO_DEPRECATED_SHA1, |  1510                              security_state::NO_DEPRECATED_SHA1, | 
|  1511                              security_state::CONTENT_STATUS_NONE, false, |  1511                              security_state::CONTENT_STATUS_NONE, false, | 
|  1512                              false /* expect cert status error */); |  1512                              false /* expect cert status error */); | 
|  1513 } |  1513 } | 
|  1514  |  1514  | 
|  1515 // Tests that the WebContentsObserver::SecurityStyleChanged event fires |  1515 // Tests that the WebContentsObserver::DidChangeVisibleSecurityState event fires | 
|  1516 // with the current style on HTTP, broken HTTPS, and valid HTTPS pages. |  1516 // with the current style on HTTP, broken HTTPS, and valid HTTPS pages. | 
|  1517 IN_PROC_BROWSER_TEST_F(SecurityStyleChangedTest, SecurityStyleChangedObserver) { |  1517 IN_PROC_BROWSER_TEST_F(DidChangeVisibleSecurityStateTest, | 
 |  1518                        DidChangeVisibleSecurityStateObserver) { | 
|  1518   ASSERT_TRUE(https_server_.Start()); |  1519   ASSERT_TRUE(https_server_.Start()); | 
|  1519   ASSERT_TRUE(embedded_test_server()->Start()); |  1520   ASSERT_TRUE(embedded_test_server()->Start()); | 
|  1520  |  1521  | 
|  1521   net::EmbeddedTestServer https_test_server_expired( |  1522   net::EmbeddedTestServer https_test_server_expired( | 
|  1522       net::EmbeddedTestServer::TYPE_HTTPS); |  1523       net::EmbeddedTestServer::TYPE_HTTPS); | 
|  1523   https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |  1524   https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); | 
|  1524   https_test_server_expired.ServeFilesFromSourceDirectory( |  1525   https_test_server_expired.ServeFilesFromSourceDirectory( | 
|  1525       base::FilePath(kDocRoot)); |  1526       base::FilePath(kDocRoot)); | 
|  1526   ASSERT_TRUE(https_test_server_expired.Start()); |  1527   ASSERT_TRUE(https_test_server_expired.Start()); | 
|  1527  |  1528  | 
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1643   EXPECT_FALSE(observer.latest_explanations().pkp_bypassed); |  1644   EXPECT_FALSE(observer.latest_explanations().pkp_bypassed); | 
|  1644   EXPECT_TRUE(observer.latest_explanations().info_explanations.empty()); |  1645   EXPECT_TRUE(observer.latest_explanations().info_explanations.empty()); | 
|  1645   EXPECT_FALSE(observer.latest_explanations().displayed_mixed_content); |  1646   EXPECT_FALSE(observer.latest_explanations().displayed_mixed_content); | 
|  1646   EXPECT_FALSE(observer.latest_explanations().ran_mixed_content); |  1647   EXPECT_FALSE(observer.latest_explanations().ran_mixed_content); | 
|  1647 } |  1648 } | 
|  1648  |  1649  | 
|  1649 // Visit a valid HTTPS page, then a broken HTTPS page, and then go back, |  1650 // Visit a valid HTTPS page, then a broken HTTPS page, and then go back, | 
|  1650 // and test that the observed security style matches. |  1651 // and test that the observed security style matches. | 
|  1651 #if defined(OS_CHROMEOS) |  1652 #if defined(OS_CHROMEOS) | 
|  1652 // Flaky on Chrome OS. See https://crbug.com/638576. |  1653 // Flaky on Chrome OS. See https://crbug.com/638576. | 
|  1653 #define MAYBE_SecurityStyleChangedObserverGoBack \ |  1654 #define MAYBE_DidChangeVisibleSecurityStateObserverGoBack \ | 
|  1654   DISABLED_SecurityStyleChangedObserverGoBack |  1655   DISABLED_DidChangeVisibleSecurityStateObserverGoBack | 
|  1655 #else |  1656 #else | 
|  1656 #define MAYBE_SecurityStyleChangedObserverGoBack \ |  1657 #define MAYBE_DidChangeVisibleSecurityStateObserverGoBack \ | 
|  1657   SecurityStyleChangedObserverGoBack |  1658   DidChangeVisibleSecurityStateObserverGoBack | 
|  1658 #endif |  1659 #endif | 
|  1659 IN_PROC_BROWSER_TEST_F(SecurityStyleChangedTest, |  1660 IN_PROC_BROWSER_TEST_F(DidChangeVisibleSecurityStateTest, | 
|  1660                        MAYBE_SecurityStyleChangedObserverGoBack) { |  1661                        MAYBE_DidChangeVisibleSecurityStateObserverGoBack) { | 
|  1661   ASSERT_TRUE(https_server_.Start()); |  1662   ASSERT_TRUE(https_server_.Start()); | 
|  1662  |  1663  | 
|  1663   net::EmbeddedTestServer https_test_server_expired( |  1664   net::EmbeddedTestServer https_test_server_expired( | 
|  1664       net::EmbeddedTestServer::TYPE_HTTPS); |  1665       net::EmbeddedTestServer::TYPE_HTTPS); | 
|  1665   https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |  1666   https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); | 
|  1666   https_test_server_expired.ServeFilesFromSourceDirectory( |  1667   https_test_server_expired.ServeFilesFromSourceDirectory( | 
|  1667       base::FilePath(kDocRoot)); |  1668       base::FilePath(kDocRoot)); | 
|  1668   ASSERT_TRUE(https_test_server_expired.Start()); |  1669   ASSERT_TRUE(https_test_server_expired.Start()); | 
|  1669  |  1670  | 
|  1670   content::WebContents* web_contents = |  1671   content::WebContents* web_contents = | 
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1849  |  1850  | 
|  1850  private: |  1851  private: | 
|  1851   scoped_refptr<net::X509Certificate> cert_; |  1852   scoped_refptr<net::X509Certificate> cert_; | 
|  1852  |  1853  | 
|  1853   DISALLOW_COPY_AND_ASSIGN(BrowserTestNonsecureURLRequest); |  1854   DISALLOW_COPY_AND_ASSIGN(BrowserTestNonsecureURLRequest); | 
|  1854 }; |  1855 }; | 
|  1855  |  1856  | 
|  1856 // Tests that a connection with obsolete TLS settings does not get a |  1857 // Tests that a connection with obsolete TLS settings does not get a | 
|  1857 // secure connection explanation. |  1858 // secure connection explanation. | 
|  1858 IN_PROC_BROWSER_TEST_F(BrowserTestNonsecureURLRequest, |  1859 IN_PROC_BROWSER_TEST_F(BrowserTestNonsecureURLRequest, | 
|  1859                        SecurityStyleChangedObserverNonsecureConnection) { |  1860                        DidChangeVisibleSecurityStateObserverNonsecureConnection)
       { | 
|  1860   content::WebContents* web_contents = |  1861   content::WebContents* web_contents = | 
|  1861       browser()->tab_strip_model()->GetActiveWebContents(); |  1862       browser()->tab_strip_model()->GetActiveWebContents(); | 
|  1862   SecurityStyleTestObserver observer(web_contents); |  1863   SecurityStyleTestObserver observer(web_contents); | 
|  1863  |  1864  | 
|  1864   ui_test_utils::NavigateToURL( |  1865   ui_test_utils::NavigateToURL( | 
|  1865       browser(), GURL(std::string("https://") + kMockNonsecureHostname)); |  1866       browser(), GURL(std::string("https://") + kMockNonsecureHostname)); | 
|  1866  |  1867  | 
|  1867   // The security style of the page doesn't get downgraded for obsolete |  1868   // The security style of the page doesn't get downgraded for obsolete | 
|  1868   // TLS settings, so it should remain at WebSecurityStyleAuthenticated. |  1869   // TLS settings, so it should remain at WebSecurityStyleAuthenticated. | 
|  1869   EXPECT_EQ(blink::WebSecurityStyleAuthenticated, |  1870   EXPECT_EQ(blink::WebSecurityStyleAuthenticated, | 
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2031   SecurityStateTabHelper* helper = |  2032   SecurityStateTabHelper* helper = | 
|  2032       SecurityStateTabHelper::FromWebContents(web_contents); |  2033       SecurityStateTabHelper::FromWebContents(web_contents); | 
|  2033   ASSERT_TRUE(helper); |  2034   ASSERT_TRUE(helper); | 
|  2034   security_state::SecurityInfo security_info; |  2035   security_state::SecurityInfo security_info; | 
|  2035   helper->GetSecurityInfo(&security_info); |  2036   helper->GetSecurityInfo(&security_info); | 
|  2036   EXPECT_EQ(security_state::SECURE, security_info.security_level); |  2037   EXPECT_EQ(security_state::SECURE, security_info.security_level); | 
|  2037   EXPECT_EQ(kTestSCTStatuses, security_info.sct_verify_statuses); |  2038   EXPECT_EQ(kTestSCTStatuses, security_info.sct_verify_statuses); | 
|  2038 } |  2039 } | 
|  2039  |  2040  | 
|  2040 }  // namespace |  2041 }  // namespace | 
| OLD | NEW |