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

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

Issue 1506203004: Reland of Downgrade lock icon for broken-HTTPS subresources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix conflict Created 5 years 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 | « no previous file | chrome/test/data/ssl/page_with_dynamic_unsafe_image.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/base_switches.h" 5 #include "base/base_switches.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 base::RunLoop().RunUntilIdle(); 548 base::RunLoop().RunUntilIdle();
549 EXPECT_EQ(std::string(), GetLatestHostnameReported()); 549 EXPECT_EQ(std::string(), GetLatestHostnameReported());
550 } 550 }
551 } 551 }
552 552
553 net::EmbeddedTestServer https_server_; 553 net::EmbeddedTestServer https_server_;
554 net::EmbeddedTestServer https_server_expired_; 554 net::EmbeddedTestServer https_server_expired_;
555 net::EmbeddedTestServer https_server_mismatched_; 555 net::EmbeddedTestServer https_server_mismatched_;
556 net::SpawnedTestServer wss_server_expired_; 556 net::SpawnedTestServer wss_server_expired_;
557 557
558 protected:
559 // Navigates to an interstitial and clicks through the certificate
560 // error; then navigates to a page at |path| that loads unsafe content.
561 void SetUpUnsafeContentsWithUserException(const std::string& path) {
562 ASSERT_TRUE(https_server_.Start());
563 // Note that it is necessary to user https_server_mismatched_ here over the
564 // other invalid cert servers. This is because the test relies on the two
565 // servers having different hosts since SSL exceptions are per-host, not per
566 // origin, and https_server_mismatched_ uses 'localhost' rather than
567 // '127.0.0.1'.
568 ASSERT_TRUE(https_server_mismatched_.Start());
569
570 // Navigate to an unsafe site. Proceed with interstitial page to indicate
571 // the user approves the bad certificate.
572 ui_test_utils::NavigateToURL(
573 browser(), https_server_mismatched_.GetURL("/ssl/blank_page.html"));
574 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
575 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
576 AuthState::SHOWING_INTERSTITIAL);
577 ProceedThroughInterstitial(tab);
578 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
579 AuthState::NONE);
580
581 std::string replacement_path;
582 GetFilePathWithHostAndPortReplacement(
583 path, https_server_mismatched_.host_port_pair(), &replacement_path);
584 ui_test_utils::NavigateToURL(browser(),
585 https_server_.GetURL(replacement_path));
586 }
587
558 private: 588 private:
559 typedef net::SpawnedTestServer::SSLOptions SSLOptions; 589 typedef net::SpawnedTestServer::SSLOptions SSLOptions;
560 590
561 DISALLOW_COPY_AND_ASSIGN(SSLUITest); 591 DISALLOW_COPY_AND_ASSIGN(SSLUITest);
562 }; 592 };
563 593
564 class SSLUITestBlock : public SSLUITest { 594 class SSLUITestBlock : public SSLUITest {
565 public: 595 public:
566 SSLUITestBlock() : SSLUITest() {} 596 SSLUITestBlock() : SSLUITest() {}
567 597
(...skipping 1550 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 page_with_unsafe_worker_path)); 2148 page_with_unsafe_worker_path));
2119 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 2149 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
2120 // Expect Worker not to load insecure content. 2150 // Expect Worker not to load insecure content.
2121 CheckWorkerLoadResult(tab, false); 2151 CheckWorkerLoadResult(tab, false);
2122 // The bad content is filtered, expect the state to be authenticated. 2152 // The bad content is filtered, expect the state to be authenticated.
2123 CheckAuthenticatedState(tab, AuthState::NONE); 2153 CheckAuthenticatedState(tab, AuthState::NONE);
2124 } 2154 }
2125 2155
2126 // This test, and the related test TestUnsafeContentsWithUserException, verify 2156 // This test, and the related test TestUnsafeContentsWithUserException, verify
2127 // that if unsafe content is loaded but the host of that unsafe content has a 2157 // that if unsafe content is loaded but the host of that unsafe content has a
2128 // user exception, the content runs and the security style remains 2158 // user exception, the content runs and the security style is downgraded.
2129 // authenticated. This is not necessarily the behavior that should exist, but it
2130 // is verification that it does behave that way. See https://crbug.com/477868
2131 // for more inforamtion on this.
2132 IN_PROC_BROWSER_TEST_F(SSLUITest, TestUnsafeContentsInWorkerWithUserException) { 2159 IN_PROC_BROWSER_TEST_F(SSLUITest, TestUnsafeContentsInWorkerWithUserException) {
2133 ASSERT_TRUE(https_server_.Start()); 2160 ASSERT_TRUE(https_server_.Start());
2134 // Note that it is necessary to user https_server_mismatched_ here over the 2161 // Note that it is necessary to user https_server_mismatched_ here over the
2135 // other invalid cert servers. This is because the test relies on the two 2162 // other invalid cert servers. This is because the test relies on the two
2136 // servers having different hosts since SSL exceptions are per-host, not per 2163 // servers having different hosts since SSL exceptions are per-host, not per
2137 // origin, and https_server_mismatched_ uses 'localhost' rather than 2164 // origin, and https_server_mismatched_ uses 'localhost' rather than
2138 // '127.0.0.1'. 2165 // '127.0.0.1'.
2139 ASSERT_TRUE(https_server_mismatched_.Start()); 2166 ASSERT_TRUE(https_server_mismatched_.Start());
2140 2167
2141 // Navigate to an unsafe site. Proceed with interstitial page to indicate 2168 // Navigate to an unsafe site. Proceed with interstitial page to indicate
2142 // the user approves the bad certificate. 2169 // the user approves the bad certificate.
2143 ui_test_utils::NavigateToURL( 2170 ui_test_utils::NavigateToURL(
2144 browser(), https_server_mismatched_.GetURL("/ssl/blank_page.html")); 2171 browser(), https_server_mismatched_.GetURL("/ssl/blank_page.html"));
2145 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 2172 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
2146 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID, 2173 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
2147 AuthState::SHOWING_INTERSTITIAL); 2174 AuthState::SHOWING_INTERSTITIAL);
2148 ProceedThroughInterstitial(tab); 2175 ProceedThroughInterstitial(tab);
2149 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID, 2176 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
2150 AuthState::NONE); 2177 AuthState::NONE);
2151 2178
2152 // Navigate to safe page that has Worker loading unsafe content. 2179 // Navigate to safe page that has Worker loading unsafe content.
2153 // Expect content to load but be marked as auth broken due to running insecure 2180 // Expect content to load but be marked as auth broken due to running insecure
2154 // content. 2181 // content.
2155 std::string page_with_unsafe_worker_path; 2182 std::string page_with_unsafe_worker_path;
2156 GetPageWithUnsafeWorkerPath(https_server_mismatched_, 2183 GetPageWithUnsafeWorkerPath(https_server_mismatched_,
2157 &page_with_unsafe_worker_path); 2184 &page_with_unsafe_worker_path);
2158 ui_test_utils::NavigateToURL( 2185 ui_test_utils::NavigateToURL(
2159 browser(), https_server_.GetURL(page_with_unsafe_worker_path)); 2186 browser(), https_server_.GetURL(page_with_unsafe_worker_path));
2160 CheckWorkerLoadResult(tab, true); // Worker loads insecure content 2187 CheckWorkerLoadResult(tab, true); // Worker loads insecure content
2161 CheckAuthenticatedState(tab, CertError::NONE); 2188 CheckAuthenticationBrokenState(tab, CertError::NONE,
2189 AuthState::RAN_INSECURE_CONTENT);
2162 } 2190 }
2163 2191
2164 // Visits a page with unsafe content and makes sure that if a user exception to 2192 // Visits a page with unsafe content and makes sure that if a user exception to
2165 // the certificate error is present, the image is loaded and script executes. 2193 // the certificate error is present, the image is loaded and script executes.
2166 //
2167 // See the comment above SSLUITest.TestUnsafeContentsInWorkerWithUserException
2168 // for a discussion about the desired behavior.
2169 IN_PROC_BROWSER_TEST_F(SSLUITest, TestUnsafeContentsWithUserException) { 2194 IN_PROC_BROWSER_TEST_F(SSLUITest, TestUnsafeContentsWithUserException) {
2170 ASSERT_TRUE(https_server_.Start()); 2195 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
2171 // Note that it is necessary to user https_server_mismatched_ here over the 2196 ASSERT_NO_FATAL_FAILURE(SetUpUnsafeContentsWithUserException(
2172 // other invalid cert servers. This is because the test relies on the two 2197 "/ssl/page_with_unsafe_contents.html"));
2173 // servers having different hosts since SSL exceptions are per-host, not per 2198 CheckAuthenticationBrokenState(
2174 // origin, and https_server_mismatched_ uses 'localhost' rather than 2199 tab, CertError::NONE,
2175 // '127.0.0.1'. 2200 AuthState::RAN_INSECURE_CONTENT | AuthState::DISPLAYED_INSECURE_CONTENT);
2176 ASSERT_TRUE(https_server_mismatched_.Start());
2177 2201
2178 // Navigate to an unsafe site. Proceed with interstitial page to indicate 2202 int img_width;
2179 // the user approves the bad certificate. 2203 EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
2180 ui_test_utils::NavigateToURL( 2204 tab, "window.domAutomationController.send(ImageWidth());", &img_width));
2181 browser(), https_server_mismatched_.GetURL("/ssl/blank_page.html")); 2205 // In order to check that the image was loaded, we check its width.
2182 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 2206 // The actual image (Google logo) is 114 pixels wide, so we assume a good
2183 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID, 2207 // image is greater than 100.
2184 AuthState::SHOWING_INTERSTITIAL); 2208 EXPECT_GT(img_width, 100);
2185 ProceedThroughInterstitial(tab);
2186 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
2187 AuthState::NONE);
2188 2209
2210 bool js_result = false;
2211 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
2212 tab, "window.domAutomationController.send(IsFooSet());", &js_result));
2213 EXPECT_TRUE(js_result);
2214
2215 // Test that active subresources with the same certificate errors as
2216 // the main resources don't cause mixed content UI downgrades. (Such
2217 // errors would be confusing and duplicative.)
2189 std::string replacement_path; 2218 std::string replacement_path;
2190 GetFilePathWithHostAndPortReplacement( 2219 GetFilePathWithHostAndPortReplacement(
2191 "/ssl/page_with_unsafe_contents.html", 2220 "/ssl/page_with_unsafe_contents.html",
2192 https_server_mismatched_.host_port_pair(), &replacement_path); 2221 https_server_mismatched_.host_port_pair(), &replacement_path);
2193 ui_test_utils::NavigateToURL(browser(), 2222 ui_test_utils::NavigateToURL(
2194 https_server_.GetURL(replacement_path)); 2223 browser(), https_server_mismatched_.GetURL(replacement_path));
2224 js_result = false;
2225 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
2226 tab, "window.domAutomationController.send(IsFooSet());", &js_result));
2227 EXPECT_TRUE(js_result);
2228 CheckAuthenticationBrokenState(tab, net::CERT_STATUS_COMMON_NAME_INVALID,
2229 AuthState::NONE);
2230 }
2195 2231
2196 // When the bad content is filtered, the state is expected to be 2232 // Like the test above, but only displaying inactive content (an image).
2197 // authenticated. 2233 IN_PROC_BROWSER_TEST_F(SSLUITest, TestUnsafeImageWithUserException) {
2198 CheckAuthenticatedState(tab, AuthState::NONE); 2234 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
2235 ASSERT_NO_FATAL_FAILURE(
2236 SetUpUnsafeContentsWithUserException("/ssl/page_with_unsafe_image.html"));
2237 CheckAuthenticatedState(tab, AuthState::DISPLAYED_INSECURE_CONTENT);
2199 2238
2200 int img_width; 2239 int img_width;
2201 EXPECT_TRUE(content::ExecuteScriptAndExtractInt( 2240 EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
2202 tab, "window.domAutomationController.send(ImageWidth());", &img_width)); 2241 tab, "window.domAutomationController.send(ImageWidth());", &img_width));
2203 // In order to check that the image was loaded, we check its width. 2242 // In order to check that the image was loaded, we check its width.
2204 // The actual image (Google logo) is 114 pixels wide, so we assume a good 2243 // The actual image (Google logo) is 114 pixels wide, so we assume a good
2205 // image is greater than 100. 2244 // image is greater than 100.
2206 EXPECT_GT(img_width, 100); 2245 EXPECT_GT(img_width, 100);
2207
2208 bool js_result = false;
2209 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
2210 tab, "window.domAutomationController.send(IsFooSet());", &js_result));
2211 EXPECT_TRUE(js_result);
2212 CheckAuthenticatedState(tab, CertError::NONE);
2213 } 2246 }
2214 2247
2215 // Test that when the browser blocks displaying insecure content (images), the 2248 // Test that when the browser blocks displaying insecure content (images), the
2216 // indicator shows a secure page, because the blocking made the otherwise 2249 // indicator shows a secure page, because the blocking made the otherwise
2217 // unsafe page safe (the notification of this state is handled by other means). 2250 // unsafe page safe (the notification of this state is handled by other means).
2218 IN_PROC_BROWSER_TEST_F(SSLUITestBlock, TestBlockDisplayingInsecureImage) { 2251 IN_PROC_BROWSER_TEST_F(SSLUITestBlock, TestBlockDisplayingInsecureImage) {
2219 ASSERT_TRUE(embedded_test_server()->Start()); 2252 ASSERT_TRUE(embedded_test_server()->Start());
2220 ASSERT_TRUE(https_server_.Start()); 2253 ASSERT_TRUE(https_server_.Start());
2221 2254
2222 std::string replacement_path; 2255 std::string replacement_path;
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
2884 2917
2885 // Visit a page over https that contains a frame with a redirect. 2918 // Visit a page over https that contains a frame with a redirect.
2886 2919
2887 // XMLHttpRequest insecure content in synchronous mode. 2920 // XMLHttpRequest insecure content in synchronous mode.
2888 2921
2889 // XMLHttpRequest insecure content in asynchronous mode. 2922 // XMLHttpRequest insecure content in asynchronous mode.
2890 2923
2891 // XMLHttpRequest over bad ssl in synchronous mode. 2924 // XMLHttpRequest over bad ssl in synchronous mode.
2892 2925
2893 // XMLHttpRequest over OK ssl in synchronous mode. 2926 // XMLHttpRequest over OK ssl in synchronous mode.
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/ssl/page_with_dynamic_unsafe_image.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698