| 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 2390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2401 " B = http://b.com/", | 2401 " B = http://b.com/", |
| 2402 DepictFrameTree(root)); | 2402 DepictFrameTree(root)); |
| 2403 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 2403 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 2404 child->current_frame_host()->GetSiteInstance()); | 2404 child->current_frame_host()->GetSiteInstance()); |
| 2405 } | 2405 } |
| 2406 | 2406 |
| 2407 // The FrameTreeNode should update its URL (so that we don't affect other uses | 2407 // The FrameTreeNode should update its URL (so that we don't affect other uses |
| 2408 // of the API), but the frame's last_successful_url shouldn't change and the | 2408 // of the API), but the frame's last_successful_url shouldn't change and the |
| 2409 // origin should be empty. | 2409 // origin should be empty. |
| 2410 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the | 2410 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the |
| 2411 // last successful url should be empty (since the frame only loaded an error | 2411 // last succesful url should be empty (since the frame only loaded an error |
| 2412 // page). | 2412 // page). |
| 2413 if (IsBrowserSideNavigationEnabled()) | 2413 if (IsBrowserSideNavigationEnabled()) |
| 2414 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url()); | 2414 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url()); |
| 2415 else | 2415 else |
| 2416 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url()); | 2416 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url()); |
| 2417 EXPECT_EQ(url_b, child->current_url()); | 2417 EXPECT_EQ(url_b, child->current_url()); |
| 2418 EXPECT_EQ("null", child->current_origin().Serialize()); | 2418 EXPECT_EQ("null", child->current_origin().Serialize()); |
| 2419 | 2419 |
| 2420 // Try again after re-enabling host resolution. | 2420 // Try again after re-enabling host resolution. |
| 2421 host_resolver()->AddRule("*", "127.0.0.1"); | 2421 host_resolver()->AddRule("*", "127.0.0.1"); |
| (...skipping 4995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7417 | 7417 |
| 7418 // The blocked frame should still fire a load event in its parent's process. | 7418 // The blocked frame should still fire a load event in its parent's process. |
| 7419 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7419 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7420 | 7420 |
| 7421 // Check that the current RenderFrameHost has stopped loading. | 7421 // Check that the current RenderFrameHost has stopped loading. |
| 7422 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7422 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7423 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7423 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7424 load_observer.Wait(); | 7424 load_observer.Wait(); |
| 7425 } | 7425 } |
| 7426 | 7426 |
| 7427 // The last successful url shouldn't be the blocked url. | 7427 // The blocked frame should stay at the old location. |
| 7428 EXPECT_EQ(old_subframe_url, | 7428 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); |
| 7429 root->child_at(0)->current_frame_host()->last_successful_url()); | |
| 7430 | 7429 |
| 7431 if (IsBrowserSideNavigationEnabled()) { | 7430 // The blocked frame should keep the old title. |
| 7432 // The blocked frame should go to an error page. Errors currently commit | 7431 std::string frame_title; |
| 7433 // with the URL of the blocked page. | 7432 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7434 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); | 7433 root->child_at(0), "domAutomationController.send(document.title)", |
| 7435 | 7434 &frame_title)); |
| 7436 // The page should get the title of an error page (i.e "") and not the | 7435 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7437 // title of the blocked page. | |
| 7438 std::string frame_title; | |
| 7439 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7440 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7441 &frame_title)); | |
| 7442 EXPECT_EQ("", frame_title); | |
| 7443 } else { | |
| 7444 // The blocked frame should stay at the old location. | |
| 7445 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | |
| 7446 | |
| 7447 // The blocked frame should keep the old title. | |
| 7448 std::string frame_title; | |
| 7449 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7450 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7451 &frame_title)); | |
| 7452 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7453 } | |
| 7454 | 7436 |
| 7455 // Navigate to a URL without CSP. | 7437 // Navigate to a URL without CSP. |
| 7456 EXPECT_TRUE(NavigateToURL( | 7438 EXPECT_TRUE(NavigateToURL( |
| 7457 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); | 7439 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); |
| 7458 | 7440 |
| 7459 // Verify that the frame's CSP got correctly reset to an empty set. | 7441 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7460 EXPECT_EQ(0u, | 7442 EXPECT_EQ(0u, |
| 7461 root->current_replication_state().accumulated_csp_headers.size()); | 7443 root->current_replication_state().accumulated_csp_headers.size()); |
| 7462 } | 7444 } |
| 7463 | 7445 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7510 | 7492 |
| 7511 // The blocked frame should still fire a load event in its parent's process. | 7493 // The blocked frame should still fire a load event in its parent's process. |
| 7512 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7494 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7513 | 7495 |
| 7514 // Check that the current RenderFrameHost has stopped loading. | 7496 // Check that the current RenderFrameHost has stopped loading. |
| 7515 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7497 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7516 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7498 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7517 load_observer2.Wait(); | 7499 load_observer2.Wait(); |
| 7518 } | 7500 } |
| 7519 | 7501 |
| 7520 // The last successful url shouldn't be the blocked url. | 7502 // The blocked frame should stay at the old location. |
| 7521 EXPECT_EQ(old_subframe_url, | 7503 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); |
| 7522 root->child_at(0)->current_frame_host()->last_successful_url()); | |
| 7523 | 7504 |
| 7524 if (IsBrowserSideNavigationEnabled()) { | 7505 // The blocked frame should keep the old title. |
| 7525 // The blocked frame should go to an error page. Errors currently commit | 7506 std::string frame_title; |
| 7526 // with the URL of the blocked page. | 7507 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7527 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); | 7508 root->child_at(0), "domAutomationController.send(document.title)", |
| 7528 | 7509 &frame_title)); |
| 7529 // The page should get the title of an error page (i.e "") and not the | 7510 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7530 // title of the blocked page. | |
| 7531 std::string frame_title; | |
| 7532 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7533 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7534 &frame_title)); | |
| 7535 EXPECT_EQ("", frame_title); | |
| 7536 } else { | |
| 7537 // The blocked frame should stay at the old location. | |
| 7538 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | |
| 7539 | |
| 7540 // The blocked frame should keep the old title. | |
| 7541 std::string frame_title; | |
| 7542 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7543 root->child_at(0), "domAutomationController.send(document.title)", | |
| 7544 &frame_title)); | |
| 7545 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7546 } | |
| 7547 } | 7511 } |
| 7548 | 7512 |
| 7549 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. | 7513 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. |
| 7550 // In this version of a test, CSP is inherited by srcdoc iframe from a parent | 7514 // In this version of a test, CSP is inherited by srcdoc iframe from a parent |
| 7551 // that declared CSP via HTTP headers. Cross-origin frame navigating to a | 7515 // that declared CSP via HTTP headers. Cross-origin frame navigating to a |
| 7552 // blocked location is a child of the srcdoc iframe. | 7516 // blocked location is a child of the srcdoc iframe. |
| 7553 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 7517 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 7554 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { | 7518 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { |
| 7555 GURL main_url( | 7519 GURL main_url( |
| 7556 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); | 7520 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... |
| 7597 | 7561 |
| 7598 // The blocked frame should still fire a load event in its parent's process. | 7562 // The blocked frame should still fire a load event in its parent's process. |
| 7599 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7563 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7600 | 7564 |
| 7601 // Check that the current RenderFrameHost has stopped loading. | 7565 // Check that the current RenderFrameHost has stopped loading. |
| 7602 if (navigating_frame->current_frame_host()->is_loading()) { | 7566 if (navigating_frame->current_frame_host()->is_loading()) { |
| 7603 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7567 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7604 load_observer2.Wait(); | 7568 load_observer2.Wait(); |
| 7605 } | 7569 } |
| 7606 | 7570 |
| 7607 // The last successful url shouldn't be the blocked url. | 7571 // The blocked frame should stay at the old location. |
| 7608 EXPECT_EQ(old_subframe_url, | 7572 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); |
| 7609 navigating_frame->current_frame_host()->last_successful_url()); | |
| 7610 | 7573 |
| 7611 if (IsBrowserSideNavigationEnabled()) { | 7574 // The blocked frame should keep the old title. |
| 7612 // The blocked frame should go to an error page. Errors currently commit | 7575 std::string frame_title; |
| 7613 // with the URL of the blocked page. | 7576 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7614 EXPECT_EQ(blocked_url, navigating_frame->current_url()); | 7577 navigating_frame, "domAutomationController.send(document.title)", |
| 7615 | 7578 &frame_title)); |
| 7616 // The page should get the title of an error page (i.e "") and not the | 7579 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7617 // title of the blocked page. | |
| 7618 std::string frame_title; | |
| 7619 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7620 navigating_frame, "domAutomationController.send(document.title)", | |
| 7621 &frame_title)); | |
| 7622 EXPECT_EQ("", frame_title); | |
| 7623 } else { | |
| 7624 // The blocked frame should stay at the old location. | |
| 7625 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); | |
| 7626 | |
| 7627 // The blocked frame should keep the old title. | |
| 7628 std::string frame_title; | |
| 7629 EXPECT_TRUE(ExecuteScriptAndExtractString( | |
| 7630 navigating_frame, "domAutomationController.send(document.title)", | |
| 7631 &frame_title)); | |
| 7632 EXPECT_EQ("Title Of Awesomeness", frame_title); | |
| 7633 } | |
| 7634 | 7580 |
| 7635 // Navigate the subframe to a URL without CSP. | 7581 // Navigate the subframe to a URL without CSP. |
| 7636 NavigateFrameToURL(srcdoc_frame, | 7582 NavigateFrameToURL(srcdoc_frame, |
| 7637 embedded_test_server()->GetURL("a.com", "/title1.html")); | 7583 embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 7638 | 7584 |
| 7639 // Verify that the frame's CSP got correctly reset to an empty set. | 7585 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7640 EXPECT_EQ( | 7586 EXPECT_EQ( |
| 7641 0u, | 7587 0u, |
| 7642 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); | 7588 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); |
| 7643 } | 7589 } |
| (...skipping 2251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9895 | 9841 |
| 9896 // Try the same navigation, but use the browser-initiated path. | 9842 // Try the same navigation, but use the browser-initiated path. |
| 9897 NavigateFrameToURL(root->child_at(0), frame_url); | 9843 NavigateFrameToURL(root->child_at(0), frame_url); |
| 9898 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); | 9844 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); |
| 9899 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); | 9845 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); |
| 9900 EXPECT_EQ(b_site_instance, | 9846 EXPECT_EQ(b_site_instance, |
| 9901 root->child_at(0)->current_frame_host()->GetSiteInstance()); | 9847 root->child_at(0)->current_frame_host()->GetSiteInstance()); |
| 9902 } | 9848 } |
| 9903 | 9849 |
| 9904 } // namespace content | 9850 } // namespace content |
| OLD | NEW |