Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 7139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7150 | 7150 |
| 7151 // The blocked frame should still fire a load event in its parent's process. | 7151 // The blocked frame should still fire a load event in its parent's process. |
| 7152 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7152 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7153 | 7153 |
| 7154 // Check that the current RenderFrameHost has stopped loading. | 7154 // Check that the current RenderFrameHost has stopped loading. |
| 7155 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7155 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7156 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7156 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7157 load_observer.Wait(); | 7157 load_observer.Wait(); |
| 7158 } | 7158 } |
| 7159 | 7159 |
| 7160 // The blocked frame should stay at the old location. | 7160 if (IsBrowserSideNavigationEnabled()) { |
|
alexmos
2017/02/10 22:59:53
I'm not too thrilled that there will be a behavior
| |
| 7161 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | 7161 // The blocked frame should go to an error page. Hence its url is the |
| 7162 // blocked page url. | |
|
alexmos
2017/02/10 22:59:53
This isn't very intuitive, so perhaps explain why
arthursonzogni
2017/02/13 16:33:20
Done.
| |
| 7163 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); | |
| 7162 | 7164 |
| 7163 // The blocked frame should keep the old title. | 7165 // The page should get the title of an error page (i.e "") and not the |
| 7164 std::string frame_title; | 7166 // title of the blocked page. |
| 7165 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7167 std::string frame_title; |
| 7166 root->child_at(0), "domAutomationController.send(document.title)", | 7168 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7167 &frame_title)); | 7169 root->child_at(0), "domAutomationController.send(document.title)", |
| 7168 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7170 &frame_title)); |
| 7171 EXPECT_EQ("", frame_title); | |
|
alexmos
2017/02/10 22:59:53
I'd also check RFHI::last_successful_url() to make
arthursonzogni
2017/02/13 16:33:20
RFHI::last_successful_url() returns the empty url
alexmos
2017/02/14 06:57:19
Ah, got it, thanks. That's actually really great;
| |
| 7172 } else { | |
| 7173 // The blocked frame should stay at the old location. | |
| 7174 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | |
| 7175 | |
| 7176 // The blocked frame should keep the old title. | |
| 7177 std::string frame_title; | |
| 7178 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7179 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7180 &frame_title)); | |
| 7181 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7182 } | |
| 7169 | 7183 |
| 7170 // Navigate to a URL without CSP. | 7184 // Navigate to a URL without CSP. |
| 7171 EXPECT_TRUE(NavigateToURL( | 7185 EXPECT_TRUE(NavigateToURL( |
| 7172 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); | 7186 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); |
| 7173 | 7187 |
| 7174 // Verify that the frame's CSP got correctly reset to an empty set. | 7188 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7175 EXPECT_EQ(0u, | 7189 EXPECT_EQ(0u, |
| 7176 root->current_replication_state().accumulated_csp_headers.size()); | 7190 root->current_replication_state().accumulated_csp_headers.size()); |
| 7177 } | 7191 } |
| 7178 | 7192 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7225 | 7239 |
| 7226 // The blocked frame should still fire a load event in its parent's process. | 7240 // The blocked frame should still fire a load event in its parent's process. |
| 7227 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7241 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7228 | 7242 |
| 7229 // Check that the current RenderFrameHost has stopped loading. | 7243 // Check that the current RenderFrameHost has stopped loading. |
| 7230 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7244 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7231 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7245 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7232 load_observer2.Wait(); | 7246 load_observer2.Wait(); |
| 7233 } | 7247 } |
| 7234 | 7248 |
| 7235 // The blocked frame should stay at the old location. | 7249 if (IsBrowserSideNavigationEnabled()) { |
| 7236 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | 7250 // The blocked frame should go an error page. Hence its url is the |
| 7251 // blocked page url. | |
| 7252 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); | |
| 7237 | 7253 |
| 7238 // The blocked frame should keep the old title. | 7254 // The page should get the title of an error page (i.e "") and not the |
| 7239 std::string frame_title; | 7255 // title of the blocked page. |
| 7240 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7256 std::string frame_title; |
| 7241 root->child_at(0), "domAutomationController.send(document.title)", | 7257 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7242 &frame_title)); | 7258 root->child_at(0), "domAutomationController.send(document.title)", |
| 7243 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7259 &frame_title)); |
| 7260 EXPECT_EQ("", frame_title); | |
| 7261 } else { | |
| 7262 // The blocked frame should stay at the old location. | |
| 7263 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | |
| 7264 | |
| 7265 // The blocked frame should keep the old title. | |
| 7266 std::string frame_title; | |
| 7267 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7268 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7269 &frame_title)); | |
| 7270 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7271 } | |
| 7244 } | 7272 } |
| 7245 | 7273 |
| 7246 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. | 7274 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. |
| 7247 // In this version of a test, CSP is inherited by srcdoc iframe from a parent | 7275 // In this version of a test, CSP is inherited by srcdoc iframe from a parent |
| 7248 // that declared CSP via HTTP headers. Cross-origin frame navigating to a | 7276 // that declared CSP via HTTP headers. Cross-origin frame navigating to a |
| 7249 // blocked location is a child of the srcdoc iframe. | 7277 // blocked location is a child of the srcdoc iframe. |
| 7250 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 7278 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 7251 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { | 7279 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { |
| 7252 GURL main_url( | 7280 GURL main_url( |
| 7253 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); | 7281 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7294 | 7322 |
| 7295 // The blocked frame should still fire a load event in its parent's process. | 7323 // The blocked frame should still fire a load event in its parent's process. |
| 7296 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7324 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7297 | 7325 |
| 7298 // Check that the current RenderFrameHost has stopped loading. | 7326 // Check that the current RenderFrameHost has stopped loading. |
| 7299 if (navigating_frame->current_frame_host()->is_loading()) { | 7327 if (navigating_frame->current_frame_host()->is_loading()) { |
| 7300 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7328 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7301 load_observer2.Wait(); | 7329 load_observer2.Wait(); |
| 7302 } | 7330 } |
| 7303 | 7331 |
| 7304 // The blocked frame should stay at the old location. | 7332 if (IsBrowserSideNavigationEnabled()) { |
| 7305 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); | 7333 // The blocked frame should go an error page. Hence its url is the |
| 7334 // blocked page url. | |
| 7335 EXPECT_EQ(blocked_url, navigating_frame->current_url()); | |
| 7306 | 7336 |
| 7307 // The blocked frame should keep the old title. | 7337 // The page should get the title of an error page (i.e "") and not the |
| 7308 std::string frame_title; | 7338 // title of the blocked page. |
| 7309 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7339 std::string frame_title; |
| 7310 navigating_frame, "domAutomationController.send(document.title)", | 7340 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7311 &frame_title)); | 7341 navigating_frame, "domAutomationController.send(document.title)", |
| 7312 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7342 &frame_title)); |
| 7343 EXPECT_EQ("", frame_title); | |
| 7344 } else { | |
| 7345 // The blocked frame should stay at the old location. | |
| 7346 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); | |
| 7347 | |
| 7348 // The blocked frame should keep the old title. | |
| 7349 std::string frame_title; | |
| 7350 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7351 navigating_frame, "domAutomationController.send(document.title)", | |
| 7352 &frame_title)); | |
| 7353 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7354 } | |
| 7313 | 7355 |
| 7314 // Navigate the subframe to a URL without CSP. | 7356 // Navigate the subframe to a URL without CSP. |
| 7315 NavigateFrameToURL(srcdoc_frame, | 7357 NavigateFrameToURL(srcdoc_frame, |
| 7316 embedded_test_server()->GetURL("a.com", "/title1.html")); | 7358 embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 7317 | 7359 |
| 7318 // Verify that the frame's CSP got correctly reset to an empty set. | 7360 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7319 EXPECT_EQ( | 7361 EXPECT_EQ( |
| 7320 0u, | 7362 0u, |
| 7321 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); | 7363 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); |
| 7322 } | 7364 } |
| (...skipping 2010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 9333 "subframes_with_resources.html?urls=%s,%s&" | 9375 "subframes_with_resources.html?urls=%s,%s&" |
| 9334 "numSubresources=3", | 9376 "numSubresources=3", |
| 9335 path0.c_str(), path1.c_str()))); | 9377 path0.c_str(), path1.c_str()))); |
| 9336 EXPECT_TRUE(NavigateToURL(shell(), url)); | 9378 EXPECT_TRUE(NavigateToURL(shell(), url)); |
| 9337 bool result; | 9379 bool result; |
| 9338 EXPECT_TRUE(ExecuteScriptAndExtractBool(shell(), "createFrames()", &result)); | 9380 EXPECT_TRUE(ExecuteScriptAndExtractBool(shell(), "createFrames()", &result)); |
| 9339 EXPECT_TRUE(result); | 9381 EXPECT_TRUE(result); |
| 9340 } | 9382 } |
| 9341 | 9383 |
| 9342 } // namespace content | 9384 } // namespace content |
| OLD | NEW |